--- /dev/null
+#ifndef _SERVERDB_HPP_
+#define _SERVERDB_HPP_
+
+#include <QSettings>
+#include <QtSql>
+#include <QDir>
+
+namespace qtrapids
+{
+
+ class ServerSettings
+ {
+
+ public:
+ ServerSettings(QSettings *settings)
+ : settings_(settings)
+ { }
+
+ ~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 getTorrentsDir() const
+ {
+ QString default_dir(QDir::home().filePath(QString(".") + appName()));
+ return getParamAndStore("db", default_dir).toString();
+
+ }
+
+ 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_;
+ };
+
+ 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();
+ }
+
+ private:
+
+ ServerDb(ServerDb const&);
+ ServerDb& operator= (ServerDb const&);
+
+ QSqlDatabase db_;
+ };
+
+} // namespace qtrapids
+
+#endif // _SERVERDB_HPP_