zipLog method

Future<File> zipLog()

Implementation

Future<File> zipLog() async {
  try {
    // This Function only run if _cacheDirectoryPath is not initialize
    if (_cacheDirectoryPath == null) {
      await _initializeCacheDirectory(); // Call initialization if not done yet
    }
    final logFiles = Directory(_cacheDirectoryPath ?? '')
        .listSync()
        .where((file) => file is File && file.path.contains(logFilePrefix))
        .toList();

    if (logFiles.isEmpty) {
      throw Exception("No log files found to zip.");
    }

    final archive = Archive();
    for (var logFile in logFiles) {
      final file = File(logFile.path);
      final fileName = file.uri.pathSegments.last;
      final fileBytes = file.readAsBytesSync();
      archive.addFile(ArchiveFile(fileName, fileBytes.length, fileBytes));
    }

    final zipEncoder = ZipEncoder(password: zipPassword);
    final zipData = zipEncoder.encode(archive);

    final zipFilePath = '$_cacheDirectoryPath/logs.zip';
    final zipFile = File(zipFilePath)..writeAsBytesSync(zipData);

    return zipFile;
  } catch (e) {
    rethrow;
  }
}