X-Git-Url: http://git.maemo.org/git/?p=qtrapids;a=blobdiff_plain;f=src%2Fserver%2FServerDb.hpp;h=9bda67728adbc0029246061fcfb9fe23dd5f3054;hp=fdda0a03268313048f439e18feb16933a0c604fe;hb=b62e6b5309eb1954c6ea4e1522767a424d76f15d;hpb=d27c2db830de9a65d6a419479ee598cbf3697746 diff --git a/src/server/ServerDb.hpp b/src/server/ServerDb.hpp index fdda0a0..9bda677 100644 --- a/src/server/ServerDb.hpp +++ b/src/server/ServerDb.hpp @@ -5,6 +5,8 @@ #include #include +#include + namespace qtrapids { @@ -12,120 +14,163 @@ class ServerSettings { public: - ServerSettings(QSettings *settings) - : settings_(settings) - { } + ServerSettings(QSettings &settings) + : settings_(settings) { } + + ~ServerSettings() { } - ~ServerSettings() - { + QString getDbEngine() const { + return getParamAndStore("db_engine", getDefaultDbEngine()).toString(); + } - } + QString getDbName() const { + QString default_db_path(QDir::home().filePath(appName() + ".sqlite")); + return getParamAndStore("db", default_db_path).toString(); + } - QString getDbEngine() const - { - return getParamAndStore("db_engine", getDefaultDbEngine()).toString(); - } + QString getTorrentsDir() const { + QString default_dir(QDir::home().filePath(getTorrentsSubDir())); + return getParamAndStore("torrents_dir", default_dir).toString(); - QString getDbName() const - { - QString default_db_path(QDir::home().filePath(appName() + ".sqlite")); - return getParamAndStore("db", default_db_path).toString(); - } + } - QString getTorrentsDir() const - { - QString default_dir(QDir::home().filePath(QString(".") + appName())); - return getParamAndStore("db", default_dir).toString(); + QString getDownloadDir() const { + QString default_dir(QDir::home().absolutePath()); + QString v = getParamAndStore("download/directory", default_dir).toString(); + if (!v.isEmpty()) { + return v; + } else { + settings_.setValue("download/directory", default_dir); + return default_dir; + } + } - } + static QString getTorrentsSubDir() { + return QString(".") + appName(); + } private: - ServerSettings(ServerSettings const&); - ServerSettings& operator= (ServerSettings const&); - - static inline QString appName() - { - return QCoreApplication::applicationName(); - } - - static QString getDefaultDbEngine() - { - // for (QStringListIterator p = QSqlDatabase::drivers(); p.hasNext();) { - // return p.next(); - // } - return "QSQLITE"; - } - - QVariant getParamAndStore(QString const& name, QVariant default_value) const - { - QVariant v(settings_->value(name)); - if (!v.isNull()) - { - return v; - } - - settings_->setValue(name, default_value); - return default_value; - } - - mutable QSettings *settings_; + ServerSettings(ServerSettings const&); + ServerSettings& operator= (ServerSettings const&); + + static inline QString appName() { + return QCoreApplication::applicationName(); + } + + static QString getDefaultDbEngine() { + // for (QStringListIterator p = QSqlDatabase::drivers(); p.hasNext();) { + // return p.next(); + // } + return "QSQLITE"; + } + + QVariant getParamAndStore(QString const& name, QVariant default_value) const { + return GetSettingsStoreDefault(settings_, name, default_value); + } + + mutable QSettings &settings_; }; +namespace { + +class DbAccessor +{ +public: + DbAccessor(QSqlDatabase &db) + : db_(db) { + if (!db_.open()) { + qDebug() << "cant open db"; + } + } + + ~DbAccessor() { + db_.close(); + } + +private: + QSqlDatabase &db_; +}; + +} + class ServerDb { public: - ServerDb(ServerSettings *settings) - : db_(QSqlDatabase::addDatabase(settings->getDbEngine())) - { - QString db_name(settings->getDbName()); - db_.setDatabaseName(db_name); - - if (!db_.open()) - { - qDebug() << "cant open db"; - return; - } - qDebug() << "opened " << db_name; - - QSqlQuery q; - if (!q.exec("create table torrents (hash varchar primary key, path varchar, savepath varchar);\n")) - { - qDebug() << "cant create table: " << q.lastError().text(); - } - } - - ~ServerDb() - { - db_.close(); - } - - void addTorrent(const QString &hash, const QString &path, const QString &save_path) - { - if (!db_.open()) - { - qDebug() << "cant open db"; - } - QSqlQuery query_add_; - query_add_.prepare("INSERT INTO torrents (hash, path, savepath) VALUES (?, ?, ?)"); - query_add_.bindValue(0, hash); - query_add_.bindValue(1, path); - query_add_.bindValue(2, save_path); - if (!query_add_.exec()) - { - qDebug() << "cant add torrent info into db: " - << query_add_.lastError().text(); - } - db_.close(); - } + ServerDb(ServerSettings *settings) + : db_(QSqlDatabase::addDatabase(settings->getDbEngine())) { + QString db_name(settings->getDbName()); + db_.setDatabaseName(db_name); + + qDebug() << "opening db " << db_name; + if (!db_.open()) { + qDebug() << "cant open db"; + return; + } + qDebug() << "opened " << db_name; + + QSqlQuery q; + if (!q.exec("create table torrents (hash varchar primary key, path varchar, savepath varchar);\n")) { + qDebug() << "cant create table: " << q.lastError().text(); + } + } + + ~ServerDb() { + db_.close(); + } + + void addTorrent(const QString &hash, const QString &path, const QString &save_path) { + DbAccessor dba(db_); + QSqlQuery query_add_; + query_add_.prepare("INSERT INTO torrents (hash, path, savepath) VALUES (?, ?, ?)"); + query_add_.bindValue(0, hash); + query_add_.bindValue(1, path); + query_add_.bindValue(2, save_path); + if (!query_add_.exec()) { + qDebug() << "cant add torrent info into db: " + << query_add_.lastError().text(); + } + } + + void removeTorrent(const QString &hash) { + DbAccessor dba(db_); + QSqlQuery query(QString("DELETE FROM torrents WHERE hash='") + hash + "'"); + if (!query.exec()) { + qDebug() << "cant delete torrent info from db" + << query.lastError().text(); + } + } private: - ServerDb(ServerDb const&); - ServerDb& operator= (ServerDb const&); + ServerDb(ServerDb const&); + ServerDb& operator= (ServerDb const&); + + QSqlDatabase db_; +}; + +class TorrentsStorage +{ +public: + + TorrentsStorage(ServerDb &db) + : torrents_("SELECT hash, path, savepath from torrents") { } + - QSqlDatabase db_; + bool nextTorrent(TorrentDownloadInfo &info) { + if (!torrents_.next()) { + return false; + } + info.hash = torrents_.value(0).toString(); + info.path = torrents_.value(1).toString(); + info.download_path = torrents_.value(2).toString(); + return true; + } + + +private: + QSqlQuery torrents_; }; } // namespace qtrapids