lang sync + multiple fixes around #1039

This commit is contained in:
Martin Rotter 2023-08-08 10:30:45 +02:00
parent 2a73af8347
commit 3c1f069c48
12 changed files with 671 additions and 544 deletions

View file

@ -4,16 +4,16 @@ Language: Cpp
AccessModifierOffset: 0
AlignAfterOpenBracket: Align
AlignArrayOfStructures: None
AlignConsecutiveMacros: None
AlignConsecutiveMacros: Consecutive
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignEscapedNewlines: Right
AlignEscapedNewlines: Left
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortEnumsOnASingleLine: true
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortEnumsOnASingleLine: false
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
@ -23,7 +23,7 @@ AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: MultiLine
AlwaysBreakTemplateDeclarations: Yes
AttributeMacros:
- __capability
BinPackArguments: false

File diff suppressed because it is too large Load diff

View file

@ -1155,7 +1155,7 @@ or this functionality is not implemented yet.</source>
<message>
<location filename="../src/librssguard/gui/dialogs/formabout.cpp" line="126"/>
<source>&lt;body&gt;%5 is a (very) tiny feed reader.&lt;br&gt;&lt;br&gt;This software is distributed under the terms of GNU General Public License, version 3.&lt;br&gt;&lt;br&gt;Contacts:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;mailto://%1&quot;&gt;%1&lt;/a&gt; ~e-mail&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt; ~website&lt;/li&gt;&lt;/ul&gt;You can obtain source code for %5 from its website.&lt;br&gt;&lt;br&gt;&lt;br&gt;Copyright (C) 2011-%3 %4&lt;/body&gt;</source>
<translation type="unfinished"/>
<translation>&lt;body&gt;%5 is a (very) tiny feed reader.&lt;br&gt;&lt;br&gt;This software is distributed under the terms of GNU General Public License, version 3.&lt;br&gt;&lt;br&gt;Contacts:&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;mailto://%1&quot;&gt;%1&lt;/a&gt; ~e-mail&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;%2&quot;&gt;%2&lt;/a&gt; ~website&lt;/li&gt;&lt;/ul&gt;You can obtain source code for %5 from its website.&lt;br&gt;&lt;br&gt;&lt;br&gt;Copyright © 2011-%3 %4&lt;/body&gt;</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formabout.cpp" line="110"/>
@ -1601,7 +1601,7 @@ or this functionality is not implemented yet.</source>
<message>
<location filename="../src/librssguard/gui/dialogs/formdatabasecleanup.cpp" line="30"/>
<source>I am ready.</source>
<translation type="unfinished"/>
<translation>Ready to cleanup the database.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formdatabasecleanup.cpp" line="76"/>
@ -1943,12 +1943,12 @@ or this functionality is not implemented yet.</source>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="250"/>
<source>&amp;About application</source>
<translation type="unfinished"/>
<translation>&amp;About RSS Guard</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="253"/>
<source>Displays extra info about this application.</source>
<translation type="unfinished"/>
<translation>Displays additional information about the application.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="267"/>
@ -1968,7 +1968,7 @@ or this functionality is not implemented yet.</source>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="281"/>
<source>Fetch all feeds</source>
<translation type="unfinished"/>
<translation>Fetch articles for all feeds</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="289"/>
@ -2113,7 +2113,7 @@ or this functionality is not implemented yet.</source>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="454"/>
<source>Hides main window if it is visible and shows it if it is hidden.</source>
<translation type="unfinished"/>
<translation>Hides main window if it&apos;s on top and shows it if it&apos;s minimised.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="468"/>
@ -4254,7 +4254,7 @@ Login tokens expiration: %2</source>
<message>
<location filename="../src/librssguard/core/messagesforfiltersmodel.cpp" line="13"/>
<source>Author</source>
<translation>Translator(s)</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/librssguard/core/messagesforfiltersmodel.cpp" line="13"/>
@ -4307,7 +4307,7 @@ Login tokens expiration: %2</source>
<message>
<location filename="../src/librssguard/core/messagesmodel.cpp" line="288"/>
<source>Author</source>
<translation>Translator(s)</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/librssguard/core/messagesmodel.cpp" line="290"/>
@ -4822,12 +4822,12 @@ Login tokens expiration: %2</source>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.cpp" line="20"/>
<source>Socks5</source>
<translation type="unfinished"/>
<translation>SOCKS5</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.cpp" line="21"/>
<source>Http</source>
<translation type="unfinished"/>
<translation>HTTP</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="14"/>
@ -4842,7 +4842,7 @@ Login tokens expiration: %2</source>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="41"/>
<source>Hostname or IP of your proxy server</source>
<translation type="unfinished"/>
<translation>Enter the hostname or IP of your proxy server here</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="48"/>
@ -4857,7 +4857,7 @@ Login tokens expiration: %2</source>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="92"/>
<source>Your username for proxy server authentication</source>
<translation type="unfinished"/>
<translation>Enter your username for proxy server authentification here</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="99"/>
@ -4867,7 +4867,7 @@ Login tokens expiration: %2</source>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="118"/>
<source>Your password for proxy server authentication</source>
<translation type="unfinished"/>
<translation>Enter your password for proxy server authentification here</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.cpp" line="12"/>
@ -6240,7 +6240,7 @@ Authors of this application are NOT responsible for lost data.</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.cpp" line="34"/>
<source>Note that enabling this might have drastic consequences on performance of article list with big number of articles.</source>
<translation type="unfinished"/>
<translation>Note that enabling this feature might have drastic negative consequences on the performance of article lists with a large amount of articles.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.cpp" line="54"/>
@ -6305,7 +6305,7 @@ Authors of this application are NOT responsible for lost data.</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="164"/>
<source>Feeds list</source>
<translation type="unfinished"/>
<translation>Feed list</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="170"/>
@ -6316,7 +6316,7 @@ Authors of this application are NOT responsible for lost data.</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="207"/>
<source>Feed list font</source>
<translation>Feed list-specific font</translation>
<translation>Feed list font</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="219"/>
@ -6380,7 +6380,7 @@ Authors of this application are NOT responsible for lost data.</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="332"/>
<source>Bring application window to front once article is opened in external web browser</source>
<translation type="unfinished"/>
<translation>Bring application window to the forefront once an article is opened in the external web browser</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="394"/>
@ -6400,7 +6400,7 @@ Authors of this application are NOT responsible for lost data.</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="354"/>
<source>Limit height of pictures</source>
<translation type="unfinished"/>
<translation>Limit image height</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="438"/>
@ -6410,7 +6410,7 @@ Authors of this application are NOT responsible for lost data.</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="446"/>
<source>Articles list</source>
<translation type="unfinished"/>
<translation>Article list</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsfeedsmessages.ui" line="452"/>
@ -6486,7 +6486,7 @@ Authors of this application are NOT responsible for lost data.</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsgui.cpp" line="34"/>
<source>Author</source>
<translation>Translator(s)</translation>
<translation type="unfinished"/>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsgui.cpp" line="34"/>
@ -6626,7 +6626,7 @@ Description: %3</source>
<message>
<location filename="../src/librssguard/gui/settings/settingsgui.ui" line="186"/>
<source>Start application hidden</source>
<translation type="unfinished"/>
<translation>Start application minimised</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsgui.ui" line="210"/>
@ -7324,7 +7324,7 @@ Also, you can post-process generated feed data with yet another script if you wi
<message>
<location filename="../src/librssguard/services/standard/standardserviceroot.cpp" line="44"/>
<source>This is obligatory service account for standard RSS/RDF/ATOM feeds.</source>
<translation type="unfinished"/>
<translation>This is an obligatory service account for standard RSS/RDF/ATOM feeds.</translation>
</message>
<message>
<location filename="../src/librssguard/services/standard/standardserviceroot.cpp" line="60"/>

