fix: MEDIUM+LOW Claude-Audit-Findings (Issues #7-16)
MEDIUM: - #7 API-Key XOR-obfuskiert in app_config.dart (strings zeigen keinen Klartext) - #8 Navidrome-Download: Status-Code-Prüfung + hatValideMagicBytes() + istKorrupt - #9 _sucheYtUrls() sendet jetzt X-API-Key Header an YT-Proxy - #10 Log-Puffer auf 500 Einträge gecappt (älteste verwerfen) - #11 MeloLogger.cloudToken entfernt (war nie gesetzt, toter Code) - #12 TextEditingController-Leaks in 4 Files: ctrl.dispose() nach showDialog - #13 Cloud-Sync: Last-Write-Wins Konfliktauflösung dokumentiert LOW: - #14 API-Versionierung: alle /api/cloud/ → /api/v1/cloud/ - #15 Auto-Scan: nur /Music, /Download, nicht ganz /storage - #16 2 pre-existing flutter analyze Infos behoben (curly_braces, use_build_context_synchronously) flutter analyze: No issues found.
This commit is contained in:
@@ -9,7 +9,8 @@ import '../models/song.dart';
|
||||
import '../database/db_helper.dart';
|
||||
import '../utils/audio_validator.dart';
|
||||
import 'id3_reader.dart';
|
||||
import 'melo_logger.dart';
|
||||
import '../services/melo_logger.dart';
|
||||
import '../config/app_config.dart';
|
||||
|
||||
class MusikScanner {
|
||||
static final MusikScanner _instanz = MusikScanner._();
|
||||
@@ -152,9 +153,16 @@ class MusikScanner {
|
||||
'/sdcard/Download',
|
||||
];
|
||||
|
||||
// Externen Speicherpfad NUR für App-eigene Daten, nicht ganz /storage
|
||||
try {
|
||||
final extern = await getExternalStorageDirectory();
|
||||
if (extern != null) ordner.add(extern.path);
|
||||
if (extern != null) {
|
||||
// Nur scannen wenn es ein spezifischer Unterordner ist (nicht Root)
|
||||
final externPath = extern.path;
|
||||
if (externPath.contains('Android/data') || externPath.contains('Melo')) {
|
||||
ordner.add(externPath);
|
||||
}
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
for (final ord in ordner) {
|
||||
@@ -232,7 +240,10 @@ class MusikScanner {
|
||||
final query = '${song.kuenstler} ${song.titel}';
|
||||
final url = '$suchUrlBasis?q=${Uri.encodeQueryComponent(query)}';
|
||||
|
||||
final antwort = await http.get(Uri.parse(url)).timeout(
|
||||
final antwort = await http.get(
|
||||
Uri.parse(url),
|
||||
headers: {'X-API-Key': AppConfig.ytProxyApiKey},
|
||||
).timeout(
|
||||
const Duration(seconds: 10),
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user