#include "clipboard.hpp" #include #include #include #include #include #include #include #include namespace ZShell::llm::clipboard { bool hasAttachment() { QClipboard* clipboard = QGuiApplication::clipboard(); if (!clipboard) return false; const QMimeData* data = clipboard->mimeData(); if (!data) return false; if (data->hasImage()) return true; for (const QUrl& url : data->urls()) if (url.isLocalFile()) return true; return false; } QStringList attachmentPaths(QString& error) { error.clear(); QClipboard* clipboard = QGuiApplication::clipboard(); const QMimeData* data = clipboard ? clipboard->mimeData() : nullptr; if (!data) { qWarning() << "clipboard: no clipboard data"; return {}; } QStringList paths; if (data->hasImage()) { const QImage image = clipboard->image(); if (image.isNull()) { error = QStringLiteral("Clipboard image could not be decoded"); return {}; } const QString tempPath = QDir::tempPath() + QStringLiteral("/zshell-pasted-image-%1.png") .arg(QDateTime::currentMSecsSinceEpoch()); if (!image.save(tempPath)) { error = QStringLiteral("Could not save the pasted image"); return {}; } paths.append(tempPath); } else if (data->hasUrls()) { for (const QUrl& url : data->urls()) if (url.isLocalFile()) paths.append(url.toLocalFile()); } if (paths.isEmpty() && (data->hasImage() || data->hasUrls())) error = QStringLiteral( "Nothing usable on the clipboard (expected an image " "or copied files)"); return paths; } } // namespace ZShell::llm::clipboard