Diagnose-Logs werden zentral bereinigt, bevor sie an logs.baka-net.de gehen. Lokaler debugPrint bleibt vollständig. - Freitext-Scrubber (LoggerService.scrubText) für message + stackTrace: maskiert user=/pw=/password=/token=/secret=/url= sowie Datei-Pfade, nackte URLs, Bearer-Token, JWTs und lange Hex-IDs. - stackTrace auf 8 Zeilen gekürzt (capFrames). - deviceModel nur noch grobe Plattform (android/ios) statt Hersteller+Modell; device_info_plus im Logger entfernt. - Quelle entschärft: settings_screen loggte Navidrome-Login mit Klartext user=/url= — jetzt nur neutraler Status inkl. pwLeer-Flag. - Neue Tests: test/logger_service_test.dart (9). 79/79 grün, analyze sauber. Opt-in/Einwilligung bleibt separater Folgeschritt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tr2UwurtxyJUpWpBSeVmBm
141 lines
8.7 KiB
Markdown
141 lines
8.7 KiB
Markdown
# Changelog
|
||
|
||
Alle nennenswerten Änderungen an diesem Projekt werden hier dokumentiert.
|
||
Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
|
||
|
||
## [Unreleased]
|
||
|
||
### 🔒 Datenschutz: Log-Bereinigung vor Server-Upload (2026-08-20)
|
||
- ✅ **Was:** Diagnose-Logs werden jetzt zentral bereinigt, bevor sie an
|
||
`logs.baka-net.de` gehen. Der lokale `debugPrint` bleibt vollständig.
|
||
- 🔧 **Details:**
|
||
- Freitext-Scrubber für `message` + `stackTrace`: maskiert sensible
|
||
`key=value`-Fragmente (`user=`, `pw=`, `password=`, `token=`, `secret=`,
|
||
`url=`), Datei-Pfade (`<path>`), nackte URLs (`<url>`), `Bearer`-Token,
|
||
JWTs (`<jwt>`) und lange Hex-IDs (`<hex>`).
|
||
- `stackTrace` wird auf max. 8 Zeilen gekürzt.
|
||
- `deviceModel` sendet nur noch die grobe Plattform (`android`/`ios`) statt
|
||
Hersteller+Modell (war ein Geräte-Fingerprint) — `device_info_plus` im
|
||
Logger entfernt.
|
||
- 🐛 **Fix (Quelle):** Der Navidrome-Login in `settings_screen` loggte
|
||
Benutzername + Server-URL im Klartext (`Login: url=… user=…`). Diese
|
||
Aufrufe senden jetzt nur noch den neutralen Status inkl. `pwLeer`-Flag.
|
||
- 🧪 **Tests:** neue Suite `test/logger_service_test.dart` (9 Tests) — 79/79 grün,
|
||
`flutter analyze` ohne Issues.
|
||
- ℹ️ **Offen:** Opt-in/Einwilligung für den Diagnose-Versand bleibt ein
|
||
separater Folgeschritt (braucht UI).
|
||
|
||
### 🔧 Log-Upload System - Fixes (2026-08-19)
|
||
- ✅ **ERROR-Level Logging**: Fehler werden SOFORT zum Server hochgeladen (async/await Fixed)
|
||
- ✅ **Navidrome-Service Error Logging**: Alle API-Fehler (ping, getAlben, getSongs, getFavorites, getArtists, getArtistSongs, getLyrics, scrobble, getBookmarks, getPlaylists, getPlaylistSongs) werden jetzt mit `logger.error()` zum Server geloggt (statt nur debugPrint)
|
||
- ✅ **Login-Fehler Detail-Logging**: Fehler enthalten URL, User, Exception-Typ und StackTrace
|
||
- ✅ **HTTP-Error bei Stream**: Stream-Fehler mit HTTP-Statuscode werden auch geloggt
|
||
- ✅ **Payload-Format**: Logs senden als `{"logs": [...]}` Array zum Server
|
||
|
||
### 🎉 RELEASE BUILD v3: Phase 2 + Login + Auto-Bugreport System!
|
||
**Build Date:** 2026-08-19 21:30
|
||
**APK (Release/Universal):** `app-release.apk` (22.3 MB) — **Mit Auto-Logger + Login-Improvements!**
|
||
**APK (ARM64-Specific):** `app-arm64-v8a-release.apk` (21 MB) — **Optimal für POCO X7 Pro**
|
||
**Tests:** 70/70 ✅
|
||
**Build Status:** ✅ SUCCESS
|
||
|
||
**Neue Features in dieser Build:**
|
||
- ✨ Login-Verbesserungen: Auto-URL + User-Buttons + Gast-Modus
|
||
- 📊 Auto-Bugreport System: Logger sendet Fehler sofort + andere Logs gesammelt zum Server
|
||
- Device-Info (Model + OS) + Timestamp + Stack-Traces
|
||
- Integration in Navidrome-Service für Login-Fehler-Diagnose
|
||
- 📝 Alle Phase-2-Features (Sync, Caching, Player, Controls)
|
||
- 🔒 Secure Credential-Speicherung
|
||
- 🎵 Enhanced MiniPlayer mit Skip-Buttons
|
||
|
||
### Phase 2 (Part 1-8 Completed — MILESTONE!)
|
||
- 🗄️ **Auto-Caching**: Lieder werden automatisch beim Streamen lokal gespeichert!
|
||
- Cache-First-Logik: Existierende Dateien lokal spielen
|
||
- Fallback: Vom Server streamen wenn kein Cache
|
||
- Cache-Speicher-Status in Settings (MB/KB/B) mit Clear-Button
|
||
- 🗄️ **CacheManager**: MD5-Hash-basierte Cache-Verwaltung (getCacheSize, clearCache)
|
||
- 📴 **Offline-Mode**: Toggle in Settings aktiviert Offline-Betrieb (nur gecachte Lieder spielen)
|
||
- 🎤 **Artist-Browse**: Toggle in Navidrome-Tab zwischen Albums ↔ Künstler, Tap lädt alle Songs des Künstlers
|
||
- 🌟 **Favoriten-Sync**: Button in Settings lädt Server-Favoriten und importiert sie lokal
|
||
- 📊 **History-Sync**: Wiedergabe-Position vom Server laden + alle 5s zum Server senden (Subsonic-Bookmarks)
|
||
- 📋 **Playlisten-Sync**: Button in Settings lädt alle Server-Playlisten (mit 🌐 Präfix zur Unterscheidung)
|
||
- 🔒 **Lock-Screen Controls**: Notification mit Play/Pause/Skip-Buttons auf Android Lock Screen
|
||
- 🎵 **Enhanced MiniPlayer**: Now-Playing Widget auf allen Tabs mit Skip-Buttons + Progress-Bar
|
||
- Infrastructure für Multi-Device Sync vorbereitet
|
||
|
||
### Added
|
||
- 🌐 **Musikserver-Tab** in Bibliothek: Zeige Alben vom Navidrome-Server, tippe um Album abzuspielen
|
||
- 📝 **Lyrics-Anzeige**: Lyrics-Button im Now-Playing Screen, Bottom-Sheet mit Song-Lyrics vom Server
|
||
- 🔀 **Shuffle & Repeat Modi**: Shuffle-Button (aktiv = rot), Repeat-Cycle (Off → All → One), beide im Player
|
||
- 🌐 Navidrome-Integration (Musikserver-Verbindung): Settings-Tab bietet Login/Logout für Subsonic-API-kompatible Server
|
||
- Navidrome-Service mit sichere Credential-Speicherung (Secure Storage + SharedPreferences)
|
||
- Server-Album-Browser: Lädt Alben vom Server, zeigt Songcount, tippe um Album in Queue zu laden
|
||
- Server-APIs erweitert: getArtists(), getArtistSongs(), setFavorite(), getFavorites(), getLyrics() (Phase 2 vorbereitet)
|
||
- Dependencies für Navidrome hinzugefügt: http, crypto, shared_preferences, flutter_secure_storage
|
||
|
||
### Known Limitations (Phase 2)
|
||
- Server-Favoriten-Sync: APIs vorhanden, UI-Integration in Phase 2
|
||
- Artist-Browse: APIs vorhanden, UI in Phase 2
|
||
- Server-Caching: Musik wird nicht lokal für Offline gecacht (Phase 2)
|
||
- Lyrics-Sync: Keine Timed-Synchronisation (Phase 2+)
|
||
|
||
## [1.0.0-alpha]
|
||
|
||
### Added
|
||
- Playlisten-Tab: Favoriten-Kurzeinstieg oben, Liste aller Playlisten mit Songanzahl,
|
||
Erstellen-Dialog (FAB), Löschen mit Bestätigung
|
||
- 🎵➕ Songs per Bottom-Sheet zu Playlisten hinzufügen (neuer Button in der Songliste,
|
||
neben dem Favoriten-Herz)
|
||
- Playlist-Detailansicht: Songs per Drag & Drop umsortieren, einzeln entfernen,
|
||
Antippen spielt die Playlist ab dieser Stelle
|
||
- Datenbank: Playlisten, Favoriten und Wiedergabe-Historie Tabellen (Drift, Schema v2)
|
||
- PlaylistService für Playlisten- und Favoriten-Verwaltung
|
||
- ❤️ Favoriten-Herz in der Songliste (ausgefüllt/leer)
|
||
- ❤️ Favoriten-Herz auch im Now-Playing-Screen (aktueller Song)
|
||
- Bibliothek: Künstler- und Alben-Tabs neben "Alle" — Songs werden clientseitig
|
||
aus der bestehenden Songliste gruppiert (alphabetisch sortiert, fehlender
|
||
Künstler/Album → "Unbekannt" / "Unbekanntes Album"); Antippen öffnet die
|
||
Songliste des jeweiligen Künstlers/Albums, Alben zeigen zusätzlich das Cover
|
||
- Warteschlangen-Ansicht (Queue-Button in der Now-Playing-AppBar): zeigt die
|
||
aktuelle Wiedergabeliste, hebt den laufenden Titel hervor, per Antippen
|
||
direkt zu einem Titel springen, Titel entfernen oder per Drag & Drop
|
||
umsortieren — ohne Änderungen am Audio-Handler (Queue wird clientseitig
|
||
neu berechnet und neu geladen)
|
||
- Wiedergabeposition wird alle 5 Sekunden gespeichert und beim erneuten
|
||
Abspielen eines Songs automatisch fortgesetzt (kein Resume bei den letzten
|
||
3 Sekunden eines Songs, um ein sofortiges Ende zu vermeiden)
|
||
- Settings-Tab: Bibliotheks-Statistik (Song-Anzahl + Gesamtspieldauer),
|
||
Musik-Berechtigung mit Link in die Systemeinstellungen, kurzer
|
||
"Über Melo"-Abschnitt — bewusst ohne Platzhalter für Profil/Cloud-Sync/
|
||
Geräte-Verwaltung, da es dafür noch kein Account-/Cloud-System gibt (Phase 2)
|
||
|
||
**Damit ist das komplette 5-Tab-MVP fertig: Player / Bibliothek / Playlisten /
|
||
Suche / Settings — inklusive Playlisten, Favoriten, Warteschlangen-Verwaltung,
|
||
Künstler-/Alben-Browsing und automatischem Fortsetzen der Wiedergabeposition.**
|
||
|
||
### Changed
|
||
- Now-Playing-Screen läuft jetzt als eigener Tab statt als gepushter Screen (kein Schließen-Button mehr in der AppBar)
|
||
- MediaItem trägt jetzt die Song-UUID mit (`extras['songId']`), nicht mehr nur die Datei-URI
|
||
- Finales 5-Tab-Layout: Player / Bibliothek / Playlisten / Suche / Settings (Playlisten und Settings vorerst als Platzhalter)
|
||
- "Zuletzt hinzugefügt" aus der alten Startseite ist jetzt Teil der Bibliothek (horizontale Leiste oben)
|
||
- MiniPlayer wird auf dem Player-Tab ausgeblendet (dort läuft schon die volle Ansicht)
|
||
|
||
### Fixed
|
||
- 🐛 Der APK-Build funktioniert jetzt überhaupt. Drei Dinge waren nötig:
|
||
`compileSdk = 37` und `kotlin.jvm.target.validation.mode=warning` existierten
|
||
bisher nur lokal auf dem Server und fehlten im Repo — ohne sie bricht der Build
|
||
ab, weil `permission_handler` SDK 37 verlangt. Zusätzlich hebt ein Gradle-
|
||
Workaround jetzt Plugin-Module mit zu altem `compileSdk` auf 36 an:
|
||
`on_audio_query_android` kompiliert gegen SDK 33, seine AndroidX-Abhängigkeiten
|
||
verlangen aber mindestens 34 (16 Metadaten-Konflikte).
|
||
|
||
### Removed
|
||
- Alte Startseite (`home_screen.dart`) entfernt — Funktionalität in die Bibliothek verschoben
|
||
|
||
### Known Issues
|
||
- Genre-Browsing fehlt noch: die `Songs`-Tabelle hat keine Genre-Spalte und
|
||
keiner der Scanner (scan_service.dart, android_scan.dart) liest Genre-
|
||
Metadaten aus den Dateien aus. Das ursprünglich geplante dritte Bibliotheks-
|
||
Tab "Genres" ist deshalb nicht umgesetzt — braucht eine Schema-Migration
|
||
plus Metadaten-Extraktion im Scanner (eigene Aufgabe, außerhalb dieses Tasks)
|