File indexing completed on 2024-05-12 05:04:17
0001 /** 0002 * SPDX-FileCopyrightText: 2019 Black Hat <bhat@encom.eu.org> 0003 * 0004 * SPDX-License-Identifier: GPL-3.0-only 0005 */ 0006 0007 #include "clipboard.h" 0008 0009 #include "abstractaccount.h" 0010 #include "accountmanager.h" 0011 0012 #include <QClipboard> 0013 #include <QGuiApplication> 0014 0015 Clipboard::Clipboard(QObject *parent) 0016 : QObject(parent) 0017 , m_clipboard(QGuiApplication::clipboard()) 0018 { 0019 connect(m_clipboard, &QClipboard::changed, this, &Clipboard::imageChanged); 0020 } 0021 0022 bool Clipboard::hasImage() const 0023 { 0024 return !image().isNull(); 0025 } 0026 0027 QImage Clipboard::image() const 0028 { 0029 return m_clipboard->image(); 0030 } 0031 0032 QString Clipboard::saveImage() const 0033 { 0034 const QString imageDir(QStringLiteral("%1/screenshots").arg(QStandardPaths::writableLocation(QStandardPaths::CacheLocation))); 0035 const QString localPath = QStringLiteral("file://%1/%2.png").arg(imageDir, QDateTime::currentDateTime().toString(QStringLiteral("yyyy-MM-dd-hh-mm-ss"))); 0036 0037 if (!QDir().exists(imageDir)) { 0038 QDir().mkdir(imageDir); 0039 } 0040 0041 QUrl url(localPath); 0042 if (!url.isLocalFile()) { 0043 return {}; 0044 } 0045 auto image = this->image(); 0046 0047 if (image.isNull()) { 0048 return {}; 0049 } 0050 0051 if (image.save(url.toLocalFile())) { 0052 return localPath; 0053 } else { 0054 return {}; 0055 } 0056 } 0057 0058 void Clipboard::saveText(QString message) 0059 { 0060 const static QRegularExpression re(QStringLiteral("<[^>]*>")); 0061 auto *mineData = new QMimeData; // ownership is transferred to clipboard 0062 mineData->setHtml(message); 0063 mineData->setText(message.replace(re, QStringLiteral(""))); 0064 m_clipboard->setMimeData(mineData); 0065 } 0066 0067 void Clipboard::copyImage(const QUrl &url) 0068 { 0069 AccountManager::instance().selectedAccount()->get( 0070 url, 0071 false, 0072 this, 0073 [this](QNetworkReply *reply) { 0074 QImage image; 0075 image.loadFromData(reply->readAll()); 0076 0077 m_clipboard->setImage(image); 0078 }, 0079 nullptr); 0080 } 0081 0082 #include "moc_clipboard.cpp"