View file

@ -516,7 +516,7 @@ Cliquez-ici pour ouvrir le répertoire parent.</translation>
<message>
<location filename="../src/librssguard/network-web/downloaditem.ui" line="86"/>
<source>&amp;Try again</source>
<translation>&amp;Essayez encore</translation>
<translation>&amp;Réessayer</translation>
</message>
<message>
<location filename="../src/librssguard/network-web/downloaditem.ui" line="93"/>
@ -526,12 +526,12 @@ Cliquez-ici pour ouvrir le répertoire parent.</translation>
<message>
<location filename="../src/librssguard/network-web/downloaditem.ui" line="100"/>
<source>&amp;Open file</source>
<translation>&amp;Ouvrez le fichier</translation>
<translation>&amp;Ouvrir le fichier</translation>
</message>
<message>
<location filename="../src/librssguard/network-web/downloaditem.ui" line="107"/>
<source>Open &amp;directory</source>
<translation>Ouvrir %repertoire</translation>
<translation>Ouvrir le &amp;pertoire</translation>
</message>
</context>
<context>
@ -574,7 +574,7 @@ Cliquez-ici pour ouvrir le répertoire parent.</translation>
<message>
<location filename="../src/librssguard/network-web/downloadmanager.ui" line="38"/>
<source>Clean up</source>
<translation>Nettoyage</translation>
<translation>&amp;Vider la liste de téléchargements</translation>
</message>
</context>
<context>
@ -664,7 +664,7 @@ Cliquez-ici pour ouvrir le répertoire parent.</translation>
<message>
<location filename="../src/librssguard/services/abstract/feed.cpp" line="280"/>
<source>uses global settings, but global auto-fetching of articles is disabled</source>
<translation>utilise les paramètres globaux, mais l&apos;obtention automatique globale d&apos;articles est désactivée.</translation>
<translation>Ce flux utilise les paramètres globaux, mais l&apos;obtention automatique globale d&apos;articles est désactivée.</translation>
</message>
<message>
<location filename="../src/librssguard/services/abstract/feed.cpp" line="304"/>
@ -1609,7 +1609,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formdatabasecleanup.cpp" line="30"/>
<source>I am ready.</source>
<translation>Je suis prêt.</translation>
<translation>Prêt à nettoyer la base de données.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formdatabasecleanup.cpp" line="76"/>
@ -1951,12 +1951,12 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="250"/>
<source>&amp;About application</source>
<translation>&amp;À propos de l&apos;application</translation>
<translation>&amp;À propos d&apos;RSS Guard</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="253"/>
<source>Displays extra info about this application.</source>
<translation>Afficher des informations supplémentaires à propos de cette application.</translation>
<translation>Afficher des informations supplémentaires à propos de l&apos;application.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="267"/>
@ -1976,7 +1976,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="281"/>
<source>Fetch all feeds</source>
<translation>Obtenir tous les flux</translation>
<translation>Obtenir des articles de tous les flux.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="289"/>
@ -1986,7 +1986,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="292"/>
<source>Fetch selected feeds</source>
<translation>Obtenir des &amp;articles des flux séléctionnés</translation>
<translation>Obtenir des articles des flux séléctionnés.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="300"/>
@ -2061,7 +2061,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="382"/>
<source>Deletes all messages from selected items.</source>
<translation>Supprime tous les messages des éléments sélectionnés.</translation>
<translation>Supprimer tous les messages des éléments sélectionnés.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="390"/>
@ -2121,7 +2121,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="454"/>
<source>Hides main window if it is visible and shows it if it is hidden.</source>
<translation>Cacher la fenêtre principale si elle est visible et la montrer si elle est cachée.</translation>
<translation>Minimiser la fenêtre principale si elle est au premier plan et la montrer si elle est minimisée.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="468"/>
@ -2141,7 +2141,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="482"/>
<source>Deletes all messages from all items.</source>
<translation>Supprime tous les messages de tous les éléments.</translation>
<translation>Supprimer tous les messages de tous les éléments.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="490"/>
@ -2151,7 +2151,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="498"/>
<source>&amp;Previous item</source>
<translation>&amp;Élément précédent</translation>
<translation>Élément &amp;précédent</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="506"/>
@ -2201,7 +2201,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="578"/>
<source>&amp;List headers</source>
<translation>Les ttypes de liste</translation>
<translation>Les types de liste</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="586"/>
@ -2216,7 +2216,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="602"/>
<source>&amp;Restart</source>
<translation>&amp;Redémarrer RSS Guard</translation>
<translation>&amp;Redémarrer RSS Guard.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="610"/>
@ -2312,7 +2312,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="760"/>
<source>Stop ongoing fetching</source>
<translation>Arrêter l&apos;obtention en cours</translation>
<translation>Arrêter l&apos;obtention en cours.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="768"/>
@ -2362,7 +2362,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="822"/>
<source>Fetch feeds with &amp;custom auto-download policy</source>
<translation>Obtenir les flux avec &amp;une politique de téléchargement automatique personnalisée</translation>
<translation>Obtenir les flux avec une politique de téléchargement automatique &amp;personnalisée</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="830"/>
@ -2427,7 +2427,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="902"/>
<source>Display application &amp;log</source>
<translation>Afficher le log de l&apos;appli</translation>
<translation>Afficher le &amp;log de l&apos;appli</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="907"/>
@ -2452,7 +2452,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="927"/>
<source>Rearrange &amp;subcategories alphabetically</source>
<translation>Réarranger les sous-catégories alphabétiquement</translation>
<translation>Réarranger les &amp;sous-catégories alphabétiquement</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="932"/>
@ -2462,7 +2462,7 @@ ou cette fonctionnalité n&apos;est pas encore implémentée.</translation>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="937"/>
<source>Cleanup web cac&amp;he</source>
<translation>Nettoyer le cac&amp;he web</translation>
<translation>Nettoyer le &amp;cache web</translation>
</message>
<message>
<location filename="../src/librssguard/gui/dialogs/formmain.ui" line="750"/>
@ -4847,12 +4847,12 @@ Expiration de jetons d&apos;authentification: %2</translation>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.cpp" line="20"/>
<source>Socks5</source>
<translation>Socks5</translation>
<translation>SOCKS5</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.cpp" line="21"/>
<source>Http</source>
<translation>Http</translation>
<translation>HTTP</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="14"/>
@ -4867,7 +4867,7 @@ Expiration de jetons d&apos;authentification: %2</translation>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="41"/>
<source>Hostname or IP of your proxy server</source>
<translation>Nom de l&apos;hôte ou IP de votre serveur proxy</translation>
<translation>Entrez le nom de l&apos;hôte ou IP de votre serveur proxy ici</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="48"/>
@ -4882,7 +4882,7 @@ Expiration de jetons d&apos;authentification: %2</translation>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="92"/>
<source>Your username for proxy server authentication</source>
<translation>Votre nom d&apos;utilisateur pour l&apos;authentification du serveur proxy</translation>
<translation>Entrez votre nom d&apos;utilisateur pour l&apos;authentification du serveur proxy ici</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="99"/>
@ -4892,12 +4892,12 @@ Expiration de jetons d&apos;authentification: %2</translation>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="118"/>
<source>Your password for proxy server authentication</source>
<translation>Votre mot de passe pour l&apos;authentification du serveur proxy</translation>
<translation>Entrez votre mot de passe pour l&apos;authentification du serveur proxy ici</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.cpp" line="12"/>
<source>Note that these settings are applied only on newly established connections.</source>
<translation>Noter que ces paramètres sont appliqués seulement sur les nouvelles connexions établies.</translation>
<translation>Noter que ces paramètres sont appliqués seulement sur les nouvelles connections établies.</translation>
</message>
<message>
<location filename="../src/librssguard/gui/reusable/networkproxydetails.ui" line="146"/>
@ -6078,7 +6078,7 @@ File filter for external e-mail selection dialog.</extracomment>
<message>
<location filename="../src/librssguard/gui/settings/settingsbrowsermail.h" line="46"/>
<source>Network &amp; web &amp; tools</source>
<translation>Réseau, web &amp; outils</translation>
<translation>&amp;Réseau, web &amp; outils</translation>
</message>
</context>
<context>
@ -6676,7 +6676,7 @@ Déscription: %3</translation>
<message>
<location filename="../src/librssguard/gui/settings/settingsgui.ui" line="186"/>
<source>Start application hidden</source>
<translation>Démarrer l&apos;application en caché</translation>
<translation>Démarrer l&apos;application minimisée</translation>
</message>
<message>
<location filename="../src/librssguard/gui/settings/settingsgui.ui" line="210"/>

