import 'dart:async'; import 'package:aves/services/cast/cast_hls_cache.dart'; import 'package:aves/services/cast/cast_video_cache.dart'; import 'package:flutter/foundation.dart'; class CastCacheCleanup { CastCacheCleanup._(); static bool _started = false; /// Avvia una sola volta per processo la pulizia delle cache video Cast. /// /// Non include le immagini ottimizzate, che CastServer conserva /// esclusivamente in RAM. static void startOnce() { if (_started) { return; } _started = true; /* * Non blocca la visualizzazione dell'app. Gli errori vengono gestiti * separatamente per ciascuna cache. */ unawaited(_cleanup()); } static Future _cleanup() async { final stopwatch = Stopwatch()..start(); final results = await Future.wait([ _runSafely( name: 'hls', cleanup: castHlsCache.cleanupExpired, ), _runSafely( name: 'videos', cleanup: castVideoCache.cleanupExpired, ), ]); stopwatch.stop(); debugPrint( '[CAST CACHE CLEANUP] COMPLETE ' 'maxAgeHours=24 ' 'elapsedMs=${stopwatch.elapsedMilliseconds} ' 'results=$results', ); } static Future _runSafely({ required String name, required Future Function() cleanup, }) async { try { await cleanup(); return '$name:ok'; } catch (error, stackTrace) { debugPrint( '[CAST CACHE CLEANUP] ROOT ERROR ' 'cache=$name ' 'error=$error', ); debugPrint( '[CAST CACHE CLEANUP] ROOT STACK ' 'cache=$name\n' '$stackTrace', ); return '$name:error'; } } }