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 static QString getTorrentsSubDir() {
38 return QString(".") + appName();
41 QString getDownloadDir() const {
42 QString default_dir(QDir::home().absolutePath());
43 QString v = getParamAndStore("download/directory", default_dir).toString();
47 settings_.setValue("download/directory", default_dir);
52 ports_range_t getListenPorts() const {
54 ports_range_t default_ports(13131, 13132);
55 default_ports.first = getParamAndStore("net/listen_range_begin", default_ports.first).toUInt();
56 default_ports.second = getParamAndStore("net/listen_range_end", default_ports.second).toUInt();
61 @todo deztructor: there is no check for option type yet
63 void setOptions(ParamsMapConst_t &options) {
64 for (ParamsMapConstIterator_t p = options.constBegin(); p != options.constEnd(); ++p) {
65 settings_.setValue(p.key(), p.value());
69 ParamsMap_t getOptions() const {
71 QStringList keys = settings_.allKeys();
72 for (QStringList::const_iterator p = keys.begin(); p != keys.end(); ++p) {
73 options[*p] = settings_.value(*p).toString();
80 ServerSettings(ServerSettings const&);
81 ServerSettings& operator= (ServerSettings const&);
83 static inline QString appName() {
84 return QCoreApplication::applicationName();
87 static QString getDefaultDbEngine() {
88 // for (QStringListIterator p = QSqlDatabase::drivers(); p.hasNext();) {
94 QVariant getParamAndStore(QString const& name, QVariant default_value) const {
95 return GetSettingsStoreDefault(settings_, name, default_value);
98 mutable QSettings &settings_;
106 DbAccessor(QSqlDatabase &db)
109 qDebug() << "cant open db";
127 ServerDb(ServerSettings *settings)
128 : db_(QSqlDatabase::addDatabase(settings->getDbEngine())) {
129 QString db_name(settings->getDbName());
130 db_.setDatabaseName(db_name);
132 qDebug() << "opening db " << db_name;
134 qDebug() << "cant open db";
137 qDebug() << "opened " << db_name;
140 if (!q.exec("create table torrents (hash varchar primary key, path varchar, savepath varchar);\n")) {
141 qDebug() << "cant create table: " << q.lastError().text();
149 void addTorrent(const QString &hash, const QString &path, const QString &save_path) {
151 QSqlQuery query_add_;
152 query_add_.prepare("INSERT INTO torrents (hash, path, savepath) VALUES (?, ?, ?)");
153 query_add_.bindValue(0, hash);
154 query_add_.bindValue(1, path);
155 query_add_.bindValue(2, save_path);
156 if (!query_add_.exec()) {
157 qDebug() << "cant add torrent info into db: "
158 << query_add_.lastError().text();
162 void removeTorrent(const QString &hash) {
164 QSqlQuery query(QString("DELETE FROM torrents WHERE hash='") + hash + "'");
166 qDebug() << "cant delete torrent info from db"
167 << query.lastError().text();
173 ServerDb(ServerDb const&);
174 ServerDb& operator= (ServerDb const&);
179 class TorrentsStorage
183 TorrentsStorage(ServerDb &db)
184 : torrents_("SELECT hash, path, savepath from torrents") { }
187 bool nextTorrent(TorrentDownloadInfo &info) {
188 if (!torrents_.next()) {
191 info.hash = torrents_.value(0).toString();
192 info.path = torrents_.value(1).toString();
193 info.download_path = torrents_.value(2).toString();
202 } // namespace qtrapids
204 #endif // _SERVERDB_HPP_