frosty/lib/cache_manager.dart
2025-06-14 17:09:28 -04:00

45 lines
1.2 KiB
Dart

import 'dart:io';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:path_provider/path_provider.dart';
class CustomCacheManager {
static const key = 'libCachedImageData';
static final _repo = CacheObjectProvider(databaseName: key);
static final instance = CacheManager(
Config(
key,
stalePeriod: const Duration(days: 30),
maxNrOfCacheObjects: 10000,
repo: _repo,
),
);
static Future<void> removeOrphanedCacheFiles() async {
final tempDir = await getTemporaryDirectory();
final cacheDir = Directory('${tempDir.path}/$key');
if (!await cacheDir.exists()) {
return;
}
final allFiles =
cacheDir.listSync(recursive: true).whereType<File>().toList();
await _repo.open();
final cachedObjects = await _repo.getAllObjects();
final dbFiles = cachedObjects.map((e) => e.relativePath).toSet();
final orphanedFiles = allFiles.where((file) {
final relativePath = file.path.replaceFirst('${cacheDir.path}/', '');
return !dbFiles.contains(relativePath);
}).toList();
final deletions = orphanedFiles.map((file) => file.delete()).toList();
try {
await Future.wait(deletions);
// ignore: empty_catches
} catch (e) {}
}
}