filesZip static method

ChartExportFile filesZip(
  1. Iterable<ChartExportFile> files, {
  2. String filename = defaultExportFilename,
  3. Map<String, Object?> metadata = const {},
})

Bundle arbitrary export files into a ZIP file.

Implementation

static ChartExportFile filesZip(
  Iterable<ChartExportFile> files, {
  String filename = defaultExportFilename,
  Map<String, Object?> metadata = const {},
}) {
  final resolvedFiles = files.toList(growable: false);
  final zipBytes = ChartZipStoreWriter.writeFiles(
    resolvedFiles.map(
      (file) => ChartZipStoreFile(name: file.filename, bytes: file.bytes),
    ),
  );
  final totalSourceSizeBytes = resolvedFiles.fold<int>(
    0,
    (total, file) => total + file.sizeBytes,
  );

  return ChartExportFile(
    filename: ChartExportFilename.withExtension(filename, 'zip'),
    mimeType: mimeType,
    bytes: zipBytes,
    metadata: {
      ...metadata,
      'kind': 'chartExportArchive',
      'schemaVersion': ChartExportManifest.schemaVersion,
      'fileCount': resolvedFiles.length,
      'totalSourceSizeBytes': totalSourceSizeBytes,
      'archiveSizeBytes': zipBytes.length,
      'files': [for (final file in resolvedFiles) file.toMetadataJson()],
    },
  );
}