1/* 2 * This file Copyright (C) Mnemosyne LLC 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 6 * as published by the Free Software Foundation. 7 * 8 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 9 * 10 * $Id: prefs.h 13448 2012-08-19 16:12:20Z jordan $ 11 */ 12 13#ifndef QTR_PREFS_H 14#define QTR_PREFS_H 15 16#include <QDateTime> 17#include <QObject> 18#include <QSet> 19#include <QString> 20#include <QVariant> 21 22#include "filters.h" 23 24extern "C" 25{ 26 struct tr_benc; 27} 28 29class Prefs: public QObject 30{ 31 Q_OBJECT; 32 33 public: 34 35 enum 36 { 37 /* client prefs */ 38 OPTIONS_PROMPT, 39 OPEN_DIALOG_FOLDER, 40 INHIBIT_HIBERNATION, 41 DIR_WATCH, 42 DIR_WATCH_ENABLED, 43 SHOW_TRAY_ICON, 44 SHOW_DESKTOP_NOTIFICATION, 45 ASKQUIT, 46 SORT_MODE, 47 SORT_REVERSED, 48 COMPACT_VIEW, 49 FILTERBAR, 50 STATUSBAR, 51 STATUSBAR_STATS, 52 SHOW_TRACKER_SCRAPES, 53 SHOW_BACKUP_TRACKERS, 54 TOOLBAR, 55 BLOCKLIST_DATE, 56 BLOCKLIST_UPDATES_ENABLED, 57 MAIN_WINDOW_LAYOUT_ORDER, 58 MAIN_WINDOW_HEIGHT, 59 MAIN_WINDOW_WIDTH, 60 MAIN_WINDOW_X, 61 MAIN_WINDOW_Y, 62 FILTER_MODE, 63 FILTER_TRACKERS, 64 FILTER_TEXT, 65 SESSION_IS_REMOTE, 66 SESSION_REMOTE_HOST, 67 SESSION_REMOTE_PORT, 68 SESSION_REMOTE_AUTH, 69 SESSION_REMOTE_USERNAME, 70 SESSION_REMOTE_PASSWORD, 71 USER_HAS_GIVEN_INFORMED_CONSENT, 72 73 /* core prefs */ 74 FIRST_CORE_PREF, 75 ALT_SPEED_LIMIT_UP = FIRST_CORE_PREF, 76 ALT_SPEED_LIMIT_DOWN, 77 ALT_SPEED_LIMIT_ENABLED, 78 ALT_SPEED_LIMIT_TIME_BEGIN, 79 ALT_SPEED_LIMIT_TIME_END, 80 ALT_SPEED_LIMIT_TIME_ENABLED, 81 ALT_SPEED_LIMIT_TIME_DAY, 82 BLOCKLIST_ENABLED, 83 BLOCKLIST_URL, 84 DSPEED, 85 DSPEED_ENABLED, 86 DOWNLOAD_DIR, 87 DOWNLOAD_QUEUE_ENABLED, 88 DOWNLOAD_QUEUE_SIZE, 89 ENCRYPTION, 90 IDLE_LIMIT, 91 IDLE_LIMIT_ENABLED, 92 INCOMPLETE_DIR, 93 INCOMPLETE_DIR_ENABLED, 94 MSGLEVEL, 95 PEER_LIMIT_GLOBAL, 96 PEER_LIMIT_TORRENT, 97 PEER_PORT, 98 PEER_PORT_RANDOM_ON_START, 99 PEER_PORT_RANDOM_LOW, 100 PEER_PORT_RANDOM_HIGH, 101 QUEUE_STALLED_MINUTES, 102 SCRIPT_TORRENT_DONE_ENABLED, 103 SCRIPT_TORRENT_DONE_FILENAME, 104 SOCKET_TOS, 105 START, 106 TRASH_ORIGINAL, 107 PEX_ENABLED, 108 DHT_ENABLED, 109 UTP_ENABLED, 110 LPD_ENABLED, 111 PORT_FORWARDING, 112 PREALLOCATION, 113 RATIO, 114 RATIO_ENABLED, 115 RENAME_PARTIAL_FILES, 116 RPC_AUTH_REQUIRED, 117 RPC_ENABLED, 118 RPC_PASSWORD, 119 RPC_PORT, 120 RPC_USERNAME, 121 RPC_WHITELIST_ENABLED, 122 RPC_WHITELIST, 123 USPEED_ENABLED, 124 USPEED, 125 UPLOAD_SLOTS_PER_TORRENT, 126 LAST_CORE_PREF = UPLOAD_SLOTS_PER_TORRENT, 127 128 PREFS_COUNT 129 }; 130 131 private: 132 133 struct PrefItem { 134 int id; 135 const char * key; 136 int type; 137 }; 138 139 static PrefItem myItems[]; 140 141 private: 142 QSet<int> myTemporaryPrefs; 143 QString myConfigDir; 144 mutable QVariant myValues[PREFS_COUNT]; 145 void initDefaults( struct tr_benc* ); 146 147 public: 148 bool isCore( int key ) const { return FIRST_CORE_PREF<=key && key<=LAST_CORE_PREF; } 149 bool isClient( int key ) const { return !isCore( key ); } 150 const char * keyStr( int i ) const { return myItems[i].key; } 151 int type( int i ) const { return myItems[i].type; } 152 const QVariant& variant( int i ) const { return myValues[i]; } 153 154 Prefs( const char * configDir ); 155 ~Prefs( ); 156 157 int getInt( int key ) const; 158 bool getBool( int key) const; 159 QString getString( int key ) const; 160 double getDouble( int key) const; 161 QDateTime getDateTime( int key ) const; 162 163 template<typename T> T get( int key ) const { 164 return myValues[key].value<T>(); 165 } 166 167 void set( int key, char * value ) { set( key, QString::fromUtf8(value) ); } 168 void set( int key, const char * value ) { set( key, QString::fromUtf8(value) ); } 169 170 template<typename T> void set( int key, const T& value ) { 171 QVariant& v( myValues[key] ); 172 const QVariant tmp = QVariant::fromValue(value); 173 if( v.isNull() || (v!=tmp) ) { 174 v = tmp; 175 emit changed( key ); 176 } 177 } 178 179 void toggleBool( int key ); 180 181 signals: 182 void changed( int key ); 183}; 184 185#endif 186