uploadLogs method

Future<bool> uploadLogs()

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