54 lines
1.4 KiB
Dart
54 lines
1.4 KiB
Dart
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;
|
|
}
|