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