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\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/~\\+#])?$"
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