1 // For license of this file, see <project-root-folder>/LICENSE.md. 2 3 #ifndef DEFINITIONS_H 4 #define DEFINITIONS_H 5 6 #include <QDebug> 7 #include <QtGlobal> 8 9 #define SERVICE_CODE_STD_RSS "std-rss" 10 #define SERVICE_CODE_TT_RSS "tt-rss" 11 #define SERVICE_CODE_OWNCLOUD "owncloud" 12 #define SERVICE_CODE_GREADER "greader" 13 #define SERVICE_CODE_FEEDLY "feedly" 14 #define SERVICE_CODE_INOREADER "inoreader" 15 #define SERVICE_CODE_GMAIL "gmail" 16 17 #define ADBLOCK_SERVER_PORT 48484 18 #define ADBLOCK_HOWTO "https://github.com/martinrotter/rssguard/blob/master/resources/docs/Documentation.md#adblock" 19 #define ADBLOCK_ICON_ACTIVE "adblock" 20 #define ADBLOCK_ICON_DISABLED "adblock-disabled" 21 22 #define OAUTH_DECRYPTION_KEY 11451167756100761335ul 23 #define OAUTH_REDIRECT_URI "http://localhost" 24 25 #define ENCLOSURES_OUTER_SEPARATOR '#' 26 #define ECNLOSURES_INNER_SEPARATOR '&' 27 28 #define URI_SCHEME_FEED_SHORT "feed:" 29 #define URI_SCHEME_FEED "feed://" 30 31 #define URI_SCHEME_HTTP_SHORT "http:" 32 #define URI_SCHEME_HTTP "http://" 33 34 #define URI_SCHEME_HTTPS_SHORT "https:" 35 #define URI_SCHEME_HTTPS "https://" 36 37 #define DEFAULT_LOCALE "en" 38 39 #define NO_PARENT_CATEGORY -1 40 #define ID_RECYCLE_BIN -2 41 #define ID_IMPORTANT -3 42 #define ID_LABELS -4 43 #define ID_UNREAD -5 44 45 #define MSG_SCORE_MAX 100.0 46 #define MSG_SCORE_MIN 0.0 47 48 #define SOUNDS_BUILTIN_DIRECTORY ":/sounds" 49 #define ARGUMENTS_LIST_SEPARATOR "\n" 50 #define IS_IN_ARRAY(offset, array) ((offset >= 0) && (offset < array.count())) 51 #define DEFAULT_SQL_MESSAGES_FILTER "0 > 1" 52 #define MAX_MULTICOLUMN_SORT_STATES 3 53 #define RELEASES_LIST "https://api.github.com/repos/martinrotter/rssguard/releases" 54 #define MSG_FILTERING_HELP "https://github.com/martinrotter/rssguard/blob/master/resources/docs/Message-filters.md#message-filtering" 55 #define URL_REGEXP "^(http|https|feed|ftp):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?$" 56 #define SCRIPT_SOURCE_TYPE_REGEXP "^.+#.*$" 57 #define TEXT_TITLE_LIMIT 30 58 #define LOWER_TITLE_ROLE 64 59 #define RESELECT_MESSAGE_THRESSHOLD 500 60 #define ICON_SIZE_SETTINGS 16 61 #define TRAY_ICON_BUBBLE_TIMEOUT 20000 62 #define CLOSE_LOCK_TIMEOUT 500 63 #define DOWNLOAD_TIMEOUT 30000 64 #define MESSAGES_VIEW_DEFAULT_COL 100 65 #define MESSAGES_VIEW_MINIMUM_COL 16 66 #define FEEDS_VIEW_COLUMN_COUNT 2 67 #define DEFAULT_DAYS_TO_DELETE_MSG 14 68 #define ELLIPSIS_LENGTH 3 69 #define DEFAULT_AUTO_UPDATE_INTERVAL 15 70 #define AUTO_UPDATE_INTERVAL 60000 71 #define STARTUP_UPDATE_DELAY 15.0 // In seconds. 72 #define TIMEZONE_OFFSET_LIMIT 6 73 #define CHANGE_EVENT_DELAY 250 74 #define FLAG_ICON_SUBFOLDER "flags" 75 #define SEARCH_BOX_ACTION_NAME "search" 76 #define HIGHLIGHTER_ACTION_NAME "highlighter" 77 #define SPACER_ACTION_NAME "spacer" 78 #define SEPARATOR_ACTION_NAME "separator" 79 #define FILTER_WIDTH 125 80 #define FILTER_RIGHT_MARGIN 5 81 #define FEEDS_VIEW_INDENTATION 10 82 #define MIME_TYPE_ITEM_POINTER "rssguard/itempointer" 83 #define DOWNLOADER_ICON_SIZE 48 84 #define ENCRYPTION_FILE_NAME "key.private" 85 #define RELOAD_MODEL_BORDER_NUM 10 86 #define COOKIE_URL_IDENTIFIER ":COOKIE:" 87 #define DEFAULT_NOTIFICATION_VOLUME 50 88 89 #define GOOGLE_SEARCH_URL "https://www.google.com/search?q=%1&ie=utf-8&oe=utf-8" 90 #define GOOGLE_SUGGEST_URL "http://suggestqueries.google.com/complete/search?output=toolbar&hl=en&q=%1" 91 92 #define EXECUTION_LINE_SEPARATOR "#" 93 #define EXTERNAL_TOOL_SEPARATOR "|||" 94 95 #define USER_DATA_PLACEHOLDER "%data%" 96 #define SKIN_STYLE_PLACEHOLDER "%style%" 97 98 #define CLI_VER_SHORT "v" 99 #define CLI_VER_LONG "version" 100 #define CLI_HELP_SHORT "h" 101 #define CLI_HELP_LONG "help" 102 #define CLI_LOG_SHORT "l" 103 #define CLI_LOG_LONG "log" 104 #define CLI_DAT_SHORT "d" 105 #define CLI_DAT_LONG "data" 106 #define CLI_SIN_SHORT "s" 107 #define CLI_SIN_LONG "no-single-instance" 108 #define CLI_NDEBUG_SHORT "n" 109 #define CLI_NDEBUG_LONG "no-debug-output" 110 #define CLI_QUIT_INSTANCE "q" 111 #define CLI_IS_RUNNING "a" 112 113 #define HTTP_HEADERS_ACCEPT "Accept" 114 #define HTTP_HEADERS_CONTENT_TYPE "Content-Type" 115 #define HTTP_HEADERS_CONTENT_LENGTH "Content-Length" 116 #define HTTP_HEADERS_AUTHORIZATION "Authorization" 117 #define HTTP_HEADERS_USER_AGENT "User-Agent" 118 #define HTTP_HEADERS_COOKIE "Cookie" 119 120 #define LOGSEC_NETWORK "network: " 121 #define LOGSEC_ADBLOCK "adblock: " 122 #define LOGSEC_FEEDMODEL "feed-model: " 123 #define LOGSEC_FEEDDOWNLOADER "feed-downloader: " 124 #define LOGSEC_MESSAGEMODEL "message-model: " 125 #define LOGSEC_JS "javascript: " 126 #define LOGSEC_GUI "gui: " 127 #define LOGSEC_CORE "core: " 128 #define LOGSEC_DB "database: " 129 #define LOGSEC_NEXTCLOUD "nextcloud: " 130 #define LOGSEC_GREADER "greader: " 131 #define LOGSEC_FEEDLY "feedly: " 132 #define LOGSEC_TTRSS "tt-rss: " 133 #define LOGSEC_GMAIL "gmail: " 134 #define LOGSEC_OAUTH "oauth: " 135 136 #define MAX_ZOOM_FACTOR 5.0f 137 #define MIN_ZOOM_FACTOR 0.25f 138 #define DEFAULT_ZOOM_FACTOR 1.0f 139 #define ZOOM_FACTOR_STEP 0.1f 140 141 #define INTERNAL_URL_MESSAGE "http://rssguard.message" 142 #define INTERNAL_URL_BLANK "http://rssguard.blank" 143 #define INTERNAL_URL_ADBLOCKED "http://rssguard.adblocked" 144 #define INTERNAL_URL_MESSAGE_HOST "rssguard.message" 145 #define INTERNAL_URL_PASSATTACHMENT "http://rssguard.passattachment" 146 147 #define FEED_REGEX_MATCHER "<link[^>]+type=\"application\\/(?:atom\\+xml|rss\\+xml|feed\\+json|json)\"[^>]*>" 148 #define FEED_HREF_REGEX_MATCHER "href=\"([^\"]+)\"" 149 150 #define PLACEHOLDER_UNREAD_COUNTS "%unread" 151 #define PLACEHOLDER_ALL_COUNTS "%all" 152 153 #define BACKUP_NAME_SETTINGS "config" 154 #define BACKUP_SUFFIX_SETTINGS ".ini.backup" 155 #define BACKUP_NAME_DATABASE "database" 156 #define BACKUP_SUFFIX_DATABASE ".db.backup" 157 158 #define APP_DB_MYSQL_DRIVER "QMYSQL" 159 #define APP_DB_MYSQL_INIT "db_init_mysql.sql" 160 #define APP_DB_MYSQL_TEST "MySQLTest" 161 #define APP_DB_MYSQL_PORT 3306 162 163 #define APP_DB_SQLITE_DRIVER "QSQLITE" 164 #define APP_DB_SQLITE_INIT "db_init_sqlite.sql" 165 #define APP_DB_SQLITE_PATH "database" 166 #define APP_DB_SQLITE_FILE "database.db" 167 168 // Keep this in sync with schema versions declared in SQL initialization code. 169 #define APP_DB_SCHEMA_VERSION "1" 170 #define APP_DB_UPDATE_FILE_PATTERN "db_update_%1_%2_%3.sql" 171 #define APP_DB_COMMENT_SPLIT "-- !\n" 172 #define APP_DB_INCLUDE_PLACEHOLDER "!!" 173 #define APP_DB_NAME_PLACEHOLDER "##" 174 #define APP_DB_AUTO_INC_PRIM_KEY_PLACEHOLDER "$$" 175 #define APP_DB_BLOB_PLACEHOLDER "°°" 176 177 #define APP_CFG_PATH "config" 178 #define APP_CFG_FILE "config.ini" 179 180 #define APP_SKIN_USER_FOLDER "skins" 181 #define APP_SKIN_DEFAULT "vergilius" 182 #define APP_SKIN_METADATA_FILE "metadata.xml" 183 #define APP_STYLE_DEFAULT "Fusion" 184 185 #if defined(Q_OS_UNIX) 186 #define APP_THEME_DEFAULT "" 187 #else 188 #define APP_THEME_DEFAULT "Numix" 189 #endif 190 191 #define APP_LOCAL_THEME_FOLDER "icons" 192 #define APP_NO_THEME "" 193 194 // Indexes of columns as they are DEFINED IN THE TABLE for MESSAGES. 195 #define MSG_DB_ID_INDEX 0 196 #define MSG_DB_READ_INDEX 1 197 #define MSG_DB_IMPORTANT_INDEX 2 198 #define MSG_DB_DELETED_INDEX 3 199 #define MSG_DB_PDELETED_INDEX 4 200 #define MSG_DB_FEED_CUSTOM_ID_INDEX 5 201 #define MSG_DB_TITLE_INDEX 6 202 #define MSG_DB_URL_INDEX 7 203 #define MSG_DB_AUTHOR_INDEX 8 204 #define MSG_DB_DCREATED_INDEX 9 205 #define MSG_DB_CONTENTS_INDEX 10 206 #define MSG_DB_ENCLOSURES_INDEX 11 207 #define MSG_DB_SCORE_INDEX 12 208 #define MSG_DB_ACCOUNT_ID_INDEX 13 209 #define MSG_DB_CUSTOM_ID_INDEX 14 210 #define MSG_DB_CUSTOM_HASH_INDEX 15 211 #define MSG_DB_FEED_TITLE_INDEX 16 212 #define MSG_DB_HAS_ENCLOSURES 17 213 214 // Indexes of columns as they are DEFINED IN THE TABLE for CATEGORIES. 215 #define CAT_DB_ID_INDEX 0 216 #define CAT_DB_PARENT_ID_INDEX 1 217 #define CAT_DB_TITLE_INDEX 2 218 #define CAT_DB_DESCRIPTION_INDEX 3 219 #define CAT_DB_DCREATED_INDEX 4 220 #define CAT_DB_ICON_INDEX 5 221 #define CAT_DB_ACCOUNT_ID_INDEX 6 222 #define CAT_DB_CUSTOM_ID_INDEX 7 223 224 // Indexes of columns as they are DEFINED IN THE TABLE for FEEDS. 225 #define FDS_DB_ID_INDEX 0 226 #define FDS_DB_TITLE_INDEX 1 227 #define FDS_DB_DESCRIPTION_INDEX 2 228 #define FDS_DB_DCREATED_INDEX 3 229 #define FDS_DB_ICON_INDEX 4 230 #define FDS_DB_CATEGORY_INDEX 5 231 #define FDS_DB_SOURCE_INDEX 6 232 #define FDS_DB_UPDATE_TYPE_INDEX 7 233 #define FDS_DB_UPDATE_INTERVAL_INDEX 8 234 #define FDS_DB_ACCOUNT_ID_INDEX 9 235 #define FDS_DB_CUSTOM_ID_INDEX 10 236 #define FDS_DB_CUSTOM_DATA_INDEX 11 237 238 // Indexes of columns for feed models. 239 #define FDS_MODEL_TITLE_INDEX 0 240 #define FDS_MODEL_COUNTS_INDEX 1 241 242 // Indexes of columns for message filter manager models. 243 #define MFM_MODEL_ISREAD 0 244 #define MFM_MODEL_ISIMPORTANT 1 245 #define MFM_MODEL_ISDELETED 2 246 #define MFM_MODEL_TITLE 3 247 #define MFM_MODEL_URL 4 248 #define MFM_MODEL_AUTHOR 5 249 #define MFM_MODEL_CREATED 6 250 #define MFM_MODEL_SCORE 7 251 252 #if defined(Q_OS_UNIX) 253 #define OS_ID "Linux" 254 #elif defined(Q_OS_OS2) 255 #define OS_ID "OS/2" 256 #elif defined(Q_OS_OSX) 257 #define OS_ID "Mac OS X" 258 #elif defined(Q_OS_WIN) 259 #define OS_ID "Windows" 260 #elif defined(Q_OS_ANDROID) 261 #define OS_ID "Android" 262 #else 263 #define OS_ID "" 264 #endif 265 266 // Paths. 267 #define APP_THEME_PATH QSL(":/graphics") 268 #define APP_SQL_PATH QSL(":/sql") 269 #define APP_INFO_PATH QSL(":/text") 270 271 #define APP_ICON_PATH QSL(":/graphics/rssguard.png") 272 #define APP_ICON_PLAIN_PATH QSL(":/graphics/rssguard_plain.png") 273 274 #define APP_ICON_MONO_PATH QSL(":/graphics/rssguard_mono.png") 275 #define APP_ICON_MONO_PLAIN_PATH QSL(":/graphics/rssguard_plain_mono.png") 276 277 #define APP_SKIN_PATH QSL(":/skins") 278 #define APP_INITIAL_FEEDS_PATH QSL(":/initial_feeds") 279 #define APP_LANG_PATH QSL(":/localization") 280 281 #if defined(Q_OS_UNIX) 282 #define APP_DESKTOP_SOURCE_ENTRY_FILE "com.github.rssguard.desktop.autostart" 283 #define APP_DESKTOP_ENTRY_FILE "com.github.rssguard.desktop" 284 285 #define APP_DESKTOP_ENTRY_PATH QSL(":/desktop") 286 #endif 287 288 // 289 // Source code specific enhancements. 290 // 291 #if QT_VERSION >= 0x050E00 // Qt >= 5.14.0 292 #define FROM_STD_LIST(x, y) (x(y.begin(), y.end())) 293 #define FROM_LIST_TO_SET(x, y) (x(y.begin(), y.end())) 294 #else 295 #define FROM_STD_LIST(x, y) (x::fromStdList(y)) 296 #define FROM_LIST_TO_SET(x, y) (x::fromList(y)) 297 #endif 298 299 #ifndef qDebugNN 300 #define qDebugNN qDebug().noquote().nospace() 301 #endif 302 303 #ifndef qWarningNN 304 #define qWarningNN qWarning().noquote().nospace() 305 #endif 306 307 #ifndef qCriticalNN 308 #define qCriticalNN qCritical().noquote().nospace() 309 #endif 310 311 #ifndef qInfoNN 312 #define qInfoNN qInfo().noquote().nospace() 313 #endif 314 315 #define NONQUOTE_W_SPACE_DOT(x) " " << (x) << "." 316 #define QUOTE_W_SPACE_DOT(x) " '" << (x) << "'." 317 #define QUOTE_W_SPACE_COMMA(x) " '" << (x) << "'," 318 #define QUOTE_W_SPACE(x) " '" << (x) << "' " 319 #define QUOTE_NO_SPACE(x) "'" << (x) << "'" 320 321 #ifndef QSL 322 323 // Thin macro wrapper for literal strings. 324 // They are much more memory efficient and faster. 325 // Use it for all literals except for two cases: 326 // a) Methods which take QLatin1String (use QLatin1String for literal argument too), 327 // b) Construction of empty literals "", use QString() instead of QStringLiteral(""). 328 #define QSL(x) QStringLiteral(x) 329 #endif 330 331 #ifndef QL1S 332 333 // Macro for latin strings. Latin strings are 334 // faster than QStrings created from literals. 335 #define QL1S(x) QLatin1String(x) 336 #endif 337 338 #ifndef QL1C 339 340 // Macro for latin chars. 341 #define QL1C(x) QLatin1Char(x) 342 #endif 343 344 #endif // DEFINITIONS_H 345