Nach dem umfangreichen Funktionsausbau im September und Oktober haben wir NewsDesk einem gründlichen Codebase-Audit unterzogen. Das Ergebnis: schnellere Suche, gehärtete Textverarbeitung und ein zukunftssicheres Sync-Protokoll.
Schnellere Suche dank Volltextindex
Die Desktop-Suche nutzt jetzt SQLite FTS5 (Full-Text Search) — dieselbe Technik, die in der Web-Fassung seit dem Start im Einsatz ist. Statt jeden Artikel einzeln mit einer C#-Funktion zu prüfen, filtert ein Volltextindex die Kandidaten vor. Bei größeren Beständen (ab einigen tausend Artikeln) ist der Unterschied deutlich spürbar.
Sicherheit: Textverarbeitung ohne Rückverfolgung
Die Regex-Muster im Markdown-Export, die HTML-Tags aus Feed-Inhalten entfernen, wurden auf NonBacktracking umgestellt. Damit ist ein theoretischer ReDoS-Angriff über gezielt gebauten HTML-Inhalt ausgeschlossen. Die Änderung ergänzt den bereits in der Vorgängerversion gehärteten TextSummarizer.
Sync-Protokoll mit Versionsnummer
Jede Sync-Operation trägt jetzt ein Version-Feld. Kennt ein Gerät die Version einer eingehenden Operation nicht, überspringt es sie sauber, statt an einem unbekannten Format zu scheitern. Damit können künftige Erweiterungen des Sync-Protokolls ohne Kompatibilitätsbruch ausgerollt werden.
Werbefilter aus einer Quelle
Die Geschäftsregel „Titel beginnt mit Anzeige” war bisher an drei Stellen im Code hinterlegt — einmal je Plattform. Ab dieser Version gibt es eine zentrale Konstante, die Desktop, Web und Dashboard gemeinsam nutzen. Für Anwender ändert sich nichts; die Pflege wird einfacher.
Datumsformat vereinheitlicht
Alle Stellen, die Zeitstempel lesen oder schreiben, greifen jetzt auf eine gemeinsame Konstante und Hilfsmethoden zu. Das beseitigt eine Klasse potenzieller Fehler bei der Datumsverarbeitung zwischen Geräten und Plattformen.
Unter der Haube
- DatabaseService aufgeteilt in vier Teilklassen (Kern, Sync, Feeds, Artikel) — vorher 1240 Zeilen in einer Datei.
- MainWindow weiter aufgeteilt: Tray-Icon-Verwaltung und Einstellungs-UI in eigene Teilklassen extrahiert (1036 → 650 Zeilen).
- 43 neue Tests für die Feed-Pipeline decken RSS 2.0, Atom 1.0/0.3, RSS 1.0/RDF, Datumsformate und Fehlerfälle ab.
- Solution-Datei (
NewsDesk.sln) bindet jetzt alle vier Projekte (Desktop, Web, beide Testprojekte) ein.
Hier geht es zur Projektseite und Download: NewsDesk
Detailierter Changelog
Oberfläche
- Komplett neue Oberfläche mit Seitenleiste, Glasoptik (Acrylic) und Blautönen
- Dashboard als Zeitungsseite mit Tagesüberblick und Trendwörtern
- Globale Suche über alle Artikel
- Merkliste für Artikel
- Intelligente Ansichten: Alle ungelesenen, Heute, ganze Kategorie
- Lesemodus: Artikel ohne Seitenballast (via SmartReader/Readability)
- Regeln: Schlagworte stummschalten, hervorheben oder melden
- Gespeicherte Suchen in der Seitenleiste
- Dubletten über Feeds hinweg bündeln
- Lernende Gewichtung: Daumen hoch/runter für Quelle und Schlagwort
- Favicons vor den Feednamen in Listen und Seitenleiste
- Rückgängig für „als gelesen markieren”
- Feed-Statistik: Artikelzahl und Häufigkeit je Feed
- Weitergeben: Link kopieren, nach Obsidian exportieren (Markdown)
- Feed aus beliebiger Webseiten-Adresse erkennen
- Einstellungen als übersichtliche Tabellen (WinUI.TableView)
- Befehle in die Titelzeile gezogen
- Fensterlage, Aufteilung und Spaltenbreiten über den Neustart merken
- Tray-Symbol mit Ungelesen-Zähler (roter Punkt mit Zahl)
- Suche und Regeln treffen ganze Wörter;
*für den Wortanfang - Daumen-Menü: Schlagworte ohne allgemeine Wörter, Title Case für englische Titel
- Deinstallation fragt, ob die Nutzerdaten gelöscht werden sollen
- Favicons verschwanden beim Lesen eines Artikels
- Artikelliste: Neuladen nach Abruf, Sync oder Rückgängig schloss den geöffneten Artikel
- Feedliste: Stichtag für gelesene Artikel war kulturabhängig (Datumsformat)
- Geöffneter Artikel wurde nach „Alle gelesen” nicht mehr angezeigt
- Nullable-Warnungen in MainWindow und Tests behoben
Abruf und Feeds
- Gelesene Artikel werden sieben Tage aufbewahrt, Dauer über den Sync konfigurierbar
- Werbeartikel in Feedliste, Zählern und Suche ausgeblendet
- Abruf: Validatoren laufen nur bei Erfolg und erst nach dem Speichern
- RssEngine: Feed-Erkennung, Lesemodus und Favicons fangen Abbruch und fremde Schemata ab
- Abruf: Datenbankarbeit lief im Oberflächen-Thread statt im Threadpool
- Werbefilter: gescheiterter Download leerte die Filterliste
- Kategorien: doppelter Name legte ein Phantom-Delta an und wurde nicht gemeldet
Synchronisation
- Sync-Protokoll trägt eine Versionsnummer; unbekannte Versionen werden übersprungen
- Feed/alles gelesen verschickt nur die geänderten Artikel-Ids
- Sync-Wächter mit größerem Puffer und Nachlese bei Überlauf
- Ein Neuladen der Oberfläche je Dateienschwwall statt je einzelner Datei
Suche
- Desktop-Suche nutzt SQLite FTS5 (Volltextindex) statt C#-Filter
- Suche und Regeln treffen ganze Wörter
Sicherheit und Stabilität
- SQLite-Sicherheitslücke CVE-2025-6965 geschlossen
- MarkdownExport: Regex auf
NonBacktrackingumgestellt (ReDoS-Schutz) - HtmlToText: Regex ohne Rückverfolgung (1 MB HTML kostete 12 s statt 0,2 s)
- Einstellungen: unlesbare
settings.jsonwird als.defektgesichert statt überschrieben
Codequalität
- DatabaseService in vier Teilklassen aufgeteilt (Kern, Sync, Feeds, Artikel)
- MainWindow in Teilklassen aufgeteilt (Hauptfenster, Tray, Einstellungen)
- 43 neue Tests für die Feed-Pipeline (RSS 2.0, Atom 1.0/0.3, RSS 1.0/RDF, Datumsformate, Fehlerfälle)
- Werbefilter als zentrale Konstante statt drei getrennter Stellen
- Datumsformat als gemeinsame Konstante und Hilfsmethoden
- Solution-Datei (
NewsDesk.sln) bindet alle vier Projekte ein - Hervorhebung neu berechnen schreibt nur geänderte Zeilen
Komponenten
- .NET 10 (von .NET 9)
- Windows App SDK 2.6.5
- Microsoft.Data.Sqlite 10.0.14
- Microsoft.Web.WebView2 1.0.4314.35
- AngleSharp 1.9.1
- SmartReader 0.11.1
- WinUI.TableView 1.5.1
- System.Drawing.Common 10.0.14
- H.NotifyIcon.WinUI 2.4.1
