Code formatting/indentation unified in trunk
[qtrapids] / src / server / ServerDb.hpp
1 #ifndef _SERVERDB_HPP_
2 #define _SERVERDB_HPP_
3
4 #include <QSettings>
5 #include <QtSql>
6 #include <QDir>
7
8 namespace qtrapids
9 {
10
11 class ServerSettings
12 {
13
14 public:
15     ServerSettings(QSettings *settings)
16             : settings_(settings)
17     { }
18
19     ~ServerSettings()
20     {
21
22     }
23
24     QString getDbEngine() const
25     {
26         return getParamAndStore("db_engine", getDefaultDbEngine()).toString();
27     }
28
29     QString getDbName() const
30     {
31         QString default_db_path(QDir::home().filePath(appName() + ".sqlite"));
32         return getParamAndStore("db", default_db_path).toString();
33     }
34
35     QString getTorrentsDir() const
36     {
37         QString default_dir(QDir::home().filePath(QString(".") + appName()));
38         return getParamAndStore("db", default_dir).toString();
39
40     }
41
42 private:
43
44     ServerSettings(ServerSettings const&);
45     ServerSettings& operator= (ServerSettings const&);
46
47     static inline QString appName()
48     {
49         return QCoreApplication::applicationName();
50     }
51
52     static QString getDefaultDbEngine()
53     {
54         // for (QStringListIterator p = QSqlDatabase::drivers(); p.hasNext();) {
55         //     return p.next();
56         // }
57         return "QSQLITE";
58     }
59
60     QVariant getParamAndStore(QString const& name, QVariant default_value) const
61     {
62         QVariant v(settings_->value(name));
63         if (!v.isNull())
64         {
65             return v;
66         }
67
68         settings_->setValue(name, default_value);
69         return default_value;
70     }
71
72     mutable QSettings *settings_;
73 };
74
75 class ServerDb
76 {
77
78 public:
79     ServerDb(ServerSettings *settings)
80             : db_(QSqlDatabase::addDatabase(settings->getDbEngine()))
81     {
82         QString db_name(settings->getDbName());
83         db_.setDatabaseName(db_name);
84
85         if (!db_.open())
86         {
87             qDebug() << "cant open db";
88             return;
89         }
90         qDebug() << "opened " << db_name;
91
92         QSqlQuery q;
93         if (!q.exec("create table torrents (hash varchar primary key, path varchar, savepath varchar);\n"))
94         {
95             qDebug() << "cant create table: " << q.lastError().text();
96         }
97     }
98
99     ~ServerDb()
100     {
101         db_.close();
102     }
103
104     void addTorrent(const QString &hash, const QString &path, const QString &save_path)
105     {
106         if (!db_.open())
107         {
108             qDebug() << "cant open db";
109         }
110         QSqlQuery query_add_;
111         query_add_.prepare("INSERT INTO torrents (hash, path, savepath) VALUES (?, ?, ?)");
112         query_add_.bindValue(0, hash);
113         query_add_.bindValue(1, path);
114         query_add_.bindValue(2, save_path);
115         if (!query_add_.exec())
116         {
117             qDebug() << "cant add torrent info into db: "
118             << query_add_.lastError().text();
119         }
120         db_.close();
121     }
122
123 private:
124
125     ServerDb(ServerDb const&);
126     ServerDb& operator= (ServerDb const&);
127
128     QSqlDatabase db_;
129 };
130
131 } // namespace qtrapids
132
133 #endif // _SERVERDB_HPP_