8 #include <qtrapids/settings.hpp>
17 ServerSettings(QSettings &settings)
18 : settings_(settings) { }
22 QString getDbEngine() const {
23 return getParamAndStore("db_engine", getDefaultDbEngine()).toString();
26 QString getDbName() const {
27 QString default_db_path(QDir::home().filePath(appName() + ".sqlite"));
28 return getParamAndStore("db", default_db_path).toString();
31 QString getTorrentsDir() const {
32 QString default_dir(QDir::home().filePath(getTorrentsSubDir()));
33 return getParamAndStore("torrents_dir", default_dir).toString();
37 QString getDownloadDir() const {
38 QString default_dir(QDir::home().absolutePath());
39 QString v = getParamAndStore("download/directory", default_dir).toString();
43 settings_.setValue("download/directory", default_dir);
48 static QString getTorrentsSubDir() {
49 return QString(".") + appName();
54 ServerSettings(ServerSettings const&);
55 ServerSettings& operator= (ServerSettings const&);
57 static inline QString appName() {
58 return QCoreApplication::applicationName();
61 static QString getDefaultDbEngine() {
62 // for (QStringListIterator p = QSqlDatabase::drivers(); p.hasNext();) {
68 QVariant getParamAndStore(QString const& name, QVariant default_value) const {
69 return GetSettingsStoreDefault(settings_, name, default_value);
72 mutable QSettings &settings_;
80 DbAccessor(QSqlDatabase &db)
83 qDebug() << "cant open db";
101 ServerDb(ServerSettings *settings)
102 : db_(QSqlDatabase::addDatabase(settings->getDbEngine())) {
103 QString db_name(settings->getDbName());
104 db_.setDatabaseName(db_name);
106 qDebug() << "opening db " << db_name;
108 qDebug() << "cant open db";
111 qDebug() << "opened " << db_name;
114 if (!q.exec("create table torrents (hash varchar primary key, path varchar, savepath varchar);\n")) {
115 qDebug() << "cant create table: " << q.lastError().text();
123 void addTorrent(const QString &hash, const QString &path, const QString &save_path) {
125 QSqlQuery query_add_;
126 query_add_.prepare("INSERT INTO torrents (hash, path, savepath) VALUES (?, ?, ?)");
127 query_add_.bindValue(0, hash);
128 query_add_.bindValue(1, path);
129 query_add_.bindValue(2, save_path);
130 if (!query_add_.exec()) {
131 qDebug() << "cant add torrent info into db: "
132 << query_add_.lastError().text();
136 void removeTorrent(const QString &hash) {
138 QSqlQuery query(QString("DELETE FROM torrents WHERE hash='") + hash + "'");
140 qDebug() << "cant delete torrent info from db"
141 << query.lastError().text();
147 ServerDb(ServerDb const&);
148 ServerDb& operator= (ServerDb const&);
153 class TorrentsStorage
157 TorrentsStorage(ServerDb &db)
158 : torrents_("SELECT hash, path, savepath from torrents") { }
161 bool nextTorrent(TorrentDownloadInfo &info) {
162 if (!torrents_.next()) {
165 info.hash = torrents_.value(0).toString();
166 info.path = torrents_.value(1).toString();
167 info.download_path = torrents_.value(2).toString();
176 } // namespace qtrapids
178 #endif // _SERVERDB_HPP_