mnemo_cards/mnemo_cards_backend/lib/cron/delete_old_archives.dart

55 lines
1.4 KiB
Dart
Raw Normal View History

2025-11-16 11:25:27 +00:00
import 'dart:developer';
import 'dart:io';
import 'package:isar/isar.dart';
import 'package:mnemo_cards_backend/cron/task.dart';
import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart';
import 'package:mnemo_cards_backend/packs/pack_manager.dart';
import '../main.dart';
import 'package:path/path.dart';
class DeleteOldArchives with Task {
@override
String get name => 'delete_old_archives';
@override
Future<void> task() async {
final archives =
(await Directory('${PackManager.assetsDirectory.path}/pack_archives')
.list(recursive: true)
.toList())
.whereType<File>();
final packs = await isar.cardPackModels.where().findAll();
final toDelete = <File>[];
for (final pack in packs) {
try {
for (final archive in archives) {
final names = basename(archive.path).split('_');
if (names.first == pack.id?.toString() &&
names.last != pack.version) {
toDelete.add(archive);
}
}
} catch (e) {
print('$name on pack ${pack.id}: $e');
}
}
try {
for (final file in toDelete) {
await file.delete();
}
} catch (e, s) {
log(
'Error when deleting packs',
error: e,
stackTrace: s,
);
}
print('deleted ${toDelete.length} old archives');
}
@override
int get intervalSeconds => 60 * 60 * 3;
}