diff --git a/src/icon.qrc b/src/icon.qrc index 23c098b..62e7d4e 100644 --- a/src/icon.qrc +++ b/src/icon.qrc @@ -18,5 +18,6 @@ icons/crop.png icons/circle.png icons/highlighter.png + icons/infinity.png diff --git a/src/icons/infinity.png b/src/icons/infinity.png new file mode 100644 index 0000000..a409750 Binary files /dev/null and b/src/icons/infinity.png differ diff --git a/src/io/ioutils.cpp b/src/io/ioutils.cpp index 0f54d0e..09964c4 100644 --- a/src/io/ioutils.cpp +++ b/src/io/ioutils.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include QNetworkAccessManager ioutils::networkManager; @@ -16,6 +17,16 @@ void addLogEntry(QNetworkReply *reply, QByteArray data) { requestlogging::addEntry(ctx); } +int tasks = 0; + +void addTask() { + requestlogging::indicator::show(++tasks); +} + +void removeTask() { + requestlogging::indicator::show(--tasks); +} + void ioutils::postMultipart(QUrl target, QList> headers, QHttpMultiPart *body, @@ -25,7 +36,9 @@ void ioutils::postMultipart(QUrl target, if (header.first.toLower() != "content-type") req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); + addTask(); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + removeTask(); QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(QJsonDocument::fromJson(data), data, reply); @@ -42,7 +55,9 @@ void ioutils::postMultipartData(QUrl target, if (header.first.toLower() != "content-type") req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); + addTask(); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + removeTask(); QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(data, reply); @@ -58,7 +73,9 @@ void ioutils::getJson(QUrl target, req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.get(req); + addTask(); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + removeTask(); QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(QJsonDocument::fromJson(data), data, reply); @@ -75,7 +92,9 @@ void ioutils::postJson(QUrl target, req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); + addTask(); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + removeTask(); QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(QJsonDocument::fromJson(data), data, reply); @@ -89,7 +108,9 @@ void ioutils::getData(QUrl target, QList> headers, std:: req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.get(req); + addTask(); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + removeTask(); QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(data, reply); @@ -106,7 +127,9 @@ void ioutils::postData(QUrl target, req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.post(req, body); + addTask(); QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + removeTask(); QByteArray data = reply->readAll(); addLogEntry(reply, data); callback(data, reply); @@ -128,7 +151,6 @@ QString ioutils::methodString(QNetworkAccessManager::Operation operation) { case QNetworkAccessManager::HeadOperation: return "HEAD"; default: - // return "Dunno"; return "Unknown"; } } diff --git a/src/logs/requestlogging.cpp b/src/logs/requestlogging.cpp index 0f9ad52..b1e4d97 100644 --- a/src/logs/requestlogging.cpp +++ b/src/logs/requestlogging.cpp @@ -1,6 +1,8 @@ #include "requestlogging.hpp" #include +#include #include +#include // $type $url $status $time // $type = GET POST PATCH DELETE etc @@ -63,3 +65,7 @@ QList requestlogging::getRequests() { return ret; } + +void requestlogging::indicator::show(int count) { + MainWindow::inst()->setTrayIcon(utils::getTrayIcon(count)); +} diff --git a/src/logs/requestlogging.hpp b/src/logs/requestlogging.hpp index 73ca70b..63381e7 100644 --- a/src/logs/requestlogging.hpp +++ b/src/logs/requestlogging.hpp @@ -41,6 +41,10 @@ namespace requestlogging { QList getRequests(); void addEntry(RequestContext context); + + namespace indicator { + void show(int count); + } // namespace indicator } // namespace requestlogging #endif // REQUESTLOGGING_HPP diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index ea2184d..09217cd 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -187,3 +187,7 @@ void MainWindow::on_history_clicked() { HistoryDialog *dialog = new HistoryDialog; dialog->show(); } + +void MainWindow::setTrayIcon(QIcon icon) { + tray->setIcon(icon); +} diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index 49b4a98..f60a364 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -37,10 +37,11 @@ public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); bool valid(); - Ui::MainWindow *ui; + void setTrayIcon(QIcon icon); RecordingController *controller = new RecordingController; QSystemTrayIcon *tray; + Ui::MainWindow *ui; public slots: void rec(); diff --git a/src/src.pro b/src/src.pro index 83f37be..8a3e680 100644 --- a/src/src.pro +++ b/src/src.pro @@ -65,7 +65,6 @@ SOURCES += main.cpp\ hotkeyinputdialog.cpp \ cropeditor/drawing/arrowitem.cpp \ uploaders/default/imgursettingsdialog.cpp \ - uploaders/default/imgplusuploader.cpp \ filenamevalidator.cpp \ logs/requestlogging.cpp \ logs/historydialog.cpp \ @@ -118,7 +117,6 @@ HEADERS += mainwindow.hpp \ hotkeyinputdialog.hpp \ cropeditor/drawing/arrowitem.hpp \ uploaders/default/imgursettingsdialog.hpp \ - uploaders/default/imgplusuploader.hpp \ filenamevalidator.hpp \ logs/requestlogging.hpp \ logs/historydialog.hpp \ diff --git a/src/uploaders/default/imgplusuploader.cpp b/src/uploaders/default/imgplusuploader.cpp deleted file mode 100644 index 32a0a17..0000000 --- a/src/uploaders/default/imgplusuploader.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "imgplusuploader.hpp" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -void ImgplusUploader::doUpload(QByteArray byteArray, QString format) { - QString mime; - if (formats::normalFormatFromName(format) != formats::Normal::None) - mime = formats::normalFormatMIME(formats::normalFormatFromName(format)); - else - mime = formats::recordingFormatMIME(formats::recordingFormatFromName(format)); - QHttpMultiPart *multipart = new QHttpMultiPart(QHttpMultiPart::FormDataType); - QHttpPart imagePart; - imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"file\"; filename=\"image." + format + "\""); - imagePart.setHeader(QNetworkRequest::ContentTypeHeader, mime); - QByteArray *data = new QByteArray; - data->swap(byteArray); - QBuffer *buff = new QBuffer(data); - buff->open(QIODevice::ReadOnly); - imagePart.setBodyDevice(buff); - multipart->append(imagePart); - - QHttpPart keyPart; - keyPart.setHeader(QNetworkRequest::ContentDispositionHeader, "form-data; name=\"api_key\""); - keyPart.setBody(settings::settings().value("imgplus/apikey").toString().toUtf8()); - multipart->append(keyPart); - - ioutils::postMultipartData(QUrl("http://imgpl.us/api/upload"), { QPair("Accept", "application/json") }, - multipart, [](QByteArray link, QNetworkReply *) { - QApplication::clipboard()->setText(QString::fromUtf8(link)); - if (!link.startsWith("http")) - qCritical() << QObject::tr("Failed to upload! Copied the response to clipboard"); - else - notifications::notify(QObject::tr("KShare imgplus Uploader"), - QObject::tr("Uploaded to ImagePlus!")); - }); -} - -void ImgplusUploader::showSettings() { - QString text = QInputDialog::getText(0, tr("imgplus API key"), tr("Enter the imgpl.us API key (Found in Settings)"), - QLineEdit::Normal, settings::settings().value("imgplus/apikey").toString()); - if (!text.isNull()) settings::settings().setValue("imgplus/apikey", text); -} - -bool ImgplusUploader::validate() { - return settings::settings().value("imgplus/apikey").userType() == QMetaType::QString; -} diff --git a/src/uploaders/default/imgplusuploader.hpp b/src/uploaders/default/imgplusuploader.hpp deleted file mode 100644 index 7ef3836..0000000 --- a/src/uploaders/default/imgplusuploader.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef IMGPLUSUPLOADER_HPP -#define IMGPLUSUPLOADER_HPP - -#include -#include - -class ImgplusUploader : public Uploader { - Q_DECLARE_TR_FUNCTIONS(ImgplusUploader) -public: - QString name() override { - return "ImagePlus"; - } - QString description() override { - return "imgpl.us uploader"; - } - void doUpload(QByteArray byteArray, QString format) override; - void showSettings() override; - bool validate() override; -}; - -#endif // IMGPLUSUPLOADER_HPP diff --git a/src/uploaders/uploadersingleton.cpp b/src/uploaders/uploadersingleton.cpp index 5bf2f71..0b4426a 100644 --- a/src/uploaders/uploadersingleton.cpp +++ b/src/uploaders/uploadersingleton.cpp @@ -12,7 +12,6 @@ #include #include #include -#include UploaderSingleton::UploaderSingleton() : QObject() { updateSaveSettings(); @@ -31,7 +30,6 @@ UploaderSingleton::UploaderSingleton() : QObject() { // UPLOADERS registerUploader(new ImgurUploader); - registerUploader(new ImgplusUploader); registerUploader(new ClipboardUploader); // --------- diff --git a/src/utils.cpp b/src/utils.cpp index 65ae96b..a340e33 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -183,3 +183,30 @@ void utils::externalScreenshotActive(std::function callback) { }); process->start(args.takeFirst(), args); } + +QIcon defaultIcon() { + static QIcon icon = QIcon(":/icons/icon.png"); + return icon; +} + +QIcon infinity() { + static QIcon icon = QIcon(":/icons/infinity.png"); + return icon; +} + +QIcon utils::getTrayIcon(int num) { + if (!num) { + return defaultIcon(); + } else if (num < 100) { + QPixmap unscaled = utils::renderText(QString::number(num), 0, Qt::lightGray, Qt::black); + int dim = qMax(unscaled.width(), unscaled.height()); + QPixmap scaled(dim, dim); + scaled.fill(Qt::lightGray); + QPainter *painter = new QPainter(&scaled); + painter->drawPixmap((dim / 2) - (unscaled.width() / 2), 0, unscaled); + delete painter; + return scaled; + } else { + return infinity(); + } +} diff --git a/src/utils.hpp b/src/utils.hpp index f4c42a1..b563ca3 100644 --- a/src/utils.hpp +++ b/src/utils.hpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -20,6 +21,7 @@ namespace utils { void externalScreenshot(std::function callback); void externalScreenshotActive(std::function callback); QString randomString(int length); + QIcon getTrayIcon(int num); } // namespace utils #endif // UTILS_HPP