handleDownload method
Future<void>
handleDownload(
- ArgResults argResults
)
Implementation
Future<void> handleDownload(ArgResults argResults) async {
final args = argResults.rest.sublist(1);
if (args.isEmpty) _exit('Usage: dl <file-uuid-or-path>');
await _prepareClient();
final input = args[0];
final onConflict = argResults['on-conflict'] as String;
final isUuid = RegExp(
r'^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$',
caseSensitive: false)
.hasMatch(input);
if (isUuid) {
print('\ud83d\udce5 Downloading file by UUID: $input');
try {
final result = await client.downloadFile(input);
final data = result['data'] as Uint8List;
final filename = result['filename'] as String;
final file = File(filename);
if (await file.exists() && onConflict == 'skip' && !force) {
print('\u23ed\ufe0f Skipping: $filename (exists)');
return;
}
await file.writeAsBytes(data);
print('\u2705 Downloaded: $filename (${formatSize(data.length)})');
} catch (e) {
_exit('Download failed: $e');
}
} else {
print('\ud83d\udd0d Resolving path: $input');
try {
final resolved = await client.resolvePath(input);
if (resolved['type'] != 'file') {
_exit("'$input' is not a file. Use 'download-path -r' for folders.");
}
final fileUuid = resolved['uuid'];
final filename = p.basename(input);
print('\ud83d\udce5 Downloading: $filename');
await client.downloadFile(fileUuid, savePath: filename);
print('\u2705 Downloaded: $filename');
} catch (e) {
_exit('Download failed: $e');
}
}
}