uploadLogs method
Implementation
Future<bool> uploadLogs() async {
try {
getEventBus().fire(MainEvent(type: EventTypeEnum.startUploadLogs));
final logFilePath = TCICConst.logFilePath;
if (logFilePath == null || logFilePath.isEmpty) {
TCICLog.error("logFilePath is empty", actionModule: ActionModule.tcicController.name, actionName: ActionName.uploadLogs.name);
return false;
}
final dir = Directory(logFilePath);
if (!await dir.exists()) {
TCICLog.error("dir not found", actionModule: ActionModule.tcicController.name, actionName: ActionName.uploadLogs.name);
return false;
}
// 获取系统临时目录
final tempDir = Directory.systemTemp;
// 构造zip文件路径
final schoolId = getSchoolInfoObs().getSchoolInfo().schoolId;
final userId = getConfig().userId;
final time = DateTime.now().millisecondsSinceEpoch;
final zipDir = Directory('${tempDir.path}/tcic_logs/$schoolId/$userId');
if (!await zipDir.exists()) {
await zipDir.create(recursive: true);
}
final zipFilePath = '${zipDir.path}/$time.zip';
TCICLog.info("zip log file path: $zipFilePath logFilePath: $logFilePath", actionModule: ActionModule.tcicController.name, actionName: ActionName.uploadLogs.name);
final startTime = DateTime.now();
// 在 isolate 中执行:筛选 + 压缩 + 写盘
// 避免回传超大 Uint8List 到 UI isolate 引发卡顿
final zipResult = await TCICIsolate.runCompute(
tcicZipLogsToFileInIsolate,
<String, Object?>{
'logDirPath': logFilePath,
'zipFilePath': zipFilePath,
'keepDays': 1,
},
debugLabel: 'tcic_zip_logs_to_file',
);
final endTime = DateTime.now();
final duration = endTime.difference(startTime).inSeconds;
final ok = (zipResult['ok'] as bool?) ?? false;
final String filePath = (zipResult['zipFilePath'] ?? "") as String;
TCICLog.info(
"zip log file duration: ${duration}s ok=$ok result=$zipResult",
actionModule: ActionModule.tcicController.name,
actionName: ActionName.uploadLogs.name,
);
if (!ok) {
TCICLog.error(
"zip log dir failed: $zipResult",
actionModule: ActionModule.tcicController.name,
actionName: ActionName.uploadLogs.name,
);
return false;
}
final zipFile = File(filePath);
TCICLog.info("log zip success: $filePath", actionModule: ActionModule.tcicController.name, actionName: ActionName.uploadLogs.name);
// 上传文件
final uploadSuccess = await uploadLogsToCos(zipFile);
return uploadSuccess;
} catch (e) {
TCICLog.error("upload logs failed: $e", actionModule: ActionModule.tcicController.name, actionName: ActionName.uploadLogs.name);
return false;
} finally {
// 无论成功/失败,都结束 loading,避免 UI 卡住
getEventBus().fire(MainEvent(type: EventTypeEnum.endUploadLogs));
}
}