File indexing completed on 2024-05-12 16:28:12

0001 /**
0002  * SPDX-FileCopyrightText: 2019 Black Hat <bhat@encom.eu.org>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-only
0005  */
0006 #include "clipboard.h"
0007 
0008 #include <QClipboard>
0009 #include <QDir>
0010 #include <QFileInfo>
0011 #include <QGuiApplication>
0012 #include <QImage>
0013 #include <QMimeData>
0014 #include <QRegularExpression>
0015 #include <QUrl>
0016 
0017 Clipboard::Clipboard(QObject *parent)
0018     : QObject(parent)
0019     , m_clipboard(QGuiApplication::clipboard())
0020 {
0021     connect(m_clipboard, &QClipboard::changed, this, &Clipboard::imageChanged);
0022 }
0023 
0024 bool Clipboard::hasImage() const
0025 {
0026     return !image().isNull();
0027 }
0028 
0029 QImage Clipboard::image() const
0030 {
0031     return m_clipboard->image();
0032 }
0033 
0034 bool Clipboard::saveImage(const QUrl &localPath) const
0035 {
0036     if (!localPath.isLocalFile()) {
0037         return false;
0038     }
0039 
0040     auto i = image();
0041 
0042     if (i.isNull()) {
0043         return false;
0044     }
0045 
0046     const QString path = QFileInfo(localPath.toLocalFile()).absolutePath();
0047     QDir dir;
0048     if (!dir.exists(path)) {
0049         dir.mkpath(path);
0050     }
0051 
0052     i.save(localPath.toLocalFile());
0053 
0054     return true;
0055 }
0056 
0057 void Clipboard::saveText(QString message)
0058 {
0059     const static QRegularExpression re("<[^>]*>");
0060     auto *mineData = new QMimeData; // ownership is transferred to clipboard
0061     mineData->setHtml(message);
0062     mineData->setText(message.replace(re, ""));
0063     m_clipboard->setMimeData(mineData);
0064 }