checkResumeStatus static method
Check resume status for a single file
filename
- The model filename (e.g., 'gemma-2b-it.bin')
Returns ResumeStatus indicating what action should be taken
Implementation
static Future<ResumeStatus> checkResumeStatus(String filename) async {
try {
debugPrint('ResumeChecker: Checking resume status for $filename');
// 1. Check if file exists and get its state
final filePath = await ModelFileSystemManager.getModelFilePath(filename);
final file = File(filePath);
debugPrint('ResumeChecker: Checking file path: $filePath');
// List directory contents for debugging
try {
final directory = file.parent;
final directoryExists = await directory.exists();
debugPrint('ResumeChecker: Directory exists: $directoryExists - ${directory.path}');
if (directoryExists) {
final files = await directory.list().toList();
debugPrint('ResumeChecker: Directory contents (${files.length} items):');
for (final item in files) {
final name = item.path.split('/').last;
final isFile = item is File;
final size = isFile ? await item.length() : 0;
debugPrint(' - $name ${isFile ? "($size bytes)" : "(directory)"}');
}
}
} catch (e) {
debugPrint('ResumeChecker: Failed to list directory: $e');
}
final fileExists = await file.exists();
debugPrint('ResumeChecker: File exists: $fileExists for $filename');
if (!fileExists) {
debugPrint('ResumeChecker: File not found: $filename at path: $filePath');
return ResumeStatus.fileNotFound;
}
// 2. Check if file is already complete
final fileSize = await file.length();
final isValid = await ModelFileSystemManager.isFileValid(filePath);
debugPrint('ResumeChecker: File size: $fileSize, isValid: $isValid for $filename');
if (isValid && fileSize > 0) {
debugPrint('ResumeChecker: File is already complete: $filename');
return ResumeStatus.fileComplete;
}
// 3. Check if we have a registered task for this file
final taskId = await DownloadTaskRegistry.getTaskId(filename);
debugPrint('ResumeChecker: TaskId for $filename: $taskId');
if (taskId == null) {
debugPrint('ResumeChecker: No registered task for $filename - returning noTask status');
return ResumeStatus.noTask;
}
// 4. Create a task object to check resume capability
final task = DownloadTask(
taskId: taskId,
url: 'placeholder', // We don't need real URL for resume check
filename: filename,
group: UnifiedDownloadEngine.downloadGroup,
);
// 5. Check if background_downloader thinks this task can be resumed
final canResume = await _downloader.taskCanResume(task);
if (canResume) {
debugPrint('ResumeChecker: File can be resumed: $filename');
return ResumeStatus.canResume;
} else {
debugPrint('ResumeChecker: File cannot be resumed: $filename');
return ResumeStatus.cannotResume;
}
} catch (e) {
debugPrint('ResumeChecker: Error checking resume status for $filename: $e');
return ResumeStatus.error;
}
}