getCachedMetaDataStatus method
根据本地缓存文件判定当前缓存状态。 若 success.json 存在,会进一步校验其中引用的白板视频、老师视频、课件图片是否均在本地存在, 任一文件缺失则删除 success.json 并返回未缓存。
Implementation
Future<CacheStatusEnum> getCachedMetaDataStatus(String classId) async {
final cacheDir = await _ensureCacheDir();
final safeId = _safeId(classId);
final successPath = p.join(cacheDir.path, '$safeId-success.json');
final successFile = File(successPath);
if (await successFile.exists()) {
final valid = await _validateSuccessJsonFiles(successFile);
if (!valid) {
try {
await successFile.delete();
} catch (_) {}
return CacheStatusEnum.notCached;
}
return CacheStatusEnum.cachedSuccess;
}
if (await File(p.join(cacheDir.path, '$safeId-failed.json')).exists()) {
return CacheStatusEnum.cachedFailed;
}
final metaPath = p.join(cacheDir.path, '$safeId.json');
if (await File(metaPath).exists()) {
// 仅当内存中标记为「正在下载」才视为 caching,否则为上次进程被杀导致的残留,清理并视为未缓存
if (_downloadingClassIds.contains(classId)) {
return CacheStatusEnum.caching;
}
try {
await File(metaPath).delete();
final classCacheDir = Directory(p.join(cacheDir.path, safeId));
if (await classCacheDir.exists()) {
await classCacheDir.delete(recursive: true);
}
} catch (_) {}
return CacheStatusEnum.notCached;
}
return CacheStatusEnum.notCached;
}