77 lines
1.7 KiB
Dart
77 lines
1.7 KiB
Dart
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<void> _cleanup() async {
|
|
final stopwatch = Stopwatch()..start();
|
|
|
|
final results = await Future.wait<String>([
|
|
_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<String> _runSafely({
|
|
required String name,
|
|
required Future<void> 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';
|
|
}
|
|
}
|
|
}
|