diff --git a/.clang-format b/.clang-format
index a8cbff089..6e95e1463 100644
--- a/.clang-format
+++ b/.clang-format
@@ -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
diff --git a/localization/rssguard_de.ts b/localization/rssguard_de.ts
index 4e7ac5b16..06dd2910f 100644
--- a/localization/rssguard_de.ts
+++ b/localization/rssguard_de.ts
@@ -1029,12 +1029,12 @@ Item ID: %5
Cannot edit item
- Kann den Eintrag nicht bearbeiten
+ Kann das Element nicht bearbeiten
Cannot delete item
- Eintrag kann nicht gelöscht werden
+ Element kann nicht gelöscht werden
@@ -1070,7 +1070,7 @@ Item ID: %5
You are about to completely delete item "%1".
- Eintrag "%1" soll gelöscht werden.
+ Du wirst das Element "%1" vollständig löschen.
@@ -1440,7 +1440,7 @@ or this functionality is not implemented yet.
Items to backup
- Dateien zur Sicherung
+ Elemente zur Sicherung
@@ -1763,7 +1763,7 @@ or this functionality is not implemented yet.
Fetch articles using global interval
- Hole Nachrichten nach globalem Intervall
+ Lade Nachrichten nach globalem Intervall
@@ -1979,12 +1979,12 @@ or this functionality is not implemented yet.
Fetch &selected
- Hole @ausgewählte
+ Lade @ausgewählte
Fetch selected feeds
- Hole ausgewählte Feeds
+ Lade ausgewählte Feeds
@@ -2310,7 +2310,7 @@ or this functionality is not implemented yet.
Stop ongoing fetching
- Holen von Artikel abbrechen
+ Laden von Artikeln abbrechen
@@ -2360,7 +2360,7 @@ or this functionality is not implemented yet.
Fetch feeds with &custom auto-download policy
- Hole mit &benutzerdefinierter auto-download Strategie
+ Lade mit &benutzerdefinierter auto-download Strategie
@@ -2491,7 +2491,7 @@ or this functionality is not implemented yet.
Fetching common data
- Hole gemeinsame Daten
+ Lade gemeinsame Daten
@@ -3545,7 +3545,7 @@ Ablauf des Login tokens: %2
URL of your server, without any service-specific path
-
+ URL deines Servers, ohne irgendeinen Service spezifischen Pfad
@@ -3570,7 +3570,7 @@ Ablauf des Login tokens: %2
You are good to go!
-
+ Du bist nun startklar!
@@ -3610,7 +3610,7 @@ Ablauf des Login tokens: %2
Some feeds might contain tens of thousands of articles and downloading all of them could take great amount of time, so sometimes it is good to download only certain amount of newest messages.
-
+ Manche Feeds könnten zehntausende Artikel enthalten und all diese herunterzuladen könnte längere Zeit benötigen, deshalb ist es manchmal good, nur einen gewissen Zeitraum zu laden.
@@ -3620,7 +3620,7 @@ Ablauf des Login tokens: %2
There are some preconfigured OAuth tokens so you do not have to fill in your client ID/secret, but it is strongly recommended to obtain your own as preconfigured tokens have limited global usage quota. If you wish to use preconfigured tokens, simply leave all above fields to their default values even if they are empty.
-
+ Wir haben einige vorkonfigurierte OAuth Token, damit du deine eigene ID nicht angeben musst, allerdings ist es empfohlen, eine eigene zu erstellen, da unsere Token quotiert sind. Um die vorkonfigurierten Token zu verwenden, lasse alle obigen Felder in ihren Standardwerten, selbst wenn sie leer sind.
@@ -3736,7 +3736,7 @@ Ablauf des Login tokens: %2
Get my own App ID
-
+ Erhalte meine eigene App ID
@@ -3786,7 +3786,7 @@ Ablauf des Login tokens: %2
Other services
-
+ Andere Dienste
@@ -3794,7 +3794,7 @@ Ablauf des Login tokens: %2
View more information on this
-
+ Sehe mehr Informationen darüber
@@ -3820,7 +3820,7 @@ Ablauf des Login tokens: %2
You can find all important articles here.
-
+ Du kannst alle wichtigen Artikel hier finden.
@@ -3834,7 +3834,7 @@ Ablauf des Login tokens: %2
TextLabel
-
+ TextLabel
@@ -3842,12 +3842,12 @@ Ablauf des Login tokens: %2
Labels
-
+ Label
No labels found
-
+ Keine Label gefunden
@@ -3855,12 +3855,12 @@ Ablauf des Login tokens: %2
Labels
-
+ Label
You can see all your labels (tags) here.
-
+ Du kannst all eine Label (Tags) hier sehen.
@@ -3870,7 +3870,7 @@ Ablauf des Login tokens: %2
This account does not allow you to create labels.
-
+ Dieser Zugang erlaubt es dir nicht, Label zu erstellen
@@ -3891,103 +3891,103 @@ Ablauf des Login tokens: %2
Paragraph formatting
-
+ Paragraph Formatierung
Undo (CTRL+Z)
-
+ Rückgängig (Strg-Z)
Undo
-
+ Rückgängig
Redo
-
+ Wiederherstellen
Cut (CTRL+X)
-
+ Ausschneiden (Ctrl-X)
Cut
-
+ Ausschneiden
Copy (CTRL+C)
-
+ Kopieren (Strg-C)
Copy
-
+ Kopieren
Paste (CTRL+V)
-
+ Einfügen (Ctrl-V)
Paste
-
+ Einfügen
Link (CTRL+L)
-
+ Verlinke (Strg-L)
Link
-
+ Verlinke
Bold
-
+ Fett
Italic (CTRL+I)
-
+ Kursiv (Strg-I)
Italic
-
+ Kursiv
Underline (CTRL+U)
-
+ Unterstreichen (Ctrl-U)
Underline
-
+ Unterstreichen
Strike Out
-
+ Durchstreichen
Bullet list (CTRL+-)
-
+ Aufzählungsliste (Ctrl+-)
Bullet list
-
+ Aufzählungsliste
@@ -4002,43 +4002,43 @@ Ablauf des Login tokens: %2
Decrease indentation (CTRL+,)
-
+ Einrückung verringern (Strg+,)
Decrease indentation
-
+ Einrückung verringern
Increase indentation (CTRL+.)
-
+ Einrückung erhöhen (Ctrl+.)
Increase indentation
-
+ Einrückung erhöhen
Text foreground color
-
+ Vordergrundfarbe
.
-
+ .
Text background color
-
+ Text-Hintergrundfarbe
Font size
-
+ Textgröße
@@ -4048,77 +4048,77 @@ Ablauf des Login tokens: %2
Standard
-
+ Standard
Heading 1
-
+ Titel 1
Heading 2
-
+ Titel 2
Heading 3
-
+ Titel 3
Heading 4
-
+ Titel 4
Monospace
-
+ Nichtproportionale Schriftart
Remove character formatting
-
+ Entferne Zeichenformatierung
Remove all formatting
-
+ Entferne alle Formatierungen
Edit document source
-
+ Bearbeite Dokument Quelltext
Clear all content
-
+ Gesamten Inhalt löschen
Document source
-
+ Dokument Quelltext
Create a link
-
+ Erstelle einen Link
Link URL:
-
+ Link URL:
Select an image
-
+ Wähle ein Bild
JPEG (*.jpg);; GIF (*.gif);; PNG (*.png);; BMP (*.bmp);; All (*)
-
+ JPEG (*.jpg);; GIF (*.gif);; PNG (*.png);; BMP (*.bmp);; All (*)
@@ -4146,12 +4146,12 @@ Ablauf des Login tokens: %2
Unknown error: '%1'.
-
+ Unbekannter Fehler: '%1'.
MariaDB
-
+ MariaDB
@@ -4212,7 +4212,7 @@ Ablauf des Login tokens: %2
article
-
+ Artikel
@@ -4235,7 +4235,7 @@ Ablauf des Login tokens: %2
Switch article importance
-
+ Wechsle Wichtigkeit des Artikels
@@ -4261,7 +4261,7 @@ Ablauf des Login tokens: %2
In recycle bin
-
+ Im Papierkorb
@@ -4281,7 +4281,7 @@ Ablauf des Login tokens: %2
Score
-
+ Bewertung
@@ -4379,7 +4379,7 @@ Ablauf des Login tokens: %2
Score
-
+ Bewertung
@@ -4389,47 +4389,47 @@ Ablauf des Login tokens: %2
Loading of articles failed, maybe messages could not be downloaded.
-
+ Laden der Artikel gescheitert, vielleicht konnten Nachrichten nicht heruntergeladen werden.
dot
-
+ Punkt
envelope
-
+ Umschlag
feed icon
-
+ Feed Symbol
RTL
-
+ RTL
Assigned labels
-
+ Zugeordnete Label
Assigned label IDs
-
+ Zugeordnete Label IDs
ID of the article.
-
+ ID des Artikel.
Is article read?
-
+ Ist Artikel gelesen?
@@ -4439,32 +4439,32 @@ Ablauf des Login tokens: %2
Is article deleted?
-
+ Ist Artikel gelöscht?
Is article permanently deleted from recycle bin?
-
+ Ist Artikel permanent vom Papierkorb gelöscht?
ID of feed which this article belongs to.
-
+ ID des Feeds, dem dieser Artikel gehört
Title of the article.
-
+ Titel des Artikels.
Url of the article.
-
+ URL des Artikel.
Author of the article.
-
+ Autor des Artikel.
@@ -4474,92 +4474,92 @@ Ablauf des Login tokens: %2
Contents of the article.
-
+ Inhalt des Artikel.
Score of the article.
-
+ Bewertung des Artikel.
Account ID of the article.
-
+ Zugangs ID des Artikel.
Custom ID of the article.
-
+ Spezifische ID des Artikel.
Custom hash of the article.
-
+ Spezifischer Hash des Artikel.
Name of feed of the article.
-
+ Name und Feed des Artikel.
Indication of enclosures presence within the article.
-
+ Hinweis auf Anlagen innerhalb des Artikels.
Layout direction of the article
-
+ Layout Richtung des Artikel
Labels assigned to the article.
-
+ Zugewiesene Label des Artikel
Label IDs assigned to the article.
-
+ Zugewiesene Label IDs des Artikel
%n months ago
-
+ vor einem Monat vor %n Monate
%n weeks ago
-
+ vor einer Wochevor %n Wochen
%n days ago
-
+ vor einem Tagvor %n Tagen
yesterday
-
+ Gestern
%n hours ago
-
+ vor einer Stundevor %n Stunden
%n minutes ago
-
+ vor einer Minutevor %n Minuten
just now
-
+ Gerade eben
Loading of articles from item '%1' failed
-
+ Laden von Artikel des Element '%1' fehlgeschlagen
@@ -4587,103 +4587,103 @@ Ablauf des Login tokens: %2
Search articles
-
+ Suche Artikel
Article search box
-
+ Artikel Suchbox
Menu for highlighting articles
-
+ Menü um Artikel hervorzuheben
Highlight unread articles
-
+ Hebe ungelesene Artikel hervor
Highlight important articles
-
+ Hebe wichtige Artikel hervor
Menu for filtering articles
-
+ Menü um Artikel zu filtern
No extra filtering
-
+ Keine extra Filterung
Show unread articles
-
+ Zeige ungelesene Artikel
Show important articles
-
+ Zeige wichtige Artikel
Show today's articles
-
+ Zeige heutige Artikel
Show yesterday's articles
-
+ Zeige Artikel von gestern
Show articles in last 24 hours
-
+ Zeige Artikel der letzten 24 Stunden
Show articles in last 48 hours
-
+ Zeige Artikel der letzten 48 Stunden
Show this week's articles
-
+ Zeige Artikel dieser Woche
Show last week's articles
-
+ Zeige Artikel letzter Woche
Show articles with attachments
-
+ Zeige Artikel mit Anhänge
Show articles with some score
-
+ Zeige Artikel mit Bewertungen
Display all articles
-
+ Zeige alle Artikel
Article highlighter
-
+ Artikelmarker
Article list filter
-
+ Artikel Filterliste
@@ -4716,12 +4716,12 @@ Ablauf des Login tokens: %2
No external tools activated
-
+ Keine externen Werkzeuge aktiviert
Context menu for articles
-
+ Kontextmenü für Artikel
@@ -4804,7 +4804,7 @@ Ablauf des Login tokens: %2
unknown error (%1)
Network status.
-
+ Unbekannter Fehler (%1)
@@ -4953,7 +4953,7 @@ Ablauf des Login tokens: %2
URL of your server, without any service-specific path
-
+ URL deines Servers, ohne irgendeinen Service spezifischen Pfad
@@ -4968,12 +4968,12 @@ Ablauf des Login tokens: %2
Some feeds might contain tens of thousands of articles and downloading all of them could take great amount of time, so sometimes it is good to download only certain amount of newest messages.
-
+ Manche Feeds könnten zehntausende Artikel enthalten und all diese herunterzuladen könnte längere Zeit benötigen, deshalb ist es manchmal good, nur einen gewissen Zeitraum zu laden.
You are good to go!
-
+ Du bist nun startklar!
@@ -4988,7 +4988,7 @@ Ablauf des Login tokens: %2
Network error, have you entered correct username and password?
-
+ Netzwerkfehler. Hast du einen korrekten Benutzernamen und Passwort eingegeben?
@@ -4998,7 +4998,7 @@ Ablauf des Login tokens: %2
Error, have you entered correct Nextcloud endpoint and password?
-
+ Fehler. Hast du einen korrekten Nextcloud Endpunkt und Passwort angegeben?
@@ -5036,17 +5036,17 @@ Ablauf des Login tokens: %2
Show more articles (%n remaining)
-
+ Zeige mehr Artikel (einer verbleibend)Zeige mehr Artikel (%n verbleibend)
Cannot show more articles
-
+ Kann nicht mehr Artikel anzeigen
Cannot show more articles because parent feed was removed.
-
+ Kann nicht mehr Artikel anzeigen, weil der Eltern Feed entfernt wurde.
@@ -5055,7 +5055,7 @@ Ablauf des Login tokens: %2
file not found
-
+ Datei nicht gefunden
@@ -5083,12 +5083,12 @@ Ablauf des Login tokens: %2
You can close this window now. Go back to %1.
-
+ Du kannst dieses Fenster nun schließen. Gehe zurück zu %1.
Failed to start OAuth redirection listener. Maybe your rights are not high enough.
-
+ Kann OAuth-Weiterleitungs-Erkennung nicht starten. Vielleicht hast du nicht die notwendige Berechtigung.
@@ -5116,7 +5116,7 @@ Ablauf des Login tokens: %2
URL of your Nextcloud server, without any API path
-
+ URL des Nextcloud Servers, ohne irgendeinen API Pfad
@@ -5152,7 +5152,7 @@ Ablauf des Login tokens: %2
Selected Nextcloud News server is running unsupported version.
-
+ Ausgewählter Nextcloud Server läuft auf einer nicht unterstützten Version.
@@ -5243,7 +5243,7 @@ Ablauf des Login tokens: %2
Force execution of server-side feeds update
-
+ Erzwinge Ausführung von serverseitigen Feed Aktualisierungen
@@ -5251,7 +5251,7 @@ Ablauf des Login tokens: %2
cannot get list of feeds, network error '%1'
-
+ Kann Liste der Feeds nicht laden, Netzwerkfehler '%1'
@@ -5332,134 +5332,138 @@ Das API muss mindestens in Stufe %1 verfügbar sein.
Keep up with the topics and trends you care about, without the overwhelm.
Feedly is a secure space where you can privately organize and research the topics and trends that matter to you.
-
+ Bleibe up-to-date mit den Themen und Artikel die dich interessieren, ohne überwältigt zu werden.
+
+Feedly ist ein sicherer Ort, wo du privat Themen organisieren und nachforschen kannst, die für dich relevant sind.
Cannot insert article filter, because current database cannot return last inserted row ID.
-
+ Kann Artikelfilter nicht einfügen, weil die Datenbank die zuletzt hinzugefügte Zeile nicht zurückgeben kann.
Fetching articles right now
-
+ Hole Artikel jetzt gerade
Login data refreshed
-
+ Login Daten aufgefrischt
New %1 version is available
-
+ Neue %1 Version ist verfügbar
Miscellaneous events
-
+ Sonstiges Ereignis
Node.js - package(s) updated
-
+ Node.js - Paket(e) aktualisiert
Node.js - package(s) failed to update
-
+ Node.js - Paket(e) konnten nicht aktualisiert werden
Unknown event
-
+ Unbekanntes Ereignis
New (unread) articles fetched
-
+ Neuer (ungelesener) Artikel geladen
XML problem: %1
-
+ XML Problem: %1
JSON problem: %1
-
+ JSON Problem: %1
Google Reader API is used by many online RSS readers.
List of supported readers:
-
+ Google Reader API wird von vielen anderen RSS Lesern verwendet.
+
+Liste aller unterstützten Leser:
Login failed
-
+ Anmelden fehlgeschlagen
This service offers integration with standard online RSS/RDF/ATOM/JSON feeds and podcasts.
-
+ Dieser Dienst bietet Integration mit Standard online RSS/RDF/ATOM/JSON Feeds und Podcasts.
Simplistic Reddit client.
-
+ Einfacher Reddit Client
interesting stuff
-
+ Interessantes
interesting stuff (highlighted)
-
+ Interessantes (hervorgehoben)
errored items
-
+ Fehlgeschlagene Elemente
errored items (highlighted)
-
+ Fehlgeschlagene Elemente (hervorgehoben)
items with new articles
-
+ Elemente mit neuen Artikeln
items with new articles (highlighted)
-
+ Elemente mit neuen Artikeln (hervorgehoben)
OK-ish color
-
+ OK-ische Farbe
User-published articles
-
+ Benutzer-veröffentlichte Artikel
Published articles
-
+ Veröffentlichte Artikel
Personal news reader bringing people together to talk about the world.
-
+ Persönlicher Nachrichtenleser bringt Menschen zusammen um über die Welt zu sprechen.
@@ -5467,17 +5471,17 @@ List of supported readers:
Packages for reader mode are installed
-
+ Pakete für Lesemodus sind installiert
You can now use reader mode!
-
+ Du kannst jetzt den Lesemodus verwenden!
Packages for reader mode are NOT installed
-
+ Pakete für Lesemodus sind NICHT installiert
@@ -5488,17 +5492,17 @@ List of supported readers:
Node.js libraries not installed
-
+ Node.js Bibliothek nicht installiert
%1 will now install some needed libraries, this will take only a few seconds. You will be notified when installation is complete.
-
+ %1 wird jetzt neue Bibliotheken installieren. Dies wird nur ein paar Sekunden dauern. Du wirst benachrichtigt wenn die Installation abgeschlossen wurde.
Node.js is not configured properly. Go to "Settings" -> "Node.js" and check if your Node.js is properly configured.
-
+ Node.js ist nicht korrekt konfiguriert. Gehe zu "Einstellungen" -> "Node.js" und stelle sicher, dass Node.js korrekt konfiguriert ist.
@@ -5526,17 +5530,17 @@ List of supported readers:
Do you really want to empty your recycle bin?
-
+ Willst du wirklich deinen Papierkorb leeren?
Recycle bin contains all deleted articles from all feeds.
-
+ Im Papierkorb sind alle gelöschten Artikel aller Feeds.
%n deleted article(s).
-
+ Ein gelöschter Artikel%n gelöschte Artikel
@@ -5659,7 +5663,7 @@ List of supported readers:
Subscriptions
-
+ Abonnement
@@ -5674,7 +5678,7 @@ List of supported readers:
Reddit: authentication error
-
+ Reddit: Authentifizierungsfehler
@@ -5690,7 +5694,7 @@ List of supported readers:
Reddit: authorization denied
-
+ Reddit: Authentifizierung verweigert
@@ -5724,7 +5728,7 @@ Ablauf des Login tokens: %2
%n unread article(s).
Tooltip for "unread" column of feed list.
-
+ Ein ungelesener Artikel.%n ungelesene Artikel.
@@ -5732,22 +5736,22 @@ Ablauf des Login tokens: %2
script line is not well-formed
-
+ Befehlszeile ist nicht gut formatiert
script threw an error
-
+ Skript hat einen Fehler zurückgegeben
script's interpreter was not found
-
+ Interpreter des Skriptes wurde nicht gefunden
script execution took too long
-
+ Ausführung des Skriptes dauerte zu lange
@@ -5760,17 +5764,17 @@ Ablauf des Login tokens: %2
Case-sensitive
-
+ Groß / Kleinschreibung beachtend
Fixed text
-
+ Fixierter Text
Wildcard
-
+ Platzhalter
@@ -5783,7 +5787,7 @@ Ablauf des Login tokens: %2
Search text
-
+ Suchtext
@@ -5801,17 +5805,17 @@ Ablauf des Login tokens: %2
Article probes
-
+ Artikelproben
You can see all your permanent article probes here.
-
+ Du kannst all deine permanenten Artikelproben hier einsehen.
New article probe
-
+ Neue Artikelprobe
@@ -5819,28 +5823,29 @@ Ablauf des Login tokens: %2
Synchronize folders && other items
-
+ Synchronisiere Ordner && andere Elemente
Synchronize article cache
-
+ Synchronisiere Artikel Zwischenspeicher
Number of feeds: %1
Number of categories: %2
-
+ Anzahl der Feeds: %1
+Anzahl der Kategorien: %2
Error when fetching list of feeds
-
+ Fehler beim laden der Feedliste
Feeds & categories for account '%1' were not fetched, error: %2
-
+ Feeds & Kategorien für Zugang "%1" wurden nicht geladen, Fehler: %2
@@ -5885,7 +5890,7 @@ File filter for external e-mail selection dialog.
Enter (optional) parameters:
-
+ Gebe (optionale) Parameter ein:
@@ -5900,27 +5905,27 @@ File filter for external e-mail selection dialog.
Do not accept any incoming cookies
-
+ Akzeptiere keine ankommenden Cookies
Enable HTTP/2
-
+ Aktiviere HTTP/2
WebEngine
-
+ WebEngine
Custom "QTWEBENGINE_CHROMIUM_FLAGS" flags
-
+ Benutzerdefinierte "QTWEBENGINE_CHROMIUM_FLAGS"
Disable cache
-
+ Deaktiviere Zwischenspeicher
@@ -5930,7 +5935,7 @@ File filter for external e-mail selection dialog.
Always open hyperlinks in external web browser
-
+ Immer Links im externen Browser öffnen
@@ -5970,7 +5975,7 @@ File filter for external e-mail selection dialog.
Parameters passed to executable
-
+ Übergebene Anwendungsparameter
@@ -6158,7 +6163,17 @@ Disadvantages:
• application startup and shutdown can take little longer (max. 2 seconds).
Authors of this application are NOT responsible for lost data.
-
+ Die Verwendung einer Datenbank im Arbeitsspeicher bietet einige Vor-, aber auch einige Nachteile. Nutzer sollten sich vor der Verwendung über beide bewusst sein.
+
+Vorteile:
+• höhere Geschwindigkeit bei Manipulationen an Feeds oder Nachrichten (insbesondere, wenn beide schon in großer Zahl vorliegen)
+• Entlastung für Hardware wie Festplatte oder SDD
+
+Nachteile:
+• bei einem Absturz der Anwendung gehen sämtliche Daten der aktuellen Sitzung verloren
+• Starten und Beenden der Anwendung dauern etwas länger (max. 2sec)
+
+Die Autoren dieser Anwendung sind NICHT für Datenverlust verantwortlich.
@@ -6259,12 +6274,12 @@ Authors of this application are NOT responsible for lost data.
Enter format for count of articles displayed next to each feed/category in feed list. Use "%all" and "%unread" strings which are placeholders for the actual count of all (or unread) articles.
-
+ Geben Sie das Format der Zählweise ein, mit der die Anzahl (un-) gelesener Nachrichten innerhalb der Liste von Kategorien und Feeds angezeigt wird. Die Platzhalter "%all" und "%unread" können für die Zahl aller bzw. der ungelesenen Nachrichten verwendet werden.
Note that enabling this might have drastic consequences on performance of article list with big number of articles.
-
+ Beachte, dass die Aktivierung dieser Option eine drastische Auswirkung auf die Geschwindigkeit von Artikellisten mit einer hohen Anzahl an Artikeln haben kann.
@@ -6329,13 +6344,13 @@ Authors of this application are NOT responsible for lost data.
Feeds list
-
+ Feed Liste
Row height
-
+ Zeilenhöhe
@@ -6359,22 +6374,22 @@ Authors of this application are NOT responsible for lost data.
Article count format
-
+ Format der Artikelanzahl
Hide article counts if there are no unread articles
-
+ Verstecke Anzahl der Artikel wenn keine ungelesenen Artikel vorhanden sind
Allow only basic keyboard shortcuts for feed/article list
-
+ Erlaube nur grundlegende Tastaturkürzel für Feed / Artikelliste
Display tooltips for feeds and articles
-
+ Zeige Kurzinfo für Feeds und Artikel
@@ -6384,72 +6399,72 @@ Authors of this application are NOT responsible for lost data.
Remove all read articles from all feeds on application exit
-
+ Entferne alle gelesenen Artikel von allen Feeds wenn Anwendung geschlossen wird
Ignore changes in article body when new articles are being fetched
-
+ Ignoriere Änderungen in Artikelkörper, wenn neue Artikel geladen werden
Internal article viewer
-
+ Interner Artikelbetrachter
Unread article icon type
-
+ Ungelesene Artikel Symboltyp
Bring application window to front once article is opened in external web browser
-
+ Hole das Anwendungsfenster in den Vordergrund, nachdem Artikel im externen Browser geöffnet wurde
Article browser font
-
+ Artikelbetrachter Schriftart
Fixup date/time of articles which are in the future
-
+ Korrigiere Datum/Zeit von Artikeln welche in der Zukunft sind
Display attachments directly in article
-
+ Zeige Anhänge direkt im Artikel
Limit height of pictures
-
+ Limitiere die Höhe der Bilder
Keep article viewer always visible
-
+ Halte Artikelbetrachter immer sichtbar
Articles list
-
+ Artikelliste
Keep article selection in the middle of the article list viewport
-
+ Behalte Artikelauswahl in der Mitte der Ansicht der Artikelliste
Enable multiline items
-
+ Aktiviere Mehrfachzeilen-Elemente
Top/bottom row padding
-
+ Padding der Zeile oben/unten
@@ -6459,7 +6474,7 @@ Authors of this application are NOT responsible for lost data.
Custom date/time format for today's articles
-
+ Benutzerdefiniertes Zeit / Datumsformat für heutige Artikel
@@ -6469,7 +6484,7 @@ Authors of this application are NOT responsible for lost data.
Show relative time for articles not older than
-
+ Zeige relative Zeit für Artikel welche nicht älter sind als
@@ -6492,7 +6507,7 @@ Authors of this application are NOT responsible for lost data.
Check for %1 updates on application startup
-
+ Prüfe auf %1 Aktualisierungen beim Start der Anwendung
@@ -6566,7 +6581,7 @@ Authors of this application are NOT responsible for lost data.
You can override some colors defined by your skin here. Some colors are used dynamically throughout the application.
-
+ Du kannst hier Farben überschreiben, welche von deinem Skin definiert wurden. Manche Farben werden dynamisch überall in der Anwendung verwendet.
@@ -6574,7 +6589,10 @@ Authors of this application are NOT responsible for lost data.
Version: %2
Description: %3
-
+ %1
+
+Version: %2
+Beschreibung: %3
@@ -6767,47 +6785,53 @@ Description: %3
Note that usually all required Node.js tools should be available via your "PATH" environment variable, so you do not have to specify full paths.
Also, relaunch "Settings" dialog after you install Node.js.
-
+ Node.js ist eine asynchrone Ereignis-basierende JavaScript Laufzeitumgebung, welche entworfen wurde, um skalierbare Netzwerkapplikationen zu erstellen.
+
+%1 integriert Node.js um moderne Funktionen wie AdBlock bereitzustellen.
+
+Beachte, dass üblicherweise alle notwendigen Node.js Werkzeuge über die "PATH" Umgebungsvariable verfügbar sein sollten, somit solltest du keine vollen Pfade angeben müssen.
+
+Schließe und Öffne den Einstellungsdiealog erneut, nachdem du Node.js installiert hast.
Node.js has version %1.
-
+ Node.js Version ist %1.
Node.js: %1.
-
+ Node.js: %1.
NPM has version %1.
-
+ NPM Version ist %1.
NPM: %1.
-
+ NPM: %1.
You cannot choose file, you have to choose FOLDER.
-
+ Du kannst keine Datei auswählen, es muss ein ORDNER sein.
Package folder is OK.
-
+ Paketordner ist in Ordnung.
Package folder will be created!
-
+ Paketordner wird erstellt!
%1 automatically installs some Node.js packages so that you do not have to. %1 does not use global package folder because that requires administrator rights, therefore by default it uses subfolder placed in your "user data" folder.
-
+ %1 installiert manche Node.js Pakete automatisch, damit du es nicht tun musst. %1 verwendet keine globalen Pakete, weil diese Administratorrechte benötigen, deshalb verwendet es standardmäßig einen Unterordner in deinem Benutzerordner.
@@ -6817,7 +6841,7 @@ Also, relaunch "Settings" dialog after you install Node.js.
Node.js executable
-
+ Node.js Programmdatei
@@ -6829,17 +6853,17 @@ Also, relaunch "Settings" dialog after you install Node.js.
NPM executable
-
+ NPM Programmdatei
Package folder
-
+ Paketordner
&Download Node.js
-
+ &Node.js herunterladen
@@ -6849,7 +6873,9 @@ Also, relaunch "Settings" dialog after you install Node.js.
You must have "tray icon" activated to have balloon notifications working.
Also, there are some built-in sounds. Just start typing ":" and they will show up.
-
+ Du musst ein Taskleistensymbol aktiviert haben, um Ballon-Benachrichtigungen zu sehen.
+
+Es existieren auch einige integrierte Sounds. Beginne zu tippen mit ":" damit sie angezeigt werden.
@@ -6942,7 +6968,7 @@ Also, there are some built-in sounds. Just start typing ":" and they w
Blocked URL: "%1"<br/>Used filter: "%2"
-
+ Blockierte URL: "%1" <br/> Verwendete Filter: "%2"
@@ -6978,12 +7004,12 @@ Also, there are some built-in sounds. Just start typing ":" and they w
Cannot save data for category, detailed information was logged via debug log.
-
+ Kann Daten für die Kategorie nicht speichern, detaillierte Informationen sind im Anwendungsprotokoll.
Cannot save category data
-
+ Kann Daten der Kategorie nicht speichern
@@ -6996,7 +7022,7 @@ Also, there are some built-in sounds. Just start typing ":" and they w
Local file
-
+ Lokale Datei
@@ -7006,34 +7032,36 @@ Also, there are some built-in sounds. Just start typing ":" and they w
Cannot save data for feed: %1
-
+ Kann Daten für Feed nicht speichern: %1
JSON error '%1'
-
+ JSON Fehler '%1'
XML is not well-formed, %1
-
+ XML ist nicht got formatiert, %1
XML feed file format unrecognized
-
+ Format der XML Feed Datei nicht erkannt
Cannot move feed, detailed information was logged via debug log.
-
+ Kann Feed nicht verschieben, detaillierte Informationen sind im Anwendungsprotokoll
Encoding: %2
Type: %3
-
+
+Kodierung: %2
+Type: %3
@@ -7202,12 +7230,12 @@ Type: %3
Full feed source identifier
-
+ Vollständige Kennung der Quelle des Feedes
Full feed source identifier which can be URL.
-
+ Vollständige Kennung der Quelle des Feedes, welche eine URL sein kann
@@ -7261,14 +7289,16 @@ Type: %3
What is post-processing script?
-
+ Was ist ein Nachbearbeitungs-Skript?
You can use URL as a source of your feed or you can produce your feed with custom script.
Also, you can post-process generated feed data with yet another script if you wish. These are advanced features and make sure to read the documentation before your use them.
-
+ Du kannst eine URL als Quelle deines Feeds verwenden, oder einen eigenen Feed mit einem Skript erzeugen.
+
+Du kannst die generierten Feed Daten auch mit einem extra Nachbearbeituns-Skript weiter verarbeiten. Dies sind fortgeschrittene Funktionen, lese die Dokumentation bevor du diese verwendest.
@@ -7318,7 +7348,7 @@ Also, you can post-process generated feed data with yet another script if you wi
Post-processing script
-
+ Nachbearbeitungs-Skript
@@ -7406,7 +7436,7 @@ Also, you can post-process generated feed data with yet another script if you wi
Some feeds/categories were not imported due to error, check debug log for more details.
-
+ Manche Feeds / Kategorien konnten wegen Fehlern nicht importiert werden, kontrolliere das Anwendungsprotokoll um mehr Informationen zu erhalten.
@@ -7503,7 +7533,7 @@ Ungelesene Nachrichten: %2
Browse your feeds and articles
-
+ Sehe deine Artikel und Feeds
@@ -7516,7 +7546,7 @@ Ungelesene Nachrichten: %2
Enable external resources
-
+ Aktiviere externe Ressourcen
@@ -7556,7 +7586,7 @@ Ungelesene Nachrichten: %2
%n second(s)
-
+ eine Sekunde%n Sekunden
@@ -7645,7 +7675,7 @@ Ungelesene Nachrichten: %2
If you select intelligent synchronization, then only not-yet-fetched or updated articles are downloaded. Network usage is greatly reduced and overall synchronization speed is greatly improved, but first feed fetching could be slow anyway if your feed contains huge number of articles.<br/><br/>Also, make sure to install <a href="https://www.google.com">api_newsplus</a> TT-RSS plugin to your server instance.
-
+ Wenn du intelligente Synchronisation auswählst, so werden nur jene Artikel geholt, welche noch nicht heruntergeladen oder aktualisiert wurden. Dies vermindert die Netzwerkauslastung massiv und macht die Synchronisation schneller. Das erste laden von Feeds könnte dennoch langsam sein, wenn viele Artikel vorhanden sind.<br/><br/>Vergewissere dich, dass das <a href="https://www.google.com">api_newsplus</a> TT-RSS plugin auf der Server-Instanz installiert ist.
@@ -7815,7 +7845,7 @@ Ungelesene Nachrichten: %2
Force execution of server-side feeds update
-
+ Erzwinge Ausführung von serverseitigen Feed Aktualisierungen
@@ -7856,7 +7886,7 @@ Ungelesene Nachrichten: %2
Share to published
-
+ Teile zu Veröffentlicht
@@ -7864,7 +7894,7 @@ Ungelesene Nachrichten: %2
Full feed URL including scheme
-
+ Vollständige Feed URL inklusive Schema
@@ -7933,7 +7963,7 @@ Letzte Anmeldung am: %4
cannot get list of feeds, network error '%1'
-
+ Kann Liste der Feeds nicht laden, Netzwerkfehler '%1'
@@ -7946,7 +7976,7 @@ Letzte Anmeldung am: %4
You can find all unread articles here.
-
+ Du kannst alle ungelesenen Artikel hier finden.
@@ -7959,7 +7989,7 @@ Letzte Anmeldung am: %4
View website in reader mode
-
+ Betrachte Webseite im Lesemodus
@@ -7970,7 +8000,7 @@ Letzte Anmeldung am: %4
Reader mode failed for this website
-
+ Lesemodus schlug für diese Seite fehl
@@ -8018,7 +8048,7 @@ Letzte Anmeldung am: %4
No external tools activated
-
+ Keine externen Werkzeuge aktiviert
@@ -8136,57 +8166,57 @@ Letzte Anmeldung am: %4
Web cache is going to be cleared
-
+ Web Zwischenspeicher wird geleert
Do you really want to clear web cache?
-
+ Willst du wirklich den Zwischenspeicher leeren?
Navigate to website manually
-
+ Navigiere zur Webseite manuell
%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.
-
+ %1 war nicht in der Lage, den Webbrowser mit der gegebenen URL zu starten. Du musst diese URL manuell öffnen.
JS can activate windows
-
+ JS kann Fenster aktivieren
Show scrollbars
-
+ Zeige Scrollleisten
Media playback with gestures
-
+ Medien Wiedergabe mit Gesten
WebRTC uses only public interfaces
-
+ WebRTC verwendet nur öffentliche Schnittstellen
JS can paste from clipboard
-
+ JS kann von der Zwischenablage einfügen
DNS prefetch enabled
-
+ DNS Prefetch aktiviert
PDF viewer enabled
-
+ PDF Betrachter aktiviert
\ No newline at end of file
diff --git a/localization/rssguard_en_GB.ts b/localization/rssguard_en_GB.ts
index 06ca087e4..524fb31a3 100644
--- a/localization/rssguard_en_GB.ts
+++ b/localization/rssguard_en_GB.ts
@@ -1155,7 +1155,7 @@ or this functionality is not implemented yet.
<body>%5 is a (very) tiny feed reader.<br><br>This software is distributed under the terms of GNU General Public License, version 3.<br><br>Contacts:<ul><li><a href="mailto://%1">%1</a> ~e-mail</li><li><a href="%2">%2</a> ~website</li></ul>You can obtain source code for %5 from its website.<br><br><br>Copyright (C) 2011-%3 %4</body>
-
+ <body>%5 is a (very) tiny feed reader.<br><br>This software is distributed under the terms of GNU General Public License, version 3.<br><br>Contacts:<ul><li><a href="mailto://%1">%1</a> ~e-mail</li><li><a href="%2">%2</a> ~website</li></ul>You can obtain source code for %5 from its website.<br><br><br>Copyright © 2011-%3 %4</body>
@@ -1601,7 +1601,7 @@ or this functionality is not implemented yet.
I am ready.
-
+ Ready to cleanup the database.
@@ -1943,12 +1943,12 @@ or this functionality is not implemented yet.
&About application
-
+ &About RSS Guard
Displays extra info about this application.
-
+ Displays additional information about the application.
@@ -1968,7 +1968,7 @@ or this functionality is not implemented yet.
Fetch all feeds
-
+ Fetch articles for all feeds
@@ -2113,7 +2113,7 @@ or this functionality is not implemented yet.
Hides main window if it is visible and shows it if it is hidden.
-
+ Hides main window if it's on top and shows it if it's minimised.
@@ -4254,7 +4254,7 @@ Login tokens expiration: %2
Author
- Translator(s)
+
@@ -4307,7 +4307,7 @@ Login tokens expiration: %2
Author
- Translator(s)
+
@@ -4822,12 +4822,12 @@ Login tokens expiration: %2
Socks5
-
+ SOCKS5
Http
-
+ HTTP
@@ -4842,7 +4842,7 @@ Login tokens expiration: %2
Hostname or IP of your proxy server
-
+ Enter the hostname or IP of your proxy server here
@@ -4857,7 +4857,7 @@ Login tokens expiration: %2
Your username for proxy server authentication
-
+ Enter your username for proxy server authentification here
@@ -4867,7 +4867,7 @@ Login tokens expiration: %2
Your password for proxy server authentication
-
+ Enter your password for proxy server authentification here
@@ -6240,7 +6240,7 @@ Authors of this application are NOT responsible for lost data.
Note that enabling this might have drastic consequences on performance of article list with big number of articles.
-
+ Note that enabling this feature might have drastic negative consequences on the performance of article lists with a large amount of articles.
@@ -6305,7 +6305,7 @@ Authors of this application are NOT responsible for lost data.
Feeds list
-
+ Feed list
@@ -6316,7 +6316,7 @@ Authors of this application are NOT responsible for lost data.
Feed list font
- Feed list-specific font
+ Feed list font
@@ -6380,7 +6380,7 @@ Authors of this application are NOT responsible for lost data.
Bring application window to front once article is opened in external web browser
-
+ Bring application window to the forefront once an article is opened in the external web browser
@@ -6400,7 +6400,7 @@ Authors of this application are NOT responsible for lost data.
Limit height of pictures
-
+ Limit image height
@@ -6410,7 +6410,7 @@ Authors of this application are NOT responsible for lost data.
Articles list
-
+ Article list
@@ -6486,7 +6486,7 @@ Authors of this application are NOT responsible for lost data.
Author
- Translator(s)
+
@@ -6626,7 +6626,7 @@ Description: %3
Start application hidden
-
+ Start application minimised
@@ -7324,7 +7324,7 @@ Also, you can post-process generated feed data with yet another script if you wi
This is obligatory service account for standard RSS/RDF/ATOM feeds.
-
+ This is an obligatory service account for standard RSS/RDF/ATOM feeds.
diff --git a/localization/rssguard_fr.ts b/localization/rssguard_fr.ts
index 52e06540a..f538c950d 100644
--- a/localization/rssguard_fr.ts
+++ b/localization/rssguard_fr.ts
@@ -516,7 +516,7 @@ Cliquez-ici pour ouvrir le répertoire parent.
&Try again
- &Essayez encore
+ &Réessayer
@@ -526,12 +526,12 @@ Cliquez-ici pour ouvrir le répertoire parent.
&Open file
- &Ouvrez le fichier
+ &Ouvrir le fichier
Open &directory
- Ouvrir %repertoire
+ Ouvrir le &répertoire
@@ -574,7 +574,7 @@ Cliquez-ici pour ouvrir le répertoire parent.
Clean up
- Nettoyage
+ &Vider la liste de téléchargements
@@ -664,7 +664,7 @@ Cliquez-ici pour ouvrir le répertoire parent.
uses global settings, but global auto-fetching of articles is disabled
- utilise les paramètres globaux, mais l'obtention automatique globale d'articles est désactivée.
+ Ce flux utilise les paramètres globaux, mais l'obtention automatique globale d'articles est désactivée.
@@ -1609,7 +1609,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
I am ready.
- Je suis prêt.
+ Prêt à nettoyer la base de données.
@@ -1951,12 +1951,12 @@ ou cette fonctionnalité n'est pas encore implémentée.
&About application
- &À propos de l'application
+ &À propos d'RSS Guard
Displays extra info about this application.
- Afficher des informations supplémentaires à propos de cette application.
+ Afficher des informations supplémentaires à propos de l'application.
@@ -1976,7 +1976,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Fetch all feeds
- Obtenir tous les flux
+ Obtenir des articles de tous les flux.
@@ -1986,7 +1986,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Fetch selected feeds
- Obtenir des &articles des flux séléctionnés
+ Obtenir des articles des flux séléctionnés.
@@ -2061,7 +2061,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Deletes all messages from selected items.
- Supprime tous les messages des éléments sélectionnés.
+ Supprimer tous les messages des éléments sélectionnés.
@@ -2121,7 +2121,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Hides main window if it is visible and shows it if it is hidden.
- Cacher la fenêtre principale si elle est visible et la montrer si elle est cachée.
+ Minimiser la fenêtre principale si elle est au premier plan et la montrer si elle est minimisée.
@@ -2141,7 +2141,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Deletes all messages from all items.
- Supprime tous les messages de tous les éléments.
+ Supprimer tous les messages de tous les éléments.
@@ -2151,7 +2151,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
&Previous item
- &Élément précédent
+ Élément &précédent
@@ -2201,7 +2201,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
&List headers
- Les ttypes de liste
+ Les types de liste
@@ -2216,7 +2216,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
&Restart
- &Redémarrer RSS Guard
+ &Redémarrer RSS Guard.
@@ -2312,7 +2312,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Stop ongoing fetching
- Arrêter l'obtention en cours
+ Arrêter l'obtention en cours.
@@ -2362,7 +2362,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Fetch feeds with &custom auto-download policy
- Obtenir les flux avec &une politique de téléchargement automatique personnalisée
+ Obtenir les flux avec une politique de téléchargement automatique &personnalisée
@@ -2427,7 +2427,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Display application &log
- Afficher le log de l'appli
+ Afficher le &log de l'appli
@@ -2452,7 +2452,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Rearrange &subcategories alphabetically
- Réarranger les sous-catégories alphabétiquement
+ Réarranger les &sous-catégories alphabétiquement
@@ -2462,7 +2462,7 @@ ou cette fonctionnalité n'est pas encore implémentée.
Cleanup web cac&he
- Nettoyer le cac&he web
+ Nettoyer le &cache web
@@ -4847,12 +4847,12 @@ Expiration de jetons d'authentification: %2
Socks5
- Socks5
+ SOCKS5
Http
- Http
+ HTTP
@@ -4867,7 +4867,7 @@ Expiration de jetons d'authentification: %2
Hostname or IP of your proxy server
- Nom de l'hôte ou IP de votre serveur proxy
+ Entrez le nom de l'hôte ou IP de votre serveur proxy ici
@@ -4882,7 +4882,7 @@ Expiration de jetons d'authentification: %2
Your username for proxy server authentication
- Votre nom d'utilisateur pour l'authentification du serveur proxy
+ Entrez votre nom d'utilisateur pour l'authentification du serveur proxy ici
@@ -4892,12 +4892,12 @@ Expiration de jetons d'authentification: %2
Your password for proxy server authentication
- Votre mot de passe pour l'authentification du serveur proxy
+ Entrez votre mot de passe pour l'authentification du serveur proxy ici
Note that these settings are applied only on newly established connections.
- Noter que ces paramètres sont appliqués seulement sur les nouvelles connexions établies.
+ Noter que ces paramètres sont appliqués seulement sur les nouvelles connections établies.
@@ -6078,7 +6078,7 @@ File filter for external e-mail selection dialog.
Network & web & tools
- Réseau, web & outils
+ &Réseau, web & outils
@@ -6676,7 +6676,7 @@ Déscription: %3
Start application hidden
- Démarrer l'application en caché
+ Démarrer l'application minimisée
diff --git a/resources/scripts/clang-format/clang-format.exe b/resources/scripts/clang-format/clang-format.exe
index d0a64611d..8b631a36e 100755
Binary files a/resources/scripts/clang-format/clang-format.exe and b/resources/scripts/clang-format/clang-format.exe differ
diff --git a/resources/scripts/github-actions/build-windows.ps1 b/resources/scripts/github-actions/build-windows.ps1
index 69ac99102..05684ab0e 100755
--- a/resources/scripts/github-actions/build-windows.ps1
+++ b/resources/scripts/github-actions/build-windows.ps1
@@ -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"
diff --git a/src/librssguard/core/messagesmodelsqllayer.cpp b/src/librssguard/core/messagesmodelsqllayer.cpp
index 802de6d52..baf0715fe 100644
--- a/src/librssguard/core/messagesmodelsqllayer.cpp
+++ b/src/librssguard/core/messagesmodelsqllayer.cpp
@@ -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(", "));
}
diff --git a/src/librssguard/core/messagesmodelsqllayer.h b/src/librssguard/core/messagesmodelsqllayer.h
index cc2a884ec..1758975bb 100644
--- a/src/librssguard/core/messagesmodelsqllayer.h
+++ b/src/librssguard/core/messagesmodelsqllayer.h
@@ -7,6 +7,12 @@
#include
#include
+#include
+
+struct SortColumnsAndOrders {
+ QList m_columns;
+ QList 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;
diff --git a/src/librssguard/definitions/definitions.h b/src/librssguard/definitions/definitions.h
index 38776018b..9fa32ab8b 100644
--- a/src/librssguard/definitions/definitions.h
+++ b/src/librssguard/definitions/definitions.h
@@ -6,175 +6,176 @@
#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_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\\-\\.,@?^=%&:/~\\+#]*[\\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 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 "]+type=\"application\\/(?:atom\\+xml|rss\\+xml|feed\\+json|json)\"[^>]*>"
+#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_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
diff --git a/src/librssguard/gui/feedmessageviewer.cpp b/src/librssguard/gui/feedmessageviewer.cpp
index efeda3b32..897e26f66 100644
--- a/src/librssguard/gui/feedmessageviewer.cpp
+++ b/src/librssguard/gui/feedmessageviewer.cpp
@@ -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() {
diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp
index c2fe3231d..760ea7b6f 100644
--- a/src/librssguard/gui/messagesview.cpp
+++ b/src/librssguard/gui/messagesview.cpp
@@ -23,6 +23,7 @@
#include
#include
+#include
#include
#include
#include
@@ -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 {
diff --git a/src/librssguard/gui/messagesview.h b/src/librssguard/gui/messagesview.h
index 001e4dee2..123a1c21d 100644
--- a/src/librssguard/gui/messagesview.h
+++ b/src/librssguard/gui/messagesview.h
@@ -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);