Zum Inhalt springen
EchoPlay — WinUI 3 von Grund auf
35 Teile
-
Wie arbeiten Interfaces, DataServices, Mapper und ViewModels zusammen? (Teil 1)
Vier Bausteine für saubere Schichtentrennung in einer WinUI-3-App: Interfaces, DataServices, Mapper und ViewModels.
-
Warum testen wir mit echten Fakes statt mit Mocking-Frameworks? (Teil 2)
Unit-Tests mit handgeschriebenen Fakes statt Moq — warum EchoPlay auf echte Implementierungen setzt.
-
API-Keys sicher konfigurieren in .NET-Anwendungen (Teil 3)
Wie EchoPlay Spotify-API-Keys über appsettings.json und User Secrets verwaltet — ohne Geheimnisse im Repository.
-
Entity Framework Core mit SQLite: DbContext, Migrations und Query Filter (Teil 4)
Datenbank-Setup mit Entity Framework Core und SQLite — vom DbContext über Migrations bis zum globalen Query Filter.
-
Soft-Delete: Datensätze löschen ohne Datenverlust (Teil 5)
Soft-Delete-Muster mit BaseEntity, kaskadierendem Löschen und globalem EF-Core-Query-Filter.
-
Dependency Injection in einer WinUI-3-Desktop-App (Teil 6)
Generic Host, Lebensdauern und IServiceScopeFactory — wie EchoPlay seine Abhängigkeiten verdrahtet.
-
MVVM in WinUI 3: ObservableObject, RelayCommand und x:Bind (Teil 7)
Das MVVM-Pattern in der Praxis — SetProperty, Commands und kompilierte Bindings mit x:Bind.
-
Navigation in WinUI 3: NavigationView, Frame und ViewModel-Loading (Teil 8)
Seitennavigation mit NavigationView und Frame — inklusive ViewModel-Loading und Navigationshistorie.
-
Themes in WinUI 3: ResourceDictionary und Laufzeit-Wechsel (Teil 9)
Farbthemen mit ResourceDictionary, ThemeService und Laufzeit-Wechsel ohne App-Neustart.
-
Eigenes Logging-System: Sinks, Logger und MemorySink (Teil 10)
Ein maßgeschneidertes Logging-System mit Sinks, LogScope und Live-Protokoll in der Settings-UI.
-
Spotify-Integration: Client-Credentials-Flow und Token-Cache (Teil 11)
Spotify-Web-API anbinden mit Client-Credentials-Flow, DelegatingHandler und automatischem Token-Cache.
-
Retry und Resilienz: Linearer Backoff für HTTP-Anfragen (Teil 12)
Transiente HTTP-Fehler abfangen mit linearem Backoff und einem eigenen Retry-Handler.
-
Audio-Wiedergabe: MediaPlayer, Playlist und PlaybackState (Teil 13)
Audio abspielen mit MediaPlayer und MediaPlaybackList — inklusive Persistenz des Wiedergabestatus.
-
SyncService: IServiceScopeFactory in Singleton-Services (Teil 14)
Scoped Services in Singletons nutzen mit IServiceScopeFactory, IProgress und Fuzzy-Matching.
-
Import-Flow: ImportService und Keyed Services (Teil 15)
Serien importieren mit dem ImportService — Provider-Abstraktion über Keyed Services.
-
Lokalisierung in WinUI 3: Deutsch und Englisch mit .resw-Dateien (Teil 16)
Mehrsprachigkeit mit .resw-Ressourcendateien, x:Uid und ILocalizationService.
-
Ein Abonnement-Flag: Kleines Feld, große Wirkung (Teil 17)
IsSubscribed als bool statt eigene Tabelle — warum ein einfaches Flag die richtige Architekturentscheidung ist.
-
Dashboard-ViewModel: Services kombinieren und Gruppen-Layout (Teil 18)
Mehrere DataServices im ViewModel kombinieren — Karten, Gruppen und CompletedCheck.
-
Lokale Mediathek: Drei-Spalten-Navigation mit Auswahl-Kaskade (Teil 19)
Drei-Spalten-Layout mit Lazy Cover-Loading, Favoriten-Stern und Tag-Manager-Navigation.
-
Suche und Import: Ergebnis-ViewModels und Import-Status (Teil 20)
Suchergebnisse als ViewModels mit Import-Button, BitmapImage aus URL und paralleler Suche.
-
Player-Seite: FolderPicker, ID3-Cover und Slider-Antifeedback (Teil 21)
Audio-Player mit FolderPicker-Interop, ID3-Tag-Cover und Slider-Seeking ohne Rücksprung.
-
Einstellungen mit Tabs: TabView und Verbindungstest (Teil 22)
Einstellungsseite mit TabView, Verbindungstest per Command-Pattern und Theme-Farbkacheln.
-
StatusBar als Singleton: Globaler Zustand ohne N+1 (Teil 23)
Ein Singleton-ViewModel für die Statusleiste — globaler Zustand ohne N+1-Problem.
-
Tag-Manager: Audio-Metadaten lesen, schreiben und nachschlagen (Teil 24)
TagLib# und MusicBrainz-API für Audio-Tags — mit SemaphoreSlim Rate-Limiting und Auto-Lookup.
-
Log-Viewer: DispatcherTimer, IDisposable und NumberBox (Teil 25)
Live-Protokoll in den Einstellungen mit DispatcherTimer, Datei-Auswahl und ViewModel-Cleanup.
-
Cover-Suche: Fünf Anbieter parallel abfragen (Teil 26)
CompositeCoverSearchService — parallele Cover-Suche bei fünf Anbietern mit Fallback-Kette.
-
Online-Folgencheck: iTunes API vs. lokale Ordner (Teil 27)
Neue Folgen erkennen durch Abgleich der iTunes-API mit lokalen Ordnern — mit In-Memory-Cache.
-
SQLite professionell optimieren: PRAGMAs, Indizes und Partial Indexes (Teil 28)
SQLite-Performance maximieren mit WAL-Modus, Komposit-Indizes und EF-Core-Interceptor.
-
Online-Mediathek: Akkordeon-Layout und Provider-Suche (Teil 29)
Akkordeon-Layout mit dynamischer Grid-Teilung und Inline-Provider-Suche.
-
Cover-Architektur: Blobs von Metadaten trennen (Teil 30)
CoverImages-Tabelle, Drei-Schichten-Zugriff und SQL-basierte Cover-Kopie zwischen Serien.
-
UserControls in WinUI 3: SeriesTileControl und DependencyProperties (Teil 31)
Wiederverwendbare Kachel-Controls mit DependencyProperties und AccordionSplitHelper.
-
Hintergrund-Services: PeriodicTimer und CancellationToken (Teil 32)
BackgroundCoverService mit PeriodicTimer, sauberem Shutdown und IServiceScopeFactory.
-
Startup-Validierung: Splash-Screen und StartupResult (Teil 33)
StartupValidator prüft beim App-Start Datenbank, Konfiguration und Online-Verfügbarkeit.
-
Favoriten und Überwachung: Feature-Flags auf Serien-Covers (Teil 34)
IsFavorite und IsWatched als Overlay-Buttons auf Kacheln — mit DependencyProperties.
-
Cache-Verwaltung und Datenbankpflege in den Einstellungen (Teil 35)
Verwaltungs-Tab mit Flag-basiertem Cache-Clear, Bibliotheks-Reset und kaskadierendem Purge.