gallery_aves_0.98/lib/services/cast/cast_cache_cleanup.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';
}
}
}