cleanupInvalidResumeStates static method

Future<int> cleanupInvalidResumeStates(
  1. ModelSpec spec
)

Clean up invalid resume states for a model

spec - The model specification to clean Returns the number of cleaned up files

Implementation

static Future<int> cleanupInvalidResumeStates(ModelSpec spec) async {
  debugPrint('ResumeChecker: Cleaning up invalid resume states for ${spec.name}');

  final statuses = await checkModelResume(spec);
  int cleanedCount = 0;

  for (final entry in statuses.entries) {
    final filename = entry.key;
    final status = entry.value;

    switch (status) {
      case ResumeStatus.cannotResume:
      case ResumeStatus.error:
        // Delete partial file (FileDownloader manages its own task records)
        try {
          await ModelFileSystemManager.deleteModelFile(filename);
          cleanedCount++;
          debugPrint('ResumeChecker: Cleaned up invalid resume state for $filename');
        } catch (e) {
          debugPrint('ResumeChecker: Failed to cleanup $filename: $e');
        }
        break;

      case ResumeStatus.noTask:
        // File exists but no task - check if it's partial
        try {
          final filePath = await ModelFileSystemManager.getModelFilePath(filename);
          final isValid = await ModelFileSystemManager.isFileValid(filePath);

          if (!isValid) {
            // Partial file without task - delete it
            await ModelFileSystemManager.deleteModelFile(filename);
            cleanedCount++;
            debugPrint('ResumeChecker: Removed orphaned partial file: $filename');
          }
        } catch (e) {
          debugPrint('ResumeChecker: Error checking orphaned file $filename: $e');
        }
        break;

      default:
        // Other statuses don't need cleanup
        break;
    }
  }

  debugPrint('ResumeChecker: Cleaned up $cleanedCount files for model ${spec.name}');
  return cleanedCount;
}