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"