9 #include <qtrapids/settings.hpp>
18 ServerSettings(QSettings &settings)
19 : settings_(settings) { }
23 QString getDbEngine() const {
24 return getParamAndStore("db_engine", getDefaultDbEngine()).toString();
27 QString getDbName() const {
28 QString default_db_path(QDir::home().filePath(appName() + ".sqlite"));
29 return getParamAndStore("db", default_db_path).toString();
32 QString getTorrentsDir() const {
33 QString default_dir(QDir::home().filePath(getTorrentsSubDir()));
34 return getParamAndStore("torrents_dir", default_dir).toString();
38 static QString getTorrentsSubDir() {
39 return QString(".") + appName();
42 QString getDownloadDir() const {
43 QString default_dir(QDir::home().absolutePath());
44 QString v = getParamAndStore("download/directory", default_dir).toString();
48 settings_.setValue("download/directory", default_dir);
53 ports_range_t getListenPorts() const {
55 ports_range_t default_ports(13131, 13132);
56 default_ports.first = getParamAndStore("net/listen_range_begin", default_ports.first).toUInt();
57 default_ports.second = getParamAndStore("net/listen_range_end", default_ports.second).toUInt();
62 @todo deztructor: there is no check for option type yet
64 void setOptions(ParamsMapConst_t &options) {
65 for (ParamsMapConstIterator_t p = options.constBegin(); p != options.constEnd(); ++p) {
66 settings_.setValue(p.key(), p.value());
70 ParamsMap_t getOptions() const {
72 QStringList keys = settings_.allKeys();
73 for (QStringList::const_iterator p = keys.begin(); p != keys.end(); ++p) {
74 options[*p] = settings_.value(*p).toString();
81 ServerSettings(ServerSettings const&);
82 ServerSettings& operator= (ServerSettings const&);
84 static inline QString appName() {
85 return QCoreApplication::applicationName();
88 static QString getDefaultDbEngine() {
89 // for (QStringListIterator p = QSqlDatabase::drivers(); p.hasNext();) {
95 QVariant getParamAndStore(QString const& name, QVariant default_value) const {
96 return GetSettingsStoreDefault(settings_, name, default_value);
99 mutable QSettings &settings_;
107 DbAccessor(QSqlDatabase &db)
110 qDebug() << "cant open db";
128 ServerDb(ServerSettings *settings)
129 : db_(QSqlDatabase::addDatabase(settings->getDbEngine())) {
130 QString db_name(settings->getDbName());
131 db_.setDatabaseName(db_name);
133 qDebug() << "opening db " << db_name;
135 qDebug() << "cant open db";
138 qDebug() << "opened " << db_name;
141 if (!q.exec("create table torrents (hash varchar primary key, path varchar, savepath varchar);\n")) {
142 qDebug() << "cant create table: " << q.lastError().text();
150 void addTorrent(const QString &hash, const QString &path, const QString &save_path) {
152 QSqlQuery query_add_;
153 query_add_.prepare("INSERT INTO torrents (hash, path, savepath) VALUES (?, ?, ?)");
154 query_add_.bindValue(0, hash);
155 query_add_.bindValue(1, path);
156 query_add_.bindValue(2, save_path);
157 if (!query_add_.exec()) {
158 qDebug() << "cant add torrent info into db: "
159 << query_add_.lastError().text();
163 void removeTorrent(const QString &hash) {
165 QSqlQuery query(QString("DELETE FROM torrents WHERE hash='") + hash + "'");
167 qDebug() << "cant delete torrent info from db"
168 << query.lastError().text();
174 ServerDb(ServerDb const&);
175 ServerDb& operator= (ServerDb const&);
180 class TorrentsStorage
184 TorrentsStorage(ServerDb &db)
185 : torrents_("SELECT hash, path, savepath from torrents") { }
188 bool nextTorrent(TorrentDownloadInfo &info) {
189 if (!torrents_.next()) {
192 info.hash = torrents_.value(0).toString();
193 info.path = torrents_.value(1).toString();
194 info.download_path = torrents_.value(2).toString();
203 } // namespace qtrapids
205 #endif // _SERVERDB_HPP_