handleUpload method

Future<void> handleUpload(
  1. ArgResults argResults
)

Implementation

Future<void> handleUpload(ArgResults argResults) async {
  final sources = argResults.rest.sublist(1);
  if (sources.isEmpty) _exit('No source files specified');

  await _prepareClient();

  String targetPath = '/';
  List<String> actualSources = sources;

  if (argResults.wasParsed('target')) {
    targetPath = argResults['target'] as String;
  } else if (sources.length > 1) {
    final lastArg = sources.last;
    if (lastArg.startsWith('/') || !lastArg.contains('*')) {
      targetPath = lastArg;
      actualSources = sources.sublist(0, sources.length - 1);
    }
  }

  final recursive = argResults['recursive'] as bool;
  final onConflict = argResults['on-conflict'] as String;
  final preserveTimestamps = argResults['preserve-timestamps'] as bool;
  final include = argResults['include'] as List<String>;
  final exclude = argResults['exclude'] as List<String>;

  final batchId = config.generateBatchId('upload', actualSources, targetPath);
  print("\ud83d\udd04 Batch ID: $batchId");
  print("\ud83c\udfaf Target: $targetPath");
  var batchState = await config.loadBatchState(batchId);

  try {
    await client.upload(
      actualSources,
      targetPath,
      recursive: recursive,
      onConflict: onConflict,
      preserveTimestamps: preserveTimestamps,
      include: include,
      exclude: exclude,
      batchId: batchId,
      initialBatchState: batchState,
      saveStateCallback: (state) => config.saveBatchState(batchId, state),
    );

    await config.deleteBatchState(batchId);
    print("\u2705 Upload batch completed.");
  } catch (e) {
    _exit('Upload failed: $e');
  }
}