feat(settings): Cache-Status UI + Clear-Button (Phase 2)
- Neuer 'Cache-Speicher' ListTile in Musikserver-Sektion
- Zeigt Cache-Größe in MB/KB/B
- Clear-Button: Löscht alle gecachten Lieder
- _formatBytes() für Größen-Anzeige
- _clearCache() mit SnackBar-Feedback
Nutzer kann jetzt Cache-Status sehen + leeren!
Tests: 70/70 ✅
This commit is contained in:
@@ -3,6 +3,7 @@ import 'package:provider/provider.dart';
|
||||
|
||||
import '../library/database.dart';
|
||||
import '../library/permissions.dart';
|
||||
import '../services/cache_manager.dart';
|
||||
import '../services/navidrome_service.dart';
|
||||
import '../services/offline_mode.dart';
|
||||
import 'library_stats.dart';
|
||||
@@ -17,11 +18,19 @@ class SettingsScreen extends StatefulWidget {
|
||||
|
||||
class _SettingsScreenState extends State<SettingsScreen> {
|
||||
late final NavidromeService _navidrome = NavidromeService();
|
||||
late final CacheManager _cache = CacheManager();
|
||||
int _cacheSize = 0;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_navidrome.ladeGespeicherteZugangsdaten();
|
||||
_cache.init().then((_) => _updateCacheSize());
|
||||
}
|
||||
|
||||
Future<void> _updateCacheSize() async {
|
||||
final size = await _cache.getCacheSize();
|
||||
if (mounted) setState(() => _cacheSize = size);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -82,6 +91,18 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
},
|
||||
),
|
||||
),
|
||||
ListTile(
|
||||
leading: const Icon(Icons.storage),
|
||||
title: const Text('🗄️ Cache-Speicher'),
|
||||
subtitle: Text(_formatBytes(_cacheSize)),
|
||||
trailing: _cacheSize > 0
|
||||
? IconButton(
|
||||
tooltip: 'Cache löschen',
|
||||
icon: const Icon(Icons.delete),
|
||||
onPressed: () => _clearCache(),
|
||||
)
|
||||
: null,
|
||||
),
|
||||
const Divider(height: 1),
|
||||
const _SectionLabel('Berechtigungen'),
|
||||
ListTile(
|
||||
@@ -210,6 +231,22 @@ class _SettingsScreenState extends State<SettingsScreen> {
|
||||
await _navidrome.loescheZugangsdaten();
|
||||
if (mounted) setState(() {});
|
||||
}
|
||||
|
||||
Future<void> _clearCache() async {
|
||||
await _cache.clearCache();
|
||||
if (mounted) {
|
||||
setState(() => _cacheSize = 0);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Cache gelöscht')),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
String _formatBytes(int bytes) {
|
||||
if (bytes < 1024) return '$bytes B';
|
||||
if (bytes < 1024 * 1024) return '${(bytes / 1024).toStringAsFixed(1)} KB';
|
||||
return '${(bytes / (1024 * 1024)).toStringAsFixed(1)} MB';
|
||||
}
|
||||
}
|
||||
|
||||
/// Kleine graue Überschrift über einer Einstellungs-Gruppe.
|
||||
|
||||
Reference in New Issue
Block a user