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));
}
}