getImageFromClipboard method

Future<ImageWithDimensions?> getImageFromClipboard()

Get image data from the clipboard.

Implementation

Future<ImageWithDimensions?> getImageFromClipboard() async {
  final commands = _getClipboardCommands();
  final tmpDir = Platform.environment['MAGE_TMPDIR'] ?? '/tmp';
  final screenshotPath = '$tmpDir/neomage_cli_latest_screenshot.png';

  try {
    // Check for image
    final checkResult = await Process.run('bash', [
      '-c',
      commands.checkImage,
    ]);
    if (checkResult.exitCode != 0) return null;

    // Save image
    final saveResult = await Process.run('bash', ['-c', commands.saveImage]);
    if (saveResult.exitCode != 0) return null;

    // Read image
    var imageBuffer = await File(screenshotPath).readAsBytes();
    final buffer = Uint8List.fromList(imageBuffer);

    // Resize if needed
    final resized = await maybeResizeAndDownsampleImageBuffer(
      buffer,
      buffer.length,
      'png',
    );
    final base64Image = base64Encode(resized.buffer);
    final mediaType = detectImageFormatFromBase64(base64Image);

    // Cleanup (fire-and-forget)
    unawaited(Process.run('bash', ['-c', commands.deleteFile]));

    return ImageWithDimensions(
      base64: base64Image,
      mediaType: mediaType.value,
      dimensions: resized.dimensions,
    );
  } catch (_) {
    return null;
  }
}