diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index f978777d0..40446f40d 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -26,7 +26,7 @@
https://github.com/sponsors/martinrotter
-
+
none
diff --git a/resources/scripts/github-actions/build-windows.ps1 b/resources/scripts/github-actions/build-windows.ps1
index 81c9afa87..af9229020 100755
--- a/resources/scripts/github-actions/build-windows.ps1
+++ b/resources/scripts/github-actions/build-windows.ps1
@@ -80,7 +80,7 @@ cd "$old_pwd"
# Build application.
mkdir "rssguard-build"
cd "rssguard-build"
-& "$cmake_path" ".." -G Ninja -DCMAKE_BUILD_TYPE="Release" -DBUILD_WITH_QT6="$with_qt6" -DREVISION_FROM_GIT=ON -DUSE_WEBENGINE="$webengine" -DFEEDLY_CLIENT_ID="$env:FEEDLY_CLIENT_ID" -DFEEDLY_CLIENT_SECRET="$env:FEEDLY_CLIENT_SECRET" -DGMAIL_CLIENT_ID="$env:GMAIL_CLIENT_ID" -DGMAIL_CLIENT_SECRET="$env:GMAIL_CLIENT_SECRET" -DINOREADER_CLIENT_ID="$env:INOREADER_CLIENT_ID" -DINOREADER_CLIENT_SECRET="$env:INOREADER_CLIENT_SECRET"
+& "$cmake_path" ".." -G Ninja -DCMAKE_BUILD_TYPE="RelWithDebInfo" -DBUILD_WITH_QT6="$with_qt6" -DREVISION_FROM_GIT=ON -DUSE_WEBENGINE="$webengine" -DFEEDLY_CLIENT_ID="$env:FEEDLY_CLIENT_ID" -DFEEDLY_CLIENT_SECRET="$env:FEEDLY_CLIENT_SECRET" -DGMAIL_CLIENT_ID="$env:GMAIL_CLIENT_ID" -DGMAIL_CLIENT_SECRET="$env:GMAIL_CLIENT_SECRET" -DINOREADER_CLIENT_ID="$env:INOREADER_CLIENT_ID" -DINOREADER_CLIENT_SECRET="$env:INOREADER_CLIENT_SECRET"
& "$cmake_path" --build .
& "$cmake_path" --install . --prefix app
diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h
index 0593142cc..fe00d12a8 100644
--- a/src/librssguard/definitions/definitions.h
+++ b/src/librssguard/definitions/definitions.h
@@ -6,306 +6,308 @@
#include
#include
-#define SERVICE_CODE_STD_RSS "std-rss"
-#define SERVICE_CODE_TT_RSS "tt-rss"
-#define SERVICE_CODE_OWNCLOUD "owncloud"
-#define SERVICE_CODE_GREADER "greader"
-#define SERVICE_CODE_FEEDLY "feedly"
-#define SERVICE_CODE_INOREADER "inoreader"
-#define SERVICE_CODE_GMAIL "gmail"
-#define SERVICE_CODE_REDDIT "reddit"
-#define SERVICE_CODE_NEWSBLUR "newsblur"
+#define SERVICE_CODE_STD_RSS "std-rss"
+#define SERVICE_CODE_TT_RSS "tt-rss"
+#define SERVICE_CODE_OWNCLOUD "owncloud"
+#define SERVICE_CODE_GREADER "greader"
+#define SERVICE_CODE_FEEDLY "feedly"
+#define SERVICE_CODE_INOREADER "inoreader"
+#define SERVICE_CODE_GMAIL "gmail"
+#define SERVICE_CODE_REDDIT "reddit"
+#define SERVICE_CODE_NEWSBLUR "newsblur"
-#define ADBLOCK_SERVER_PORT 48484
-#define ADBLOCK_HOWTO "https://github.com/martinrotter/rssguard/blob/master/resources/docs/Documentation.md#adbl"
-#define ADBLOCK_ICON_ACTIVE "adblock"
-#define ADBLOCK_ICON_DISABLED "adblock-disabled"
+#define ADBLOCK_SERVER_PORT 48484
+#define ADBLOCK_HOWTO "https://github.com/martinrotter/rssguard/blob/master/resources/docs/Documentation.md#adbl"
+#define ADBLOCK_ICON_ACTIVE "adblock"
+#define ADBLOCK_ICON_DISABLED "adblock-disabled"
-#define OAUTH_DECRYPTION_KEY 11451167756100761335ul
-#define OAUTH_REDIRECT_URI "http://localhost"
+#define OAUTH_DECRYPTION_KEY 11451167756100761335ul
+#define OAUTH_REDIRECT_URI "http://localhost"
-#define ENCLOSURES_OUTER_SEPARATOR '#'
-#define ECNLOSURES_INNER_SEPARATOR '&'
+#define ENCLOSURES_OUTER_SEPARATOR '#'
+#define ECNLOSURES_INNER_SEPARATOR '&'
-#define URI_SCHEME_FEED_SHORT "feed:"
-#define URI_SCHEME_FEED "feed://"
+#define URI_SCHEME_FEED_SHORT "feed:"
+#define URI_SCHEME_FEED "feed://"
-#define URI_SCHEME_HTTP_SHORT "http:"
-#define URI_SCHEME_HTTP "http://"
+#define URI_SCHEME_HTTP_SHORT "http:"
+#define URI_SCHEME_HTTP "http://"
-#define URI_SCHEME_HTTPS_SHORT "https:"
-#define URI_SCHEME_HTTPS "https://"
+#define URI_SCHEME_HTTPS_SHORT "https:"
+#define URI_SCHEME_HTTPS "https://"
-#define DEFAULT_LOCALE "en_US"
+#define DEFAULT_LOCALE "en_US"
-#define NO_PARENT_CATEGORY -1
-#define ID_RECYCLE_BIN -2
-#define ID_IMPORTANT -3
-#define ID_LABELS -4
-#define ID_UNREAD -5
+#define NO_PARENT_CATEGORY -1
+#define ID_RECYCLE_BIN -2
+#define ID_IMPORTANT -3
+#define ID_LABELS -4
+#define ID_UNREAD -5
-#define MSG_SCORE_MAX 100.0
-#define MSG_SCORE_MIN 0.0
+#define MSG_SCORE_MAX 100.0
+#define MSG_SCORE_MIN 0.0
-#define LOWER_TITLE_ROLE 64
-#define HIGHLIGHTED_FOREGROUND_TITLE_ROLE 128
+#define LOWER_TITLE_ROLE 64
+#define HIGHLIGHTED_FOREGROUND_TITLE_ROLE 128
-#define SOUNDS_BUILTIN_DIRECTORY ":/sounds"
-#define ARGUMENTS_LIST_SEPARATOR "\n"
-#define IS_IN_ARRAY(offset, \
- array) ((offset >= 0) && (offset < array.count()))
-#define DEFAULT_SQL_MESSAGES_FILTER "0 > 1"
-#define MAX_MULTICOLUMN_SORT_STATES 3
-#define RELEASES_LIST "https://api.github.com/repos/martinrotter/rssguard/releases"
-#define MSG_FILTERING_HELP "https://github.com/martinrotter/rssguard/blob/master/resources/docs/Documentation.md#fltr"
-#define URL_REGEXP "^(http|https|feed|ftp):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/~\\+#])?$"
-#define SCRIPT_SOURCE_TYPE_REGEXP "^.+#.*$"
-#define TEXT_TITLE_LIMIT 30
-#define TEXT_TOOLTIP_LIMIT 50
-#define RESELECT_MESSAGE_THRESSHOLD 500
-#define ICON_SIZE_SETTINGS 16
-#define TRAY_ICON_BUBBLE_TIMEOUT 20000
-#define CLOSE_LOCK_TIMEOUT 500
-#define DOWNLOAD_TIMEOUT 30000
-#define MESSAGES_VIEW_DEFAULT_COL 100
-#define MESSAGES_VIEW_MINIMUM_COL 16
-#define FEEDS_VIEW_COLUMN_COUNT 2
-#define DEFAULT_DAYS_TO_DELETE_MSG 14
-#define ELLIPSIS_LENGTH 3
-#define DEFAULT_AUTO_UPDATE_INTERVAL 15
-#define AUTO_UPDATE_INTERVAL 60000
-#define STARTUP_UPDATE_DELAY 15.0 // In seconds.
-#define TIMEZONE_OFFSET_LIMIT 6
-#define CHANGE_EVENT_DELAY 250
-#define FLAG_ICON_SUBFOLDER "flags"
-#define SEARCH_BOX_ACTION_NAME "search"
-#define HIGHLIGHTER_ACTION_NAME "highlighter"
-#define FILTER_ACTION_NAME "filter"
-#define SPACER_ACTION_NAME "spacer"
-#define SEPARATOR_ACTION_NAME "separator"
-#define FILTER_WIDTH 125
-#define FILTER_RIGHT_MARGIN 5
-#define FEEDS_VIEW_INDENTATION 10
-#define MIME_TYPE_ITEM_POINTER "rssguard/itempointer"
-#define DOWNLOADER_ICON_SIZE 48
-#define ENCRYPTION_FILE_NAME "key.private"
-#define RELOAD_MODEL_BORDER_NUM 10
-#define COOKIE_URL_IDENTIFIER ":COOKIE:"
-#define DEFAULT_NOTIFICATION_VOLUME 50
+#define SOUNDS_BUILTIN_DIRECTORY ":/sounds"
+#define ARGUMENTS_LIST_SEPARATOR "\n"
+#define IS_IN_ARRAY(offset, array) ((offset >= 0) && (offset < array.count()))
+#define DEFAULT_SQL_MESSAGES_FILTER "0 > 1"
+#define MAX_MULTICOLUMN_SORT_STATES 3
+#define RELEASES_LIST "https://api.github.com/repos/martinrotter/rssguard/releases"
+#define MSG_FILTERING_HELP "https://github.com/martinrotter/rssguard/blob/master/resources/docs/Documentation.md#fltr"
+#define URL_REGEXP \
+ "^(http|https|feed|ftp):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&:/~\\+#]*[\\w\\-\\@?^=%&/" \
+ "~\\+#])?$"
+#define SCRIPT_SOURCE_TYPE_REGEXP "^.+#.*$"
+#define TEXT_TITLE_LIMIT 30
+#define TEXT_TOOLTIP_LIMIT 50
+#define RESELECT_MESSAGE_THRESSHOLD 500
+#define ICON_SIZE_SETTINGS 16
+#define TRAY_ICON_BUBBLE_TIMEOUT 20000
+#define CLOSE_LOCK_TIMEOUT 500
+#define DOWNLOAD_TIMEOUT 30000
+#define MESSAGES_VIEW_DEFAULT_COL 100
+#define MESSAGES_VIEW_MINIMUM_COL 16
+#define FEEDS_VIEW_COLUMN_COUNT 2
+#define DEFAULT_DAYS_TO_DELETE_MSG 14
+#define ELLIPSIS_LENGTH 3
+#define DEFAULT_AUTO_UPDATE_INTERVAL 15
+#define AUTO_UPDATE_INTERVAL 60000
+#define STARTUP_UPDATE_DELAY 15.0 // In seconds.
+#define TIMEZONE_OFFSET_LIMIT 6
+#define CHANGE_EVENT_DELAY 250
+#define FLAG_ICON_SUBFOLDER "flags"
+#define SEARCH_BOX_ACTION_NAME "search"
+#define HIGHLIGHTER_ACTION_NAME "highlighter"
+#define FILTER_ACTION_NAME "filter"
+#define SPACER_ACTION_NAME "spacer"
+#define SEPARATOR_ACTION_NAME "separator"
+#define FILTER_WIDTH 125
+#define FILTER_RIGHT_MARGIN 5
+#define FEEDS_VIEW_INDENTATION 10
+#define MIME_TYPE_ITEM_POINTER "rssguard/itempointer"
+#define DOWNLOADER_ICON_SIZE 48
+#define ENCRYPTION_FILE_NAME "key.private"
+#define RELOAD_MODEL_BORDER_NUM 10
+#define COOKIE_URL_IDENTIFIER ":COOKIE:"
+#define DEFAULT_NOTIFICATION_VOLUME 50
-#define GOOGLE_SEARCH_URL "https://www.google.com/search?q=%1&ie=utf-8&oe=utf-8"
-#define GOOGLE_SUGGEST_URL "http://suggestqueries.google.com/complete/search?output=toolbar&hl=en&q=%1"
+#define GOOGLE_SEARCH_URL "https://www.google.com/search?q=%1&ie=utf-8&oe=utf-8"
+#define GOOGLE_SUGGEST_URL "http://suggestqueries.google.com/complete/search?output=toolbar&hl=en&q=%1"
-#define EXECUTION_LINE_SEPARATOR "#"
-#define EXTERNAL_TOOL_SEPARATOR "|||"
+#define EXTERNAL_TOOL_SEPARATOR "|||"
-#define USER_DATA_PLACEHOLDER "%data%"
+#define USER_DATA_PLACEHOLDER "%data%"
#define SKIN_STYLE_PLACEHOLDER "%style%"
-#define CLI_VER_SHORT "v"
-#define CLI_VER_LONG "version"
+#define CLI_VER_SHORT "v"
+#define CLI_VER_LONG "version"
-#define CLI_HELP_SHORT "h"
-#define CLI_HELP_LONG "help"
+#define CLI_HELP_SHORT "h"
+#define CLI_HELP_LONG "help"
-#define CLI_LOG_SHORT "l"
-#define CLI_LOG_LONG "log"
+#define CLI_LOG_SHORT "l"
+#define CLI_LOG_LONG "log"
-#define CLI_DAT_SHORT "d"
-#define CLI_DAT_LONG "data"
+#define CLI_DAT_SHORT "d"
+#define CLI_DAT_LONG "data"
-#define CLI_SIN_SHORT "s"
-#define CLI_SIN_LONG "no-single-instance"
+#define CLI_SIN_SHORT "s"
+#define CLI_SIN_LONG "no-single-instance"
-#define CLI_NSTDOUTERR_SHORT "n"
-#define CLI_NSTDOUTERR_LONG "no-standard-output"
+#define CLI_NSTDOUTERR_SHORT "n"
+#define CLI_NSTDOUTERR_LONG "no-standard-output"
-#define CLI_STYLE_SHORT "t"
-#define CLI_STYLE_LONG "style"
+#define CLI_STYLE_SHORT "t"
+#define CLI_STYLE_LONG "style"
-#define CLI_NDEBUG_SHORT "g"
-#define CLI_NDEBUG_LONG "no-debug-output"
+#define CLI_NDEBUG_SHORT "g"
+#define CLI_NDEBUG_LONG "no-debug-output"
-#define CLI_FORCE_NOWEBENGINE_SHORT "w"
-#define CLI_FORCE_NOWEBENGINE_LONG "no-web-engine"
+#define CLI_FORCE_NOWEBENGINE_SHORT "w"
+#define CLI_FORCE_NOWEBENGINE_LONG "no-web-engine"
#define CLI_QUIT_INSTANCE "q"
-#define CLI_IS_RUNNING "a"
+#define CLI_IS_RUNNING "a"
-#define HTTP_HEADERS_ACCEPT "Accept"
-#define HTTP_HEADERS_CONTENT_TYPE "Content-Type"
+#define HTTP_HEADERS_ACCEPT "Accept"
+#define HTTP_HEADERS_CONTENT_TYPE "Content-Type"
#define HTTP_HEADERS_CONTENT_LENGTH "Content-Length"
-#define HTTP_HEADERS_AUTHORIZATION "Authorization"
-#define HTTP_HEADERS_USER_AGENT "User-Agent"
-#define HTTP_HEADERS_COOKIE "Cookie"
+#define HTTP_HEADERS_AUTHORIZATION "Authorization"
+#define HTTP_HEADERS_USER_AGENT "User-Agent"
+#define HTTP_HEADERS_COOKIE "Cookie"
-#define LOGSEC_NETWORK "network: "
-#define LOGSEC_ADBLOCK "adblock: "
-#define LOGSEC_FEEDMODEL "feed-model: "
-#define LOGSEC_FEEDDOWNLOADER "feed-downloader: "
-#define LOGSEC_MESSAGEMODEL "message-model: "
-#define LOGSEC_JS "javascript: "
-#define LOGSEC_GUI "gui: "
-#define LOGSEC_CORE "core: "
-#define LOGSEC_NODEJS "nodejs: "
-#define LOGSEC_DB "database: "
-#define LOGSEC_NEXTCLOUD "nextcloud: "
-#define LOGSEC_GREADER "greader: "
-#define LOGSEC_FEEDLY "feedly: "
-#define LOGSEC_TTRSS "tt-rss: "
-#define LOGSEC_GMAIL "gmail: "
-#define LOGSEC_OAUTH "oauth: "
-#define LOGSEC_REDDIT "reddit: "
-#define LOGSEC_NEWSBLUR "newsblur: "
+#define LOGSEC_NETWORK "network: "
+#define LOGSEC_ADBLOCK "adblock: "
+#define LOGSEC_FEEDMODEL "feed-model: "
+#define LOGSEC_FEEDDOWNLOADER "feed-downloader: "
+#define LOGSEC_MESSAGEMODEL "message-model: "
+#define LOGSEC_JS "javascript: "
+#define LOGSEC_GUI "gui: "
+#define LOGSEC_CORE "core: "
+#define LOGSEC_NODEJS "nodejs: "
+#define LOGSEC_DB "database: "
+#define LOGSEC_NEXTCLOUD "nextcloud: "
+#define LOGSEC_GREADER "greader: "
+#define LOGSEC_FEEDLY "feedly: "
+#define LOGSEC_TTRSS "tt-rss: "
+#define LOGSEC_GMAIL "gmail: "
+#define LOGSEC_OAUTH "oauth: "
+#define LOGSEC_REDDIT "reddit: "
+#define LOGSEC_NEWSBLUR "newsblur: "
-#define MAX_ZOOM_FACTOR 5.0f
-#define MIN_ZOOM_FACTOR 0.25f
+#define MAX_ZOOM_FACTOR 5.0f
+#define MIN_ZOOM_FACTOR 0.25f
#define DEFAULT_ZOOM_FACTOR 1.0f
-#define ZOOM_FACTOR_STEP 0.05f
+#define ZOOM_FACTOR_STEP 0.05f
#if defined(USE_WEBENGINE)
-#define HTTP_COMPLETE_USERAGENT (QWebEngineProfile::defaultProfile()->httpUserAgent().toLocal8Bit() + QByteArrayLiteral(" ") + QByteArrayLiteral(APP_USERAGENT))
+#define HTTP_COMPLETE_USERAGENT \
+ (QWebEngineProfile::defaultProfile()->httpUserAgent().toLocal8Bit() + QByteArrayLiteral(" ") + \
+ QByteArrayLiteral(APP_USERAGENT))
#else
-#define HTTP_COMPLETE_USERAGENT (QByteArrayLiteral( \
- "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.2 Chrome/83.0.4103.122 Safari/537.36 ") \
- + \
- QByteArrayLiteral(APP_USERAGENT))
+#define HTTP_COMPLETE_USERAGENT \
+ (QByteArrayLiteral("Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " \
+ "QtWebEngine/5.15.2 Chrome/83.0.4103.122 Safari/537.36 ") + \
+ QByteArrayLiteral(APP_USERAGENT))
#endif
-#define INTERNAL_URL_MESSAGE "http://rssguard.message"
-#define INTERNAL_URL_BLANK "http://rssguard.blank"
-#define INTERNAL_URL_ADBLOCKED "http://rssguard.adblocked"
-#define INTERNAL_URL_MESSAGE_HOST "rssguard.message"
+#define INTERNAL_URL_MESSAGE "http://rssguard.message"
+#define INTERNAL_URL_BLANK "http://rssguard.blank"
+#define INTERNAL_URL_ADBLOCKED "http://rssguard.adblocked"
+#define INTERNAL_URL_MESSAGE_HOST "rssguard.message"
-#define FEED_REGEX_MATCHER "]+type=\"application\\/(?:atom\\+xml|rss\\+xml|feed\\+json|json)\"[^>]*>"
-#define FEED_HREF_REGEX_MATCHER "href=\"([^\"]+)\""
+#define FEED_REGEX_MATCHER "]+type=\"application\\/(?:atom\\+xml|rss\\+xml|feed\\+json|json)\"[^>]*>"
+#define FEED_HREF_REGEX_MATCHER "href=\"([^\"]+)\""
-#define PLACEHOLDER_UNREAD_COUNTS "%unread"
-#define PLACEHOLDER_ALL_COUNTS "%all"
+#define PLACEHOLDER_UNREAD_COUNTS "%unread"
+#define PLACEHOLDER_ALL_COUNTS "%all"
-#define BACKUP_NAME_SETTINGS "config"
-#define BACKUP_SUFFIX_SETTINGS ".ini.backup"
-#define BACKUP_NAME_DATABASE "database"
-#define BACKUP_SUFFIX_DATABASE ".db.backup"
+#define BACKUP_NAME_SETTINGS "config"
+#define BACKUP_SUFFIX_SETTINGS ".ini.backup"
+#define BACKUP_NAME_DATABASE "database"
+#define BACKUP_SUFFIX_DATABASE ".db.backup"
-#define APP_DB_MYSQL_DRIVER "QMYSQL"
-#define APP_DB_MYSQL_INIT "db_init_mysql.sql"
-#define APP_DB_MYSQL_TEST "MySQLTest"
-#define APP_DB_MYSQL_PORT 3306
+#define APP_DB_MYSQL_DRIVER "QMYSQL"
+#define APP_DB_MYSQL_INIT "db_init_mysql.sql"
+#define APP_DB_MYSQL_TEST "MySQLTest"
+#define APP_DB_MYSQL_PORT 3306
-#define APP_DB_SQLITE_DRIVER "QSQLITE"
-#define APP_DB_SQLITE_INIT "db_init_sqlite.sql"
-#define APP_DB_SQLITE_PATH "database"
-#define APP_DB_SQLITE_FILE "database.db"
+#define APP_DB_SQLITE_DRIVER "QSQLITE"
+#define APP_DB_SQLITE_INIT "db_init_sqlite.sql"
+#define APP_DB_SQLITE_PATH "database"
+#define APP_DB_SQLITE_FILE "database.db"
// Keep this in sync with schema versions declared in SQL initialization code.
-#define APP_DB_SCHEMA_VERSION "2"
-#define APP_DB_UPDATE_FILE_PATTERN "db_update_%1_%2_%3.sql"
-#define APP_DB_COMMENT_SPLIT "-- !\n"
-#define APP_DB_INCLUDE_PLACEHOLDER "!!"
-#define APP_DB_NAME_PLACEHOLDER "##"
-#define APP_DB_AUTO_INC_PRIM_KEY_PLACEHOLDER "$$"
-#define APP_DB_BLOB_PLACEHOLDER "^^"
+#define APP_DB_SCHEMA_VERSION "2"
+#define APP_DB_UPDATE_FILE_PATTERN "db_update_%1_%2_%3.sql"
+#define APP_DB_COMMENT_SPLIT "-- !\n"
+#define APP_DB_INCLUDE_PLACEHOLDER "!!"
+#define APP_DB_NAME_PLACEHOLDER "##"
+#define APP_DB_AUTO_INC_PRIM_KEY_PLACEHOLDER "$$"
+#define APP_DB_BLOB_PLACEHOLDER "^^"
-#define APP_CFG_PATH "config"
-#define APP_CFG_FILE "config.ini"
+#define APP_CFG_PATH "config"
+#define APP_CFG_FILE "config.ini"
#define APP_SKIN_USER_FOLDER "skins"
-#define APP_SKIN_DEFAULT "nudus-light"
+#define APP_SKIN_DEFAULT "nudus-light"
#define APP_SKIN_METADATA_FILE "metadata.xml"
-#define APP_STYLE_DEFAULT "Fusion"
+#define APP_STYLE_DEFAULT "Fusion"
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
-#define APP_THEME_DEFAULT ""
+#define APP_THEME_DEFAULT ""
#else
-#define APP_THEME_DEFAULT "Breeze"
+#define APP_THEME_DEFAULT "Breeze"
#endif
-#define APP_LOCAL_THEME_FOLDER "icons"
-#define APP_NO_THEME ""
+#define APP_LOCAL_THEME_FOLDER "icons"
+#define APP_NO_THEME ""
// Indexes of columns as they are DEFINED IN THE TABLE for MESSAGES.
-#define MSG_DB_ID_INDEX 0
-#define MSG_DB_READ_INDEX 1
-#define MSG_DB_IMPORTANT_INDEX 2
-#define MSG_DB_DELETED_INDEX 3
-#define MSG_DB_PDELETED_INDEX 4
-#define MSG_DB_FEED_CUSTOM_ID_INDEX 5
-#define MSG_DB_TITLE_INDEX 6
-#define MSG_DB_URL_INDEX 7
-#define MSG_DB_AUTHOR_INDEX 8
-#define MSG_DB_DCREATED_INDEX 9
-#define MSG_DB_CONTENTS_INDEX 10
-#define MSG_DB_ENCLOSURES_INDEX 11
-#define MSG_DB_SCORE_INDEX 12
-#define MSG_DB_ACCOUNT_ID_INDEX 13
-#define MSG_DB_CUSTOM_ID_INDEX 14
-#define MSG_DB_CUSTOM_HASH_INDEX 15
-#define MSG_DB_FEED_TITLE_INDEX 16
-#define MSG_DB_HAS_ENCLOSURES 17
+#define MSG_DB_ID_INDEX 0
+#define MSG_DB_READ_INDEX 1
+#define MSG_DB_IMPORTANT_INDEX 2
+#define MSG_DB_DELETED_INDEX 3
+#define MSG_DB_PDELETED_INDEX 4
+#define MSG_DB_FEED_CUSTOM_ID_INDEX 5
+#define MSG_DB_TITLE_INDEX 6
+#define MSG_DB_URL_INDEX 7
+#define MSG_DB_AUTHOR_INDEX 8
+#define MSG_DB_DCREATED_INDEX 9
+#define MSG_DB_CONTENTS_INDEX 10
+#define MSG_DB_ENCLOSURES_INDEX 11
+#define MSG_DB_SCORE_INDEX 12
+#define MSG_DB_ACCOUNT_ID_INDEX 13
+#define MSG_DB_CUSTOM_ID_INDEX 14
+#define MSG_DB_CUSTOM_HASH_INDEX 15
+#define MSG_DB_FEED_TITLE_INDEX 16
+#define MSG_DB_HAS_ENCLOSURES 17
// Indexes of columns as they are DEFINED IN THE TABLE for CATEGORIES.
-#define CAT_DB_ID_INDEX 0
-#define CAT_DB_ORDER_INDEX 1
-#define CAT_DB_PARENT_ID_INDEX 2
-#define CAT_DB_TITLE_INDEX 3
-#define CAT_DB_DESCRIPTION_INDEX 4
-#define CAT_DB_DCREATED_INDEX 5
-#define CAT_DB_ICON_INDEX 6
-#define CAT_DB_ACCOUNT_ID_INDEX 7
-#define CAT_DB_CUSTOM_ID_INDEX 8
+#define CAT_DB_ID_INDEX 0
+#define CAT_DB_ORDER_INDEX 1
+#define CAT_DB_PARENT_ID_INDEX 2
+#define CAT_DB_TITLE_INDEX 3
+#define CAT_DB_DESCRIPTION_INDEX 4
+#define CAT_DB_DCREATED_INDEX 5
+#define CAT_DB_ICON_INDEX 6
+#define CAT_DB_ACCOUNT_ID_INDEX 7
+#define CAT_DB_CUSTOM_ID_INDEX 8
// Indexes of columns as they are DEFINED IN THE TABLE for FEEDS.
-#define FDS_DB_ID_INDEX 0
-#define FDS_DB_ORDER_INDEX 1
-#define FDS_DB_TITLE_INDEX 2
-#define FDS_DB_DESCRIPTION_INDEX 3
-#define FDS_DB_DCREATED_INDEX 4
-#define FDS_DB_ICON_INDEX 5
-#define FDS_DB_CATEGORY_INDEX 6
-#define FDS_DB_SOURCE_INDEX 7
-#define FDS_DB_UPDATE_TYPE_INDEX 8
-#define FDS_DB_UPDATE_INTERVAL_INDEX 9
-#define FDS_DB_IS_OFF_INDEX 10
-#define FDS_DB_OPEN_ARTICLES_INDEX 11
-#define FDS_DB_ACCOUNT_ID_INDEX 12
-#define FDS_DB_CUSTOM_ID_INDEX 13
-#define FDS_DB_CUSTOM_DATA_INDEX 14
+#define FDS_DB_ID_INDEX 0
+#define FDS_DB_ORDER_INDEX 1
+#define FDS_DB_TITLE_INDEX 2
+#define FDS_DB_DESCRIPTION_INDEX 3
+#define FDS_DB_DCREATED_INDEX 4
+#define FDS_DB_ICON_INDEX 5
+#define FDS_DB_CATEGORY_INDEX 6
+#define FDS_DB_SOURCE_INDEX 7
+#define FDS_DB_UPDATE_TYPE_INDEX 8
+#define FDS_DB_UPDATE_INTERVAL_INDEX 9
+#define FDS_DB_IS_OFF_INDEX 10
+#define FDS_DB_OPEN_ARTICLES_INDEX 11
+#define FDS_DB_ACCOUNT_ID_INDEX 12
+#define FDS_DB_CUSTOM_ID_INDEX 13
+#define FDS_DB_CUSTOM_DATA_INDEX 14
// Indexes of columns for feed models.
-#define FDS_MODEL_TITLE_INDEX 0
-#define FDS_MODEL_COUNTS_INDEX 1
+#define FDS_MODEL_TITLE_INDEX 0
+#define FDS_MODEL_COUNTS_INDEX 1
// Indexes of columns for message filter manager models.
-#define MFM_MODEL_ISREAD 0
-#define MFM_MODEL_ISIMPORTANT 1
-#define MFM_MODEL_ISDELETED 2
-#define MFM_MODEL_TITLE 3
-#define MFM_MODEL_URL 4
-#define MFM_MODEL_AUTHOR 5
-#define MFM_MODEL_CREATED 6
-#define MFM_MODEL_SCORE 7
+#define MFM_MODEL_ISREAD 0
+#define MFM_MODEL_ISIMPORTANT 1
+#define MFM_MODEL_ISDELETED 2
+#define MFM_MODEL_TITLE 3
+#define MFM_MODEL_URL 4
+#define MFM_MODEL_AUTHOR 5
+#define MFM_MODEL_CREATED 6
+#define MFM_MODEL_SCORE 7
#if defined(Q_OS_LINUX)
-#define OS_ID "Linux"
+#define OS_ID "Linux"
#elif defined(Q_OS_FREEBSD)
-#define OS_ID "FreeBSD"
+#define OS_ID "FreeBSD"
#elif defined(Q_OS_NETBSD)
-#define OS_ID "NetBSD"
+#define OS_ID "NetBSD"
#elif defined(Q_OS_OPENBSD)
-#define OS_ID "OpenBSD"
+#define OS_ID "OpenBSD"
#elif defined(Q_OS_OS2)
-#define OS_ID "OS2"
+#define OS_ID "OS2"
#elif defined(Q_OS_OSX)
-#define OS_ID "macOS"
+#define OS_ID "macOS"
#elif defined(Q_OS_WIN)
-#define OS_ID "Windows"
+#define OS_ID "Windows"
#elif defined(Q_OS_ANDROID)
-#define OS_ID "Android"
+#define OS_ID "Android"
#elif defined(Q_OS_UNIX)
-#define OS_ID "Unix"
+#define OS_ID "Unix"
#else
-#define OS_ID ""
+#define OS_ID ""
#endif
// Paths.
diff --git a/src/librssguard/gui/notifications/singlenotificationeditor.cpp b/src/librssguard/gui/notifications/singlenotificationeditor.cpp
index 0a66538eb..e60c4994a 100644
--- a/src/librssguard/gui/notifications/singlenotificationeditor.cpp
+++ b/src/librssguard/gui/notifications/singlenotificationeditor.cpp
@@ -35,11 +35,15 @@ SingleNotificationEditor::SingleNotificationEditor(const Notification& notificat
}
Notification SingleNotificationEditor::notification() const {
- return Notification(m_notificationEvent, m_ui.m_cbBalloon->isChecked(), m_ui.m_txtSound->text(), m_ui.m_slidVolume->value());
+ return Notification(m_notificationEvent,
+ m_ui.m_cbBalloon->isChecked(),
+ m_ui.m_txtSound->text(),
+ m_ui.m_slidVolume->value());
}
void SingleNotificationEditor::selectSoundFile() {
- auto fil = QFileDialog::getOpenFileName(window(), tr("Select sound file"),
+ auto fil = QFileDialog::getOpenFileName(window(),
+ tr("Select sound file"),
qApp->homeFolder(),
tr("WAV files (*.wav);;MP3 files (*.mp3)"));
diff --git a/src/librssguard/gui/notifications/singlenotificationeditor.ui b/src/librssguard/gui/notifications/singlenotificationeditor.ui
index a4f72c35c..505147f1f 100644
--- a/src/librssguard/gui/notifications/singlenotificationeditor.ui
+++ b/src/librssguard/gui/notifications/singlenotificationeditor.ui
@@ -82,6 +82,9 @@
-
+
+ 100
+
Qt::Horizontal
diff --git a/src/librssguard/miscellaneous/externaltool.cpp b/src/librssguard/miscellaneous/externaltool.cpp
index dd27238aa..a7925b809 100644
--- a/src/librssguard/miscellaneous/externaltool.cpp
+++ b/src/librssguard/miscellaneous/externaltool.cpp
@@ -71,9 +71,14 @@ void ExternalTool::setToolsToSettings(QVector& tools) {
bool ExternalTool::run(const QString& target) {
if (parameters().isEmpty()) {
- return IOFactory::startProcessDetached(executable(), { target });
+ return IOFactory::startProcessDetached(executable(), {target});
}
else {
- return IOFactory::startProcessDetached(executable(), QStringList() << parameters() << target);
+ auto pars = parameters();
+ pars += QSL(" \"%1\"").arg(target);
+
+ auto params = TextFactory::tokenizeProcessArguments(pars);
+
+ return IOFactory::startProcessDetached(executable(), params);
}
}
diff --git a/src/librssguard/miscellaneous/iofactory.cpp b/src/librssguard/miscellaneous/iofactory.cpp
index a837904b6..60e5123f5 100644
--- a/src/librssguard/miscellaneous/iofactory.cpp
+++ b/src/librssguard/miscellaneous/iofactory.cpp
@@ -72,23 +72,13 @@ QString IOFactory::filterBadCharsFromFilename(const QString& name) {
return value;
}
-bool IOFactory::startProcessDetached(const QString& program, const QStringList& arguments,
- const QString& native_arguments, const QString& working_directory) {
+bool IOFactory::startProcessDetached(const QString& executable,
+ const QStringList& arguments,
+ const QString& working_directory) {
QProcess process;
- process.setProgram(program);
+ process.setProgram(executable);
process.setArguments(arguments);
-
-#if defined(Q_OS_WIN) || defined(Q_CLANG_QDOC)
- if (!native_arguments.isEmpty()) {
- process.setNativeArguments(native_arguments);
- }
-#else
- if (arguments.isEmpty() && !native_arguments.isEmpty()) {
- process.setArguments({ native_arguments });
- }
-#endif
-
process.setWorkingDirectory(working_directory);
return process.startDetached(nullptr);
@@ -134,8 +124,7 @@ QString IOFactory::startProcessGetOutput(const QString& executable,
proc.start();
- if (proc.waitForFinished() &&
- proc.exitStatus() == QProcess::ExitStatus::NormalExit &&
+ if (proc.waitForFinished() && proc.exitStatus() == QProcess::ExitStatus::NormalExit &&
proc.exitCode() == EXIT_SUCCESS) {
return proc.readAllStandardOutput();
}
@@ -179,11 +168,8 @@ bool IOFactory::copyFile(const QString& source, const QString& destination) {
if (QFile::exists(destination)) {
QFile file(destination);
- file.setPermissions(file.permissions() |
- QFileDevice::WriteOwner |
- QFileDevice::WriteUser |
- QFileDevice::WriteGroup |
- QFileDevice::WriteOther);
+ file.setPermissions(file.permissions() | QFileDevice::WriteOwner | QFileDevice::WriteUser |
+ QFileDevice::WriteGroup | QFileDevice::WriteOther);
if (!QFile::remove(destination)) {
return false;
diff --git a/src/librssguard/miscellaneous/iofactory.h b/src/librssguard/miscellaneous/iofactory.h
index c23594a18..713740f0c 100644
--- a/src/librssguard/miscellaneous/iofactory.h
+++ b/src/librssguard/miscellaneous/iofactory.h
@@ -11,7 +11,7 @@
#include
class IOFactory {
- Q_DECLARE_TR_FUNCTIONS(IOFactory)
+ Q_DECLARE_TR_FUNCTIONS(IOFactory)
private:
IOFactory();
@@ -28,9 +28,8 @@ class IOFactory {
// Filters out shit characters from filename.
static QString filterBadCharsFromFilename(const QString& name);
- static bool startProcessDetached(const QString& program,
- const QStringList& arguments,
- const QString& native_arguments = {},
+ static bool startProcessDetached(const QString& executable,
+ const QStringList& arguments = {},
const QString& working_directory = {});
static void startProcess(QProcess* const proc,
const QString& executable,
diff --git a/src/librssguard/miscellaneous/notification.cpp b/src/librssguard/miscellaneous/notification.cpp
index 235a54778..e243b478a 100644
--- a/src/librssguard/miscellaneous/notification.cpp
+++ b/src/librssguard/miscellaneous/notification.cpp
@@ -50,14 +50,15 @@ void Notification::playSound(Application* app) const {
if (m_soundPath.startsWith(QSL(":"))) {
play->setSource(QUrl(QSL("qrc") + m_soundPath));
-
}
else {
- play->setSource(QUrl::fromLocalFile(
- QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath))));
+ play
+ ->setSource(QUrl::
+ fromLocalFile(QDir::toNativeSeparators(app
+ ->replaceDataUserDataFolderPlaceholder(m_soundPath))));
}
- play->setVolume(m_volume);
+ play->setVolume(fractionalVolume());
play->play();
}
else {
@@ -79,13 +80,15 @@ void Notification::playSound(Application* app) const {
if (m_soundPath.startsWith(QSL(":"))) {
play->setSource(QUrl(QSL("qrc") + m_soundPath));
-
}
else {
- play->setSource(QUrl::fromLocalFile(QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath))));
+ play
+ ->setSource(QUrl::
+ fromLocalFile(QDir::toNativeSeparators(app
+ ->replaceDataUserDataFolderPlaceholder(m_soundPath))));
}
- play->audioOutput()->setVolume((m_volume * 1.0f) / 100.0f);
+ play->audioOutput()->setVolume(fractionalVolume());
play->play();
#else
QObject::connect(play, &QMediaPlayer::stateChanged, play, [play](QMediaPlayer::State state) {
@@ -96,12 +99,10 @@ void Notification::playSound(Application* app) const {
if (m_soundPath.startsWith(QSL(":"))) {
play->setMedia(QMediaContent(QUrl(QSL("qrc") + m_soundPath)));
-
}
else {
play->setMedia(QMediaContent(
- QUrl::fromLocalFile(
- QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath)))));
+ QUrl::fromLocalFile(QDir::toNativeSeparators(app->replaceDataUserDataFolderPlaceholder(m_soundPath)))));
}
play->setVolume(m_volume);
@@ -113,16 +114,14 @@ void Notification::playSound(Application* app) const {
}
QList Notification::allEvents() {
- return {
- Event::GeneralEvent,
- Event::NewUnreadArticlesFetched,
- Event::ArticlesFetchingStarted,
- Event::LoginDataRefreshed,
- Event::LoginFailure,
- Event::NewAppVersionAvailable,
- Event::NodePackageUpdated,
- Event::NodePackageFailedToUpdate
- };
+ return {Event::GeneralEvent,
+ Event::NewUnreadArticlesFetched,
+ Event::ArticlesFetchingStarted,
+ Event::LoginDataRefreshed,
+ Event::LoginFailure,
+ Event::NewAppVersionAvailable,
+ Event::NodePackageUpdated,
+ Event::NodePackageFailedToUpdate};
}
QString Notification::nameForEvent(Notification::Event event) {
@@ -160,6 +159,10 @@ int Notification::volume() const {
return m_volume;
}
+qreal Notification::fractionalVolume() const {
+ return (m_volume * 1.0f) / 100.0f;
+}
+
void Notification::setVolume(int volume) {
m_volume = volume;
}
diff --git a/src/librssguard/miscellaneous/notification.h b/src/librssguard/miscellaneous/notification.h
index 13727e185..443fe8da7 100644
--- a/src/librssguard/miscellaneous/notification.h
+++ b/src/librssguard/miscellaneous/notification.h
@@ -43,7 +43,9 @@ class Notification {
NodePackageFailedToUpdate = 8
};
- explicit Notification(Event event = Event::NoEvent, bool balloon = {}, const QString& sound_path = {},
+ explicit Notification(Event event = Event::NoEvent,
+ bool balloon = {},
+ const QString& sound_path = {},
int volume = DEFAULT_NOTIFICATION_VOLUME);
bool balloonEnabled() const;
@@ -52,6 +54,7 @@ class Notification {
void setEvent(Event event);
int volume() const;
+ qreal fractionalVolume() const;
void setVolume(int volume);
// Returns full path to audio file which should be played when notification
@@ -69,7 +72,7 @@ class Notification {
Event m_event;
bool m_balloonEnabled;
QString m_soundPath;
- int m_volume;
+ qreal m_volume;
};
#endif // NOTIFICATION_H
diff --git a/src/librssguard/network-web/webfactory.cpp b/src/librssguard/network-web/webfactory.cpp
index aea07948f..4116c9192 100644
--- a/src/librssguard/network-web/webfactory.cpp
+++ b/src/librssguard/network-web/webfactory.cpp
@@ -28,8 +28,7 @@
#include
#endif
-WebFactory::WebFactory(QObject* parent)
- : QObject(parent) {
+WebFactory::WebFactory(QObject* parent) : QObject(parent) {
m_adBlock = new AdBlockManager(this);
#if defined(USE_WEBENGINE)
@@ -63,17 +62,21 @@ WebFactory::~WebFactory() {
bool WebFactory::sendMessageViaEmail(const Message& message) {
if (qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailEnabled)).toBool()) {
- const QString browser = qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailExecutable)).toString();
- const QString arguments = qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailArguments)).toString();
+ const QString browser =
+ qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailExecutable)).toString();
+ const QString arguments =
+ qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalEmailArguments)).toString();
+ const QStringList tokenized_arguments =
+ TextFactory::tokenizeProcessArguments(arguments.arg(message.m_title, stripTags(message.m_contents)));
- return IOFactory::startProcessDetached(browser, {}, arguments.arg(message.m_title, stripTags(message.m_contents)));
+ return IOFactory::startProcessDetached(browser, tokenized_arguments);
}
else {
// Send it via mailto protocol.
// NOTE: http://en.wikipedia.org/wiki/Mailto
- return QDesktopServices::openUrl(QSL("mailto:?subject=%1&body=%2").arg(QString(QUrl::toPercentEncoding(message.m_title)),
- QString(QUrl::toPercentEncoding(stripTags(
- message.m_contents)))));
+ return QDesktopServices::openUrl(QSL("mailto:?subject=%1&body=%2")
+ .arg(QString(QUrl::toPercentEncoding(message.m_title)),
+ QString(QUrl::toPercentEncoding(stripTags(message.m_contents)))));
}
}
@@ -83,13 +86,15 @@ bool WebFactory::openUrlInExternalBrowser(const QString& url) const {
bool result = false;
if (qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserEnabled)).toBool()) {
- const QString browser = qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserExecutable)).toString();
- const QString arguments = qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserArguments)).toString();
- auto nice_args = arguments.arg(url);
+ const QString browser =
+ qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserExecutable)).toString();
+ const QString arguments =
+ qApp->settings()->value(GROUP(Browser), SETTING(Browser::CustomExternalBrowserArguments)).toString();
+ const auto nice_args = arguments.arg(url);
qDebugNN << LOGSEC_NETWORK << "Arguments for external browser:" << QUOTE_W_SPACE_DOT(nice_args);
- result = IOFactory::startProcessDetached(browser, {}, nice_args);
+ result = IOFactory::startProcessDetached(browser, TextFactory::tokenizeProcessArguments(nice_args));
if (!result) {
qDebugNN << LOGSEC_NETWORK << "External web browser call failed.";
@@ -105,7 +110,8 @@ bool WebFactory::openUrlInExternalBrowser(const QString& url) const {
QMessageBox::Icon::Critical,
tr("Navigate to website manually"),
tr("%1 was unable to launch your web browser with the given URL, you need to open the "
- "below website URL in your web browser manually.").arg(QSL(APP_NAME)),
+ "below website URL in your web browser manually.")
+ .arg(QSL(APP_NAME)),
{},
url,
QMessageBox::StandardButton::Ok);
@@ -127,10 +133,11 @@ QString WebFactory::unescapeHtml(const QString& html) {
generateUnescapes();
}
- QString output; output.reserve(html.size());
+ QString output;
+ output.reserve(html.size());
// Traverse input HTML string and replace named/number entities.
- for (int pos = 0; pos < html.size(); ) {
+ for (int pos = 0; pos < html.size();) {
const QChar first = html.at(pos);
if (first == QChar('&')) {
@@ -223,9 +230,8 @@ QString WebFactory::processFeedUriScheme(const QString& url) {
}
void WebFactory::updateProxy() {
- const QNetworkProxy::ProxyType selected_proxy_type = static_cast(qApp->settings()->value(GROUP(Proxy),
- SETTING(Proxy::Type)).
- toInt());
+ const QNetworkProxy::ProxyType selected_proxy_type =
+ static_cast(qApp->settings()->value(GROUP(Proxy), SETTING(Proxy::Type)).toInt());
if (selected_proxy_type == QNetworkProxy::NoProxy) {
qDebugNN << LOGSEC_NETWORK << "Disabling application-wide proxy completely.";
@@ -249,10 +255,8 @@ void WebFactory::updateProxy() {
new_proxy.setPassword(settings->password(GROUP(Proxy), SETTING(Proxy::Password)).toString());
qWarningNN << LOGSEC_NETWORK
- << "Activating application-wide custom proxy, address:"
- << QUOTE_W_SPACE_COMMA(new_proxy.hostName())
- << " type:"
- << QUOTE_W_SPACE_DOT(new_proxy.type());
+ << "Activating application-wide custom proxy, address:" << QUOTE_W_SPACE_COMMA(new_proxy.hostName())
+ << " type:" << QUOTE_W_SPACE_DOT(new_proxy.type());
QNetworkProxy::setApplicationProxy(new_proxy);
}
@@ -269,7 +273,8 @@ NetworkUrlInterceptor* WebFactory::urlIinterceptor() const {
QAction* WebFactory::engineSettingsAction() {
if (m_engineSettings == nullptr) {
- m_engineSettings = new QAction(qApp->icons()->fromTheme(QSL("applications-internet")), tr("Web engine settings"), this);
+ m_engineSettings =
+ new QAction(qApp->icons()->fromTheme(QSL("applications-internet")), tr("Web engine settings"), this);
m_engineSettings->setMenu(new QMenu());
createMenu(m_engineSettings->menu());
connect(m_engineSettings->menu(), &QMenu::aboutToShow, this, [this]() {
@@ -294,35 +299,56 @@ void WebFactory::createMenu(QMenu* menu) {
actions << createEngineSettingsAction(tr("Auto-load images"), QWebEngineSettings::WebAttribute::AutoLoadImages);
actions << createEngineSettingsAction(tr("JS enabled"), QWebEngineSettings::WebAttribute::JavascriptEnabled);
- actions << createEngineSettingsAction(tr("JS can open popup windows"), QWebEngineSettings::WebAttribute::JavascriptCanOpenWindows);
- actions << createEngineSettingsAction(tr("JS can access clipboard"), QWebEngineSettings::WebAttribute::JavascriptCanAccessClipboard);
- actions << createEngineSettingsAction(tr("Hyperlinks can get focus"), QWebEngineSettings::WebAttribute::LinksIncludedInFocusChain);
- actions << createEngineSettingsAction(tr("Local storage enabled"), QWebEngineSettings::WebAttribute::LocalStorageEnabled);
- actions << createEngineSettingsAction(tr("Local content can access remote URLs"), QWebEngineSettings::WebAttribute::LocalContentCanAccessRemoteUrls);
- actions << createEngineSettingsAction(tr("XSS auditing enabled"), QWebEngineSettings::WebAttribute::XSSAuditingEnabled);
- actions << createEngineSettingsAction(tr("Spatial navigation enabled"), QWebEngineSettings::WebAttribute::SpatialNavigationEnabled);
- actions << createEngineSettingsAction(tr("Local content can access local files"), QWebEngineSettings::WebAttribute::LocalContentCanAccessFileUrls);
- actions << createEngineSettingsAction(tr("Hyperlink auditing enabled"), QWebEngineSettings::WebAttribute::HyperlinkAuditingEnabled);
- actions << createEngineSettingsAction(tr("Animate scrolling"), QWebEngineSettings::WebAttribute::ScrollAnimatorEnabled);
+ actions << createEngineSettingsAction(tr("JS can open popup windows"),
+ QWebEngineSettings::WebAttribute::JavascriptCanOpenWindows);
+ actions << createEngineSettingsAction(tr("JS can access clipboard"),
+ QWebEngineSettings::WebAttribute::JavascriptCanAccessClipboard);
+ actions << createEngineSettingsAction(tr("Hyperlinks can get focus"),
+ QWebEngineSettings::WebAttribute::LinksIncludedInFocusChain);
+ actions << createEngineSettingsAction(tr("Local storage enabled"),
+ QWebEngineSettings::WebAttribute::LocalStorageEnabled);
+ actions << createEngineSettingsAction(tr("Local content can access remote URLs"),
+ QWebEngineSettings::WebAttribute::LocalContentCanAccessRemoteUrls);
+ actions << createEngineSettingsAction(tr("XSS auditing enabled"),
+ QWebEngineSettings::WebAttribute::XSSAuditingEnabled);
+ actions << createEngineSettingsAction(tr("Spatial navigation enabled"),
+ QWebEngineSettings::WebAttribute::SpatialNavigationEnabled);
+ actions << createEngineSettingsAction(tr("Local content can access local files"),
+ QWebEngineSettings::WebAttribute::LocalContentCanAccessFileUrls);
+ actions << createEngineSettingsAction(tr("Hyperlink auditing enabled"),
+ QWebEngineSettings::WebAttribute::HyperlinkAuditingEnabled);
+ actions << createEngineSettingsAction(tr("Animate scrolling"),
+ QWebEngineSettings::WebAttribute::ScrollAnimatorEnabled);
actions << createEngineSettingsAction(tr("Error pages enabled"), QWebEngineSettings::WebAttribute::ErrorPageEnabled);
actions << createEngineSettingsAction(tr("Plugins enabled"), QWebEngineSettings::WebAttribute::PluginsEnabled);
- actions << createEngineSettingsAction(tr("Fullscreen enabled"), QWebEngineSettings::WebAttribute::FullScreenSupportEnabled);
+ actions << createEngineSettingsAction(tr("Fullscreen enabled"),
+ QWebEngineSettings::WebAttribute::FullScreenSupportEnabled);
#if !defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
- actions << createEngineSettingsAction(tr("Screen capture enabled"), QWebEngineSettings::WebAttribute::ScreenCaptureEnabled);
+ actions << createEngineSettingsAction(tr("Screen capture enabled"),
+ QWebEngineSettings::WebAttribute::ScreenCaptureEnabled);
actions << createEngineSettingsAction(tr("WebGL enabled"), QWebEngineSettings::WebAttribute::WebGLEnabled);
- actions << createEngineSettingsAction(tr("Accelerate 2D canvas"), QWebEngineSettings::WebAttribute::Accelerated2dCanvasEnabled);
- actions << createEngineSettingsAction(tr("Print element backgrounds"), QWebEngineSettings::WebAttribute::PrintElementBackgrounds);
- actions << createEngineSettingsAction(tr("Allow running insecure content"), QWebEngineSettings::WebAttribute::AllowRunningInsecureContent);
- actions << createEngineSettingsAction(tr("Allow geolocation on insecure origins"), QWebEngineSettings::WebAttribute::AllowGeolocationOnInsecureOrigins);
+ actions << createEngineSettingsAction(tr("Accelerate 2D canvas"),
+ QWebEngineSettings::WebAttribute::Accelerated2dCanvasEnabled);
+ actions << createEngineSettingsAction(tr("Print element backgrounds"),
+ QWebEngineSettings::WebAttribute::PrintElementBackgrounds);
+ actions << createEngineSettingsAction(tr("Allow running insecure content"),
+ QWebEngineSettings::WebAttribute::AllowRunningInsecureContent);
+ actions << createEngineSettingsAction(tr("Allow geolocation on insecure origins"),
+ QWebEngineSettings::WebAttribute::AllowGeolocationOnInsecureOrigins);
#endif
- actions << createEngineSettingsAction(tr("JS can activate windows"), QWebEngineSettings::WebAttribute::AllowWindowActivationFromJavaScript);
+ actions << createEngineSettingsAction(tr("JS can activate windows"),
+ QWebEngineSettings::WebAttribute::AllowWindowActivationFromJavaScript);
actions << createEngineSettingsAction(tr("Show scrollbars"), QWebEngineSettings::WebAttribute::ShowScrollBars);
- actions << createEngineSettingsAction(tr("Media playback with gestures"), QWebEngineSettings::WebAttribute::PlaybackRequiresUserGesture);
- actions << createEngineSettingsAction(tr("WebRTC uses only public interfaces"), QWebEngineSettings::WebAttribute::WebRTCPublicInterfacesOnly);
- actions << createEngineSettingsAction(tr("JS can paste from clipboard"), QWebEngineSettings::WebAttribute::JavascriptCanPaste);
- actions << createEngineSettingsAction(tr("DNS prefetch enabled"), QWebEngineSettings::WebAttribute::DnsPrefetchEnabled);
+ actions << createEngineSettingsAction(tr("Media playback with gestures"),
+ QWebEngineSettings::WebAttribute::PlaybackRequiresUserGesture);
+ actions << createEngineSettingsAction(tr("WebRTC uses only public interfaces"),
+ QWebEngineSettings::WebAttribute::WebRTCPublicInterfacesOnly);
+ actions << createEngineSettingsAction(tr("JS can paste from clipboard"),
+ QWebEngineSettings::WebAttribute::JavascriptCanPaste);
+ actions << createEngineSettingsAction(tr("DNS prefetch enabled"),
+ QWebEngineSettings::WebAttribute::DnsPrefetchEnabled);
#if QT_VERSION >= 0x050D00 // Qt >= 5.13.0
actions << createEngineSettingsAction(tr("PDF viewer enabled"), QWebEngineSettings::WebAttribute::PdfViewerEnabled);
@@ -345,7 +371,9 @@ QAction* WebFactory::createEngineSettingsAction(const QString& title, QWebEngine
act->setData(attribute);
act->setCheckable(true);
- act->setChecked(qApp->settings()->value(WebEngineAttributes::ID, QString::number(static_cast(attribute)), true).toBool());
+ act->setChecked(qApp->settings()
+ ->value(WebEngineAttributes::ID, QString::number(static_cast(attribute)), true)
+ .toBool());
QWebEngineProfile::defaultProfile()->settings()->setAttribute(attribute, act->isChecked());
connect(act, &QAction::toggled, this, &WebFactory::webEngineSettingChanged);
return act;