import 'dart:convert'; import 'dart:io'; import 'package:archive/archive.dart'; import 'package:flutter/services.dart' show rootBundle; import 'package:path/path.dart' as p; import 'package:path_provider/path_provider.dart'; import '../../core/media/gallery_source.dart'; import 'slash_command.dart'; Future sendFileAsPhoto(CommandContext ctx, File file) => ctx.sendPhotos([PickedPhoto(item: GalleryItem.fromFile(file))], ''); Future _tempFile(String extension) async { final dir = await getTemporaryDirectory(); return File( p.join( dir.path, 'qlyra_probe_${DateTime.now().microsecondsSinceEpoch}.$extension', ), ); } Future assetToTempFile( String assetPath, { required String extension, }) async { final data = await rootBundle.load(assetPath); final file = await _tempFile(extension); await file.writeAsBytes(data.buffer.asUint8List(), flush: true); return file; } Future buildProbeZipFile({ required String extension, List? prefix, }) async { final archive = Archive(); final data = utf8.encode('This is a zip, not a photo. Qlyra probe.'); archive.addFile(ArchiveFile('not_a_photo.txt', data.length, data)); final zip = ZipEncoder().encodeBytes(archive); final bytes = prefix == null ? zip : [...prefix, ...zip]; final file = await _tempFile(extension); await file.writeAsBytes(bytes, flush: true); return file; }