#include <QtSql>
#include <QDir>
+#include <qtrapids/settings.hpp>
+
namespace qtrapids
{
{
public:
- ServerSettings(QSettings *settings)
+ ServerSettings(QSettings &settings)
: settings_(settings) { }
- ~ServerSettings() {
-
- }
+ ~ServerSettings() { }
QString getDbEngine() const {
return getParamAndStore("db_engine", getDefaultDbEngine()).toString();
}
QString getTorrentsDir() const {
- QString default_dir(QDir::home().filePath(QString(".") + appName()));
- return getParamAndStore("db", default_dir).toString();
+ QString default_dir(QDir::home().filePath(getTorrentsSubDir()));
+ return getParamAndStore("torrents_dir", 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&);
}
QVariant getParamAndStore(QString const& name, QVariant default_value) const {
- QVariant v(settings_->value(name));
- if (!v.isNull()) {
- return v;
+ 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";
}
+ }
- settings_->setValue(name, default_value);
- return default_value;
+ ~DbAccessor() {
+ db_.close();
}
- mutable QSettings *settings_;
+private:
+ QSqlDatabase &db_;
};
+}
+
class ServerDb
{
QString db_name(settings->getDbName());
db_.setDatabaseName(db_name);
+ qDebug() << "opening db " << db_name;
if (!db_.open()) {
qDebug() << "cant open db";
return;
}
void addTorrent(const QString &hash, const QString &path, const QString &save_path) {
- if (!db_.open()) {
- qDebug() << "cant open db";
- }
+ DbAccessor dba(db_);
QSqlQuery query_add_;
query_add_.prepare("INSERT INTO torrents (hash, path, savepath) VALUES (?, ?, ?)");
query_add_.bindValue(0, hash);
qDebug() << "cant add torrent info into db: "
<< query_add_.lastError().text();
}
- db_.close();
+ }
+
+ 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:
QSqlDatabase db_;
};
+class TorrentsStorage
+{
+public:
+
+ TorrentsStorage(ServerDb &db)
+ : torrents_("SELECT hash, path, savepath from torrents") { }
+
+
+ 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
#endif // _SERVERDB_HPP_