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 task() async { final archives = (await Directory('${PackManager.assetsDirectory.path}/pack_archives') .list(recursive: true) .toList()) .whereType(); final packs = await isar.cardPackModels.where().findAll(); final toDelete = []; 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; }