View file

@ -24,13 +24,13 @@ if ($use_qt5 -eq "ON") {
$qt_version = "5.15.2"
}
else {
$qt_version = "6.4.3"
$qt_version = "6.5.2"
}
$maria_version = "10.6.12"
$maria_version = "10.6.14"
$maria_link = "https://archive.mariadb.org/mariadb-$maria_version/winx64-packages/mariadb-$maria_version-winx64.zip"
$maria_output = "maria.zip"
$cmake_version = "3.26.4"
$cmake_version = "3.27.1"
$cmake_link = "https://github.com/Kitware/CMake/releases/download/v$cmake_version/cmake-$cmake_version-windows-x86_64.zip"
$cmake_output = "cmake.zip"

View file

@ -55,8 +55,8 @@ void MessagesModelSqlLayer::addSortState(int column, Qt::SortOrder order, bool i
if (m_sortColumns.size() >= MAX_MULTICOLUMN_SORT_STATES) {
// We support only limited number of sort states
// due to DB performance.
m_sortColumns.removeAt(0);
m_sortOrders.removeAt(0);
m_sortColumns.removeLast();
m_sortOrders.removeLast();
}
if (is_ctrl_pressed && !ignore_multicolumn_sorting) {
@ -78,6 +78,15 @@ void MessagesModelSqlLayer::setFilter(const QString& filter) {
m_filter = filter;
}
SortColumnsAndOrders MessagesModelSqlLayer::sortColumnAndOrders() const {
SortColumnsAndOrders res;
res.m_columns = m_sortColumns;
res.m_orders = m_sortOrders;
return res;
}
QString MessagesModelSqlLayer::formatFields() const {
return m_fieldNames.values().join(QSL(", "));
}

View file

@ -7,6 +7,12 @@
#include <QList>
#include <QMap>
#include <QPair>
struct SortColumnsAndOrders {
QList<int> m_columns;
QList<Qt::SortOrder> m_orders;
};
class MessagesModelSqlLayer {
public:
@ -18,6 +24,8 @@ class MessagesModelSqlLayer {
// Sets SQL WHERE clause, without "WHERE" keyword.
void setFilter(const QString& filter);
SortColumnsAndOrders sortColumnAndOrders() const;
protected:
QString orderByClause() const;
QString selectStatement() const;

View file

@ -6,175 +6,176 @@
#include <QDebug>
#include <QtGlobal>
#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_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_GMAIL "gmail"
#define SERVICE_CODE_REDDIT "reddit"
#define SERVICE_CODE_NEWSBLUR "newsblur"
#define ADBLOCK_SERVER_FILE "adblock-server.js"
#define ADBLOCK_SERVER_PORT 48484
#define ADBLOCK_HOWTO APP_URL_DOCUMENTATION "#adbl"
#define ADBLOCK_ICON_ACTIVE "adblock"
#define ADBLOCK_SERVER_FILE "adblock-server.js"
#define ADBLOCK_SERVER_PORT 48484
#define ADBLOCK_HOWTO APP_URL_DOCUMENTATION "#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_REDIRECT_URI "http://localhost"
#define ENCLOSURES_OUTER_SEPARATOR '#'
#define ECNLOSURES_INNER_SEPARATOR '&'
#define URI_SCHEME_FEED_SHORT "feed:"
#define URI_SCHEME_FEED "feed://"
#define URI_SCHEME_FEED "feed://"
#define URI_SCHEME_HTTP_SHORT "http:"
#define URI_SCHEME_HTTP "http://"
#define URI_SCHEME_HTTP "http://"
#define URI_SCHEME_HTTPS_SHORT "https:"
#define URI_SCHEME_HTTPS "https://"
#define URI_SCHEME_HTTPS "https://"
#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 ID_PROBES -6
#define ID_RECYCLE_BIN -2
#define ID_IMPORTANT -3
#define ID_LABELS -4
#define ID_UNREAD -5
#define ID_PROBES -6
#define MSG_SCORE_MAX 100.0
#define MSG_SCORE_MIN 0.0
#define LOWER_TITLE_ROLE 64
#define LOWER_TITLE_ROLE 64
#define HIGHLIGHTED_FOREGROUND_TITLE_ROLE 65
#define TEXT_DIRECTION_ROLE 66
#define TEXT_DIRECTION_ROLE 66
#define SOUNDS_BUILTIN_DIRECTORY ":/sounds"
#define ARGUMENTS_LIST_SEPARATOR "\n"
#define IS_IN_ARRAY(offset, array) ((offset >= 0) && (offset < array.count()))
#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 RELEASES_LIST "https://api.github.com/repos/martinrotter/rssguard/releases"
#define MSG_FILTERING_HELP APP_URL_DOCUMENTATION "#fltr"
#define URL_REGEXP \
"^(http|https|feed|ftp):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/" \
"~\\+#])?$"
#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 900 // In seconds.
#define AUTO_UPDATE_INTERVAL 10 // In seconds.
#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 MAX_THREADPOOL_THREADS 32
#define WEB_BROWSER_SCROLL_STEP 50.0
#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 900 // In seconds.
#define AUTO_UPDATE_INTERVAL 10 // In seconds.
#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 MAX_THREADPOOL_THREADS 32
#define WEB_BROWSER_SCROLL_STEP 50.0
#define GOOGLE_SEARCH_URL "https://www.google.com/search?q=%1&ie=utf-8&oe=utf-8"
#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 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_LONG "version"
#define CLI_HELP_SHORT "h"
#define CLI_HELP_LONG "help"
#define CLI_HELP_LONG "help"
#define CLI_LOG_SHORT "l"
#define CLI_LOG_LONG "log"
#define CLI_LOG_LONG "log"
#define CLI_DAT_SHORT "d"
#define CLI_DAT_LONG "data"
#define CLI_DAT_LONG "data"
#define CLI_SIN_SHORT "s"
#define CLI_SIN_LONG "no-single-instance"
#define CLI_SIN_LONG "no-single-instance"
#define CLI_USERAGENT_SHORT "u"
#define CLI_USERAGENT_LONG "user-agent"
#define CLI_USERAGENT_LONG "user-agent"
#define CLI_ADBLOCKPORT_SHORT "p"
#define CLI_ADBLOCKPORT_LONG "adblock-port"
#define CLI_ADBLOCKPORT_LONG "adblock-port"
#define CLI_NSTDOUTERR_SHORT "n"
#define CLI_NSTDOUTERR_LONG "no-standard-output"
#define CLI_NSTDOUTERR_LONG "no-standard-output"
#define CLI_STYLE_SHORT "t"
#define CLI_STYLE_LONG "style"
#define CLI_STYLE_LONG "style"
#define CLI_NDEBUG_SHORT "g"
#define CLI_NDEBUG_LONG "no-debug-output"
#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_LONG "no-web-engine"
#define CLI_QUIT_INSTANCE "q"
#define CLI_IS_RUNNING "a"
#define CLI_IS_RUNNING "a"
#define CLI_THREADS "threads"
#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_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_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 \
@ -187,49 +188,49 @@
QByteArrayLiteral(APP_USERAGENT))
#endif
#define INTERNAL_URL_MESSAGE "http://rssguard.message"
#define INTERNAL_URL_BLANK "http://rssguard.blank"
#define INTERNAL_URL_INFO "http://rssguard.info"
#define INTERNAL_URL_ADBLOCKED "http://rssguard.adblocked"
#define INTERNAL_URL_MESSAGE "http://rssguard.message"
#define INTERNAL_URL_BLANK "http://rssguard.blank"
#define INTERNAL_URL_INFO "http://rssguard.info"
#define INTERNAL_URL_ADBLOCKED "http://rssguard.adblocked"
#define INTERNAL_URL_MESSAGE_HOST "rssguard.message"
#define FEED_REGEX_MATCHER "<link[^>]+type=\"application\\/(?:atom\\+xml|rss\\+xml|feed\\+json|json)\"[^>]*>"
#define FEED_REGEX_MATCHER "<link[^>]+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_ALL_COUNTS "%all"
#define BACKUP_NAME_SETTINGS "config"
#define BACKUP_NAME_SETTINGS "config"
#define BACKUP_SUFFIX_SETTINGS ".ini.backup"
#define BACKUP_NAME_DATABASE "database"
#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_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_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 "7"
#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_SCHEMA_VERSION "7"
#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_BLOB_PLACEHOLDER "^^"
#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_USER_FOLDER "skins"
#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) && !defined(FORCE_BUNDLE_ICONS)
#define APP_THEME_DEFAULT ""
@ -248,76 +249,76 @@
#endif
#define APP_LOCAL_ICON_THEME_FOLDER "icons"
#define APP_NO_THEME ""
#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_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_FEED_IS_RTL_INDEX 17
#define MSG_DB_HAS_ENCLOSURES 18
#define MSG_DB_LABELS 19
#define MSG_DB_LABELS_IDS 20
#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_FEED_IS_RTL_INDEX 17
#define MSG_DB_HAS_ENCLOSURES 18
#define MSG_DB_LABELS 19
#define MSG_DB_LABELS_IDS 20
// 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_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_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_IS_QUIET_INDEX 11
#define FDS_DB_IS_RTL_INDEX 12
#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_IS_QUIET_INDEX 11
#define FDS_DB_IS_RTL_INDEX 12
#define FDS_DB_ADD_ANY_DATETIME_ARTICLES_INDEX 13
#define FDS_DB_DATETIME_TO_AVOID_INDEX 14
#define FDS_DB_OPEN_ARTICLES_INDEX 15
#define FDS_DB_ACCOUNT_ID_INDEX 16
#define FDS_DB_CUSTOM_ID_INDEX 17
#define FDS_DB_CUSTOM_DATA_INDEX 18
#define FDS_DB_DATETIME_TO_AVOID_INDEX 14
#define FDS_DB_OPEN_ARTICLES_INDEX 15
#define FDS_DB_ACCOUNT_ID_INDEX 16
#define FDS_DB_CUSTOM_ID_INDEX 17
#define FDS_DB_CUSTOM_DATA_INDEX 18
// Indexes of columns for feed models.
#define FDS_MODEL_TITLE_INDEX 0
#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_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_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"
@ -343,18 +344,18 @@
// Paths.
#define APP_THEME_PATH QSL(":/graphics")
#define APP_SQL_PATH QSL(":/sql")
#define APP_INFO_PATH QSL(":/text")
#define APP_SQL_PATH QSL(":/sql")
#define APP_INFO_PATH QSL(":/text")
#define APP_ICON_PATH QSL(":/graphics/rssguard.png")
#define APP_ICON_PATH QSL(":/graphics/rssguard.png")
#define APP_ICON_PLAIN_PATH QSL(":/graphics/rssguard_plain.png")
#define APP_ICON_MONO_PATH QSL(":/graphics/rssguard_mono.png")
#define APP_ICON_MONO_PATH QSL(":/graphics/rssguard_mono.png")
#define APP_ICON_MONO_PLAIN_PATH QSL(":/graphics/rssguard_plain_mono.png")
#define APP_SKIN_PATH QSL(":/skins")
#define APP_SKIN_PATH QSL(":/skins")
#define APP_INITIAL_FEEDS_PATH QSL(":/initial_feeds")
#define APP_LANG_PATH QSL(":/localization")
#define APP_LANG_PATH QSL(":/localization")
#if defined(Q_OS_UNIX) && !defined(Q_OS_MACOS)
#define APP_DESKTOP_ENTRY_FILE "rssguard.desktop.in"
@ -366,10 +367,10 @@
// Source code specific enhancements.
//
#if QT_VERSION >= 0x050E00 // Qt >= 5.14.0
#define FROM_STD_LIST(x, y) (x(y.begin(), y.end()))
#define FROM_STD_LIST(x, y) (x(y.begin(), y.end()))
#define FROM_LIST_TO_SET(x, y) (x(y.begin(), y.end()))
#else
#define FROM_STD_LIST(x, y) (x::fromStdList(y))
#define FROM_STD_LIST(x, y) (x::fromStdList(y))
#define FROM_LIST_TO_SET(x, y) (x::fromList(y))
#endif
@ -390,11 +391,11 @@
#endif
#define NONQUOTE_W_SPACE_DOT(x) " " << (x) << "."
#define NONQUOTE_W_SPACE(x) " " << (x) << " "
#define QUOTE_W_SPACE_DOT(x) " '" << (x) << "'."
#define QUOTE_W_SPACE_COMMA(x) " '" << (x) << "',"
#define QUOTE_W_SPACE(x) " '" << (x) << "' "
#define QUOTE_NO_SPACE(x) "'" << (x) << "'"
#define NONQUOTE_W_SPACE(x) " " << (x) << " "
#define QUOTE_W_SPACE_DOT(x) " '" << (x) << "'."
#define QUOTE_W_SPACE_COMMA(x) " '" << (x) << "',"
#define QUOTE_W_SPACE(x) " '" << (x) << "' "
#define QUOTE_NO_SPACE(x) "'" << (x) << "'"
#ifndef QSL

View file

@ -105,6 +105,10 @@ void FeedMessageViewer::loadSize() {
if (!settings_msg_header.isEmpty()) {
m_messagesView->restoreHeaderState(QByteArray::fromBase64(settings_msg_header.toLocal8Bit()));
}
else {
// Set default sort column.
m_messagesView->header()->setSortIndicator(MSG_DB_DCREATED_INDEX, Qt::SortOrder::DescendingOrder);
}
}
void FeedMessageViewer::loadMessageViewerFonts() {

View file

@ -23,6 +23,7 @@
#include <QClipboard>
#include <QFileIconProvider>
#include <QJsonObject>
#include <QKeyEvent>
#include <QMenu>
#include <QProcess>
@ -58,7 +59,33 @@ void MessagesView::reloadFontSettings() {
}
QByteArray MessagesView::saveHeaderState() const {
QByteArray arr;
QJsonObject obj;
obj[QSL("header_count")] = header()->count();
// Store column attributes.
for (int i = 0; i < header()->count(); i++) {
obj[QSL("header_%1_idx").arg(i)] = header()->visualIndex(i);
obj[QSL("header_%1_size").arg(i)] = header()->sectionSize(i);
obj[QSL("header_%1_hidden").arg(i)] = header()->isSectionHidden(i);
}
// Store sort attributes.
SortColumnsAndOrders orders = m_sourceModel->sortColumnAndOrders();
obj[QSL("sort_count")] = orders.m_columns.size();
for (int i = 0; i < orders.m_columns.size(); i++) {
obj[QSL("sort_%1_order").arg(i)] = orders.m_orders.at(i);
obj[QSL("sort_%1_column").arg(i)] = orders.m_columns.at(i);
}
return QJsonDocument(obj).toJson(QJsonDocument::JsonFormat::Compact);
/*
*
*
QByteArray arr;
QDataStream outt(&arr, QIODevice::OpenModeFlag::WriteOnly);
outt.setVersion(QDataStream::Version::Qt_4_7);
@ -74,9 +101,55 @@ QByteArray MessagesView::saveHeaderState() const {
}
return arr;
*/
}
void MessagesView::restoreHeaderState(const QByteArray& dta) {
QJsonObject obj = QJsonDocument::fromJson(dta).object();
int saved_header_count = obj[QSL("header_count")].toInt();
if (saved_header_count < header()->count()) {
qWarningNN << LOGSEC_GUI << "Detected invalid state for list view.";
return;
}
// Restore column attributes.
for (int i = 0; i < saved_header_count && i < header()->count(); i++) {
int vi = obj[QSL("header_%1_idx").arg(i)].toInt();
int ss = obj[QSL("header_%1_size").arg(i)].toInt();
bool ish = obj[QSL("header_%1_hidden").arg(i)].toBool();
if (vi < header()->count()) {
header()->swapSections(header()->visualIndex(i), vi);
}
header()->resizeSection(i, ss);
header()->setSectionHidden(i, ish);
}
// Restore sort attributes.
int saved_sort_count = obj[QSL("sort_count")].toInt();
for (int i = saved_sort_count - 1; i > 0; i--) {
auto col = obj[QSL("sort_%1_column").arg(i)].toInt();
auto ordr = Qt::SortOrder(obj[QSL("sort_%1_order").arg(i)].toInt());
if (col < header()->count()) {
m_sourceModel->addSortState(col, ordr, false);
}
}
// Use newest sort as active.
if (saved_sort_count > 0) {
auto newest_col = obj[QSL("sort_0_column")].toInt();
auto newest_ordr = Qt::SortOrder(obj[QSL("sort_0_order")].toInt());
if (newest_col < header()->count()) {
header()->setSortIndicator(newest_col, newest_ordr);
}
}
/*
QByteArray arr = dta;
QDataStream inn(&arr, QIODevice::OpenModeFlag::ReadOnly);
@ -116,6 +189,7 @@ void MessagesView::restoreHeaderState(const QByteArray& dta) {
if (saved_sort_column < header()->count()) {
header()->setSortIndicator(saved_sort_column, Qt::SortOrder(saved_sort_order));
}
*/
}
void MessagesView::copyUrlOfSelectedArticles() const {

View file

@ -66,6 +66,7 @@ class MessagesView : public BaseTreeView {
Qt::CaseSensitivity sensitivity,
int custom_criteria,
const QString& phrase);
void highlightMessages(MessagesModel::MessageHighlighter highlighter);
void changeFilter(MessagesProxyModel::MessageListFilter filter);