diff --git a/src/io/ioutils.cpp b/src/io/ioutils.cpp index 09964c4..f74a088 100644 --- a/src/io/ioutils.cpp +++ b/src/io/ioutils.cpp @@ -8,11 +8,12 @@ QNetworkAccessManager ioutils::networkManager; -void addLogEntry(QNetworkReply *reply, QByteArray data) { +void addLogEntry(QNetworkReply *reply, QByteArray data, QString filename) { requestlogging::RequestContext ctx; ctx.reply = reply; ctx.response = data; + ctx.filename = filename; requestlogging::addEntry(ctx); } @@ -30,6 +31,7 @@ void removeTask() { void ioutils::postMultipart(QUrl target, QList> headers, QHttpMultiPart *body, + QString filename, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { @@ -37,10 +39,10 @@ void ioutils::postMultipart(QUrl target, } QNetworkReply *reply = networkManager.post(req, body); addTask(); - QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + QObject::connect(reply, &QNetworkReply::finished, [reply, callback, filename] { removeTask(); QByteArray data = reply->readAll(); - addLogEntry(reply, data); + addLogEntry(reply, data, filename); callback(QJsonDocument::fromJson(data), data, reply); delete reply; }); @@ -49,6 +51,7 @@ void ioutils::postMultipart(QUrl target, void ioutils::postMultipartData(QUrl target, QList> headers, QHttpMultiPart *body, + QString filename, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { @@ -56,10 +59,10 @@ void ioutils::postMultipartData(QUrl target, } QNetworkReply *reply = networkManager.post(req, body); addTask(); - QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + QObject::connect(reply, &QNetworkReply::finished, [reply, callback, filename] { removeTask(); QByteArray data = reply->readAll(); - addLogEntry(reply, data); + addLogEntry(reply, data, filename); callback(data, reply); delete reply; }); @@ -67,6 +70,7 @@ void ioutils::postMultipartData(QUrl target, void ioutils::getJson(QUrl target, QList> headers, + QString filename, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { @@ -74,10 +78,10 @@ void ioutils::getJson(QUrl target, } QNetworkReply *reply = networkManager.get(req); addTask(); - QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + QObject::connect(reply, &QNetworkReply::finished, [reply, callback, filename] { removeTask(); QByteArray data = reply->readAll(); - addLogEntry(reply, data); + addLogEntry(reply, data, filename); callback(QJsonDocument::fromJson(data), data, reply); reply->deleteLater(); }); @@ -86,6 +90,7 @@ void ioutils::getJson(QUrl target, void ioutils::postJson(QUrl target, QList> headers, QByteArray body, + QString filename, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { @@ -93,26 +98,26 @@ void ioutils::postJson(QUrl target, } QNetworkReply *reply = networkManager.post(req, body); addTask(); - QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + QObject::connect(reply, &QNetworkReply::finished, [reply, callback, filename] { removeTask(); QByteArray data = reply->readAll(); - addLogEntry(reply, data); + addLogEntry(reply, data, filename); callback(QJsonDocument::fromJson(data), data, reply); delete reply; }); } -void ioutils::getData(QUrl target, QList> headers, std::function callback) { +void ioutils::getData(QUrl target, QList> headers, QString filename, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { req.setRawHeader(header.first.toUtf8(), header.second.toUtf8()); } QNetworkReply *reply = networkManager.get(req); addTask(); - QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + QObject::connect(reply, &QNetworkReply::finished, [reply, callback, filename] { removeTask(); QByteArray data = reply->readAll(); - addLogEntry(reply, data); + addLogEntry(reply, data, filename); callback(data, reply); delete reply; }); @@ -121,6 +126,7 @@ void ioutils::getData(QUrl target, QList> headers, std:: void ioutils::postData(QUrl target, QList> headers, QByteArray body, + QString filename, std::function callback) { QNetworkRequest req(target); for (auto header : headers) { @@ -128,10 +134,10 @@ void ioutils::postData(QUrl target, } QNetworkReply *reply = networkManager.post(req, body); addTask(); - QObject::connect(reply, &QNetworkReply::finished, [reply, callback] { + QObject::connect(reply, &QNetworkReply::finished, [reply, callback, filename] { removeTask(); QByteArray data = reply->readAll(); - addLogEntry(reply, data); + addLogEntry(reply, data, filename); callback(data, reply); delete reply; }); diff --git a/src/io/ioutils.hpp b/src/io/ioutils.hpp index 36a9f80..d884a3d 100644 --- a/src/io/ioutils.hpp +++ b/src/io/ioutils.hpp @@ -11,20 +11,24 @@ namespace ioutils { extern QNetworkAccessManager networkManager; void getJson(QUrl target, QList> headers, + QString filename, std::function callback); void postJson(QUrl target, QList> headers, QByteArray body, + QString filename, std::function callback); - void getData(QUrl target, QList> headers, std::function callback); - void postData(QUrl target, QList> headers, QByteArray body, std::function callback); + void getData(QUrl target, QList> headers, QString filename, std::function callback); + void postData(QUrl target, QList> headers, QByteArray body, QString filename, std::function callback); void postMultipart(QUrl target, QList> headers, QHttpMultiPart *body, + QString filename, std::function callback); void postMultipartData(QUrl target, QList> headers, QHttpMultiPart *body, + QString filename, std::function callback); QString methodString(QNetworkAccessManager::Operation operation); } // namespace ioutils diff --git a/src/logs/historydialog.cpp b/src/logs/historydialog.cpp deleted file mode 100644 index 383661e..0000000 --- a/src/logs/historydialog.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "historydialog.hpp" -#include "requestlogging.hpp" -#include "ui_historydialog.h" - -#include - -using requestlogging::LoggedRequest; - -HistoryDialog::HistoryDialog(QWidget *parent) : QDialog(parent), ui(new Ui::HistoryDialog) { - ui->setupUi(this); - setAttribute(Qt::WA_DeleteOnClose); - ui->treeWidget->setColumnWidth(0, 50); - ui->treeWidget->setColumnWidth(1, 150); - ui->treeWidget->setColumnWidth(2, 50); - ui->treeWidget->setColumnWidth(3, 100); - - QList requests = requestlogging::getRequests(); - for (LoggedRequest req : requests) { - ui->treeWidget->addTopLevelItem( - new QTreeWidgetItem({ req.getType(), req.getUrl(), QString::number(req.getResponseCode()), req.getTime() + " UTC" })); - } -} - -HistoryDialog::~HistoryDialog() { - delete ui; -} - -void HistoryDialog::on_treeWidget_doubleClicked(const QModelIndex &) { - QString file = ui->treeWidget->currentItem()->text(3); - file = settings::dir().absoluteFilePath("responses/" + file.left(file.length() - 4)); - - QFile dataFile(file); - if (!dataFile.open(QIODevice::ReadOnly)) return; - MonospaceTextDialog *dialog = new MonospaceTextDialog(file, dataFile.readAll()); - dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->show(); -} diff --git a/src/logs/historydialog.hpp b/src/logs/historydialog.hpp deleted file mode 100644 index eb10901..0000000 --- a/src/logs/historydialog.hpp +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef HISTORYDIALOG_H -#define HISTORYDIALOG_H - -#include - -namespace Ui { - class HistoryDialog; -} - -class HistoryDialog : public QDialog { - Q_OBJECT - -public: - explicit HistoryDialog(QWidget *parent = 0); - ~HistoryDialog(); - -private slots: - void on_treeWidget_doubleClicked(const QModelIndex &); - -private: - Ui::HistoryDialog *ui; -}; - -#endif // HISTORYDIALOG_H diff --git a/src/logs/historydialog.ui b/src/logs/historydialog.ui deleted file mode 100644 index 39d98ff..0000000 --- a/src/logs/historydialog.ui +++ /dev/null @@ -1,88 +0,0 @@ - - - HistoryDialog - - - - 0 - 0 - 400 - 300 - - - - Request History - - - - - - - Type - - - - - URL - - - - - Status - - - - - Time - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - - - - - - - buttonBox - accepted() - HistoryDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - HistoryDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/logs/requestlogging.cpp b/src/logs/requestlogging.cpp index b1e4d97..8f5c742 100644 --- a/src/logs/requestlogging.cpp +++ b/src/logs/requestlogging.cpp @@ -4,6 +4,9 @@ #include #include +#include "mainwindow.hpp" +#include "ui_mainwindow.h" + // $type $url $status $time // $type = GET POST PATCH DELETE etc // $url = request target @@ -37,6 +40,7 @@ void requestlogging::addEntry(RequestContext context) { QTextStream(&requestFile) << ioutils::methodString(context.reply->operation()) << " " // $type << context.reply->url().toString().replace(" ", "%20") << " " // $url + << context.filename.replace(" ", "_") << " " // $filename << context.reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt() << " " // $status << timeNow.replace(" ", "_") << endl << flush; // $time @@ -57,9 +61,11 @@ QList requestlogging::getRequests() { QTextStream stream(&line); stream >> r.type; stream >> r.url; + stream >> r.filename; stream >> r.responseCode; stream >> r.time; r.time = r.time.replace("_", " "); + r.filename = r.filename.replace("_", " "); ret.append(r); } diff --git a/src/logs/requestlogging.hpp b/src/logs/requestlogging.hpp index 63381e7..4ec2b83 100644 --- a/src/logs/requestlogging.hpp +++ b/src/logs/requestlogging.hpp @@ -3,6 +3,7 @@ #include #include +#include #include @@ -10,6 +11,7 @@ namespace requestlogging { struct RequestContext { QByteArray response; QNetworkReply *reply; + QString filename; }; class LoggedRequest { @@ -19,6 +21,9 @@ namespace requestlogging { QString getUrl() { return url; } + QString getFilename() { + return filename; + } QString getType() { return type; } @@ -34,6 +39,7 @@ namespace requestlogging { private: QString url; + QString filename; QString type; QString time; int responseCode; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1c83b4a..d6aa709 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -10,14 +10,22 @@ #include #include #include -#include #include #include #include #include +#include +#include +#include +#include +#include +#include +#include MainWindow *MainWindow::instance; +using requestlogging::LoggedRequest; + void MainWindow::rec() { if (controller->isRunning()) return; auto f = static_cast( @@ -94,7 +102,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi connect(recoff, &QAction::triggered, controller, &RecordingController::end); connect(recabort, &QAction::triggered, controller, &RecordingController::abort); connect(about, &QAction::triggered, this, &MainWindow::on_actionAbout_triggered); - connect(ui->settings, &QPushButton::clicked, this, &MainWindow::on_actionSettings_triggered); + + connect(ui->settingsButton, &QPushButton::clicked, this, &MainWindow::on_actionSettings_triggered); + connect(ui->fullscreenButton, &QPushButton::clicked, this, [] { screenshotter::fullscreenDelayed(); }); + connect(ui->areaButton, &QPushButton::clicked, this, [] { screenshotter::areaDelayed(); }); + connect(ui->aboutButton, &QPushButton::clicked, this, &MainWindow::on_actionAbout_triggered); + connect(ui->screenshotFolderButton, &QPushButton::clicked, this, &MainWindow::openScreenshotFolder); + connect(ui->colorPickerButton, &QPushButton::clicked, this, [] { ColorPickerScene::showPicker(); }); tray->setContextMenu(menu); @@ -110,6 +124,12 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi for (auto err : errors) ui->logBox->addItem(QString("ERROR: ") + err.what()); setWindowTitle("KShare v" + QApplication::applicationVersion()); val = true; + + QList requests = requestlogging::getRequests(); + for (LoggedRequest req : requests) { + ui->treeWidget->addTopLevelItem( + new QTreeWidgetItem({ QString::number(req.getResponseCode()), req.getFilename(), req.getUrl(), req.getTime() + " UTC" })); + } } MainWindow::~MainWindow() { @@ -189,11 +209,43 @@ void MainWindow::on_actionAbort_triggered() { controller->abort(); } -void MainWindow::on_history_clicked() { - HistoryDialog *dialog = new HistoryDialog; +void MainWindow::on_treeWidget_doubleClicked(const QModelIndex &) { + QString file = ui->treeWidget->currentItem()->text(3); + file = settings::dir().absoluteFilePath("responses/" + file.left(file.length() - 4)); + + QFile dataFile(file); + if (!dataFile.open(QIODevice::ReadOnly)) return; + MonospaceTextDialog *dialog = new MonospaceTextDialog(file, dataFile.readAll()); + dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->show(); } +void MainWindow::openScreenshotFolder() { + QDir saveDir; + switch (settings::settings().value("saveLocation", 1).toInt()) { + case 0: + saveDir = QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); + if (QStandardPaths::writableLocation(QStandardPaths::PicturesLocation).isEmpty()) { + qFatal("%s", tr("Cannot determine location for pictures").toLocal8Bit().constData()); + } + break; + case 1: + if (QStandardPaths::writableLocation(QStandardPaths::HomeLocation).isEmpty()) { + qFatal("%s", tr("Cannot determine location of your home directory").toLocal8Bit().constData()); + } + saveDir = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/Screenshots"; + break; + default: + qFatal("%s", tr("Invalid config [saveLocation not int or is not in range]").toLocal8Bit().constData()); + return; + case 2: + // Do not Save images + return; + } + + QDesktopServices::openUrl(QUrl::fromLocalFile(saveDir.absolutePath())); +} + void MainWindow::setTrayIcon(QIcon icon) { tray->setIcon(icon); } diff --git a/src/mainwindow.hpp b/src/mainwindow.hpp index f60a364..8b4c7e8 100644 --- a/src/mainwindow.hpp +++ b/src/mainwindow.hpp @@ -30,7 +30,8 @@ private slots: void on_actionAbout_triggered(); void on_actionActive_window_triggered(); void on_actionAbort_triggered(); - void on_history_clicked(); + void openScreenshotFolder(); + void on_treeWidget_doubleClicked(const QModelIndex &); public: static MainWindow *inst(); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 73d8a13..16aa810 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -6,8 +6,8 @@ 0 0 - 513 - 328 + 760 + 363 @@ -25,30 +25,131 @@ - - - - Settings + + + + Qt::Vertical - - - - Log - - - - - - - + + + + + + Copy Clipboard + + + + + + + Settings + + + + + + + Area + + + + + + + Open color picker + + + + + + + About + + + + + + + Fullscreen + + + + + + + Open Screenshot Folder + + + + - - - - Open request history + + + + 0 + + + Request History + + + + + + true + + + false + + + false + + + + Status + + + + + Filename + + + + + URL + + + + + Time + + + + + + + + + Log + + + + + + false + + + + 0 + 0 + + + + + + @@ -59,7 +160,7 @@ 0 0 - 513 + 760 23 @@ -72,20 +173,6 @@ - - - Scree&nshot - - - - - - - - &Utilities - - - &Recording @@ -95,8 +182,6 @@ - - @@ -156,6 +241,7 @@ + diff --git a/src/src.pro b/src/src.pro index 75fb9d3..cd46ca1 100644 --- a/src/src.pro +++ b/src/src.pro @@ -67,7 +67,6 @@ SOURCES += main.cpp\ uploaders/default/imgursettingsdialog.cpp \ filenamevalidator.cpp \ logs/requestlogging.cpp \ - logs/historydialog.cpp \ monospacetextdialog.cpp \ cropeditor/selectionrectangle.cpp \ screenoverlay/screenoverlayview.cpp \ @@ -119,7 +118,6 @@ HEADERS += mainwindow.hpp \ uploaders/default/imgursettingsdialog.hpp \ filenamevalidator.hpp \ logs/requestlogging.hpp \ - logs/historydialog.hpp \ monospacetextdialog.hpp \ cropeditor/selectionrectangle.hpp \ screenoverlay/screenoverlayview.hpp \ @@ -185,7 +183,6 @@ FORMS += mainwindow.ui \ aboutbox.ui \ hotkeyinputdialog.ui \ uploaders/default/imgursettingsdialog.ui \ - logs/historydialog.ui \ monospacetextdialog.ui \ screenoverlay/screenoverlaysettings.ui diff --git a/src/uploaders/customuploader.cpp b/src/uploaders/customuploader.cpp index c7178a1..2640b92 100644 --- a/src/uploaders/customuploader.cpp +++ b/src/uploaders/customuploader.cpp @@ -266,7 +266,7 @@ QJsonObject recurseAndReplace(QJsonObject &body, QByteArray &data, QString forma return o; } -void CustomUploader::doUpload(QByteArray imgData, QString format) { +void CustomUploader::doUpload(QByteArray imgData, QString format, QString filename) { auto h = getHeaders(headers, format, this->rFormat); QByteArray data; if (base64) imgData = imgData.toBase64(QByteArray::Base64UrlEncoding); @@ -337,7 +337,7 @@ void CustomUploader::doUpload(QByteArray imgData, QString format) { switch (method) { case HttpMethod::POST: if (returnPathspec == "|") { - ioutils::postMultipartData(target, h, multipart, + ioutils::postMultipartData(target, h, multipart, filename, [&, buffersToDelete, arraysToDelete](QByteArray result, QNetworkReply *) { QApplication::clipboard()->setText(QString::fromUtf8(result)); for (auto buffer : buffersToDelete) buffer->deleteLater(); @@ -347,7 +347,7 @@ void CustomUploader::doUpload(QByteArray imgData, QString format) { tr("Copied upload result to clipboard!")); }); } else { - ioutils::postMultipart(target, h, multipart, + ioutils::postMultipart(target, h, multipart, filename, [&, buffersToDelete, arraysToDelete](QJsonDocument result, QByteArray data, QNetworkReply *) { for (auto buffer : buffersToDelete) buffer->deleteLater(); for (auto arr : arraysToDelete) delete arr; @@ -367,13 +367,13 @@ void CustomUploader::doUpload(QByteArray imgData, QString format) { switch (method) { case HttpMethod::POST: if (returnPathspec == "|") { - ioutils::postData(target, h, data, [&](QByteArray result, QNetworkReply *) { + ioutils::postData(target, h, data, filename, [&](QByteArray result, QNetworkReply *) { QApplication::clipboard()->setText(QString::fromUtf8(result)); playSuccessSound(); notifications::notify(tr("KShare Custom Uploader ") + name(), tr("Copied upload result to clipboard!")); }); } else { - ioutils::postJson(target, h, data, [&](QJsonDocument result, QByteArray data, QNetworkReply *) { + ioutils::postJson(target, h, data, filename, [&](QJsonDocument result, QByteArray data, QNetworkReply *) { parseResult(result, data, returnPathspec, name()); }); } diff --git a/src/uploaders/customuploader.hpp b/src/uploaders/customuploader.hpp index 7b8bdcb..3312253 100644 --- a/src/uploaders/customuploader.hpp +++ b/src/uploaders/customuploader.hpp @@ -18,7 +18,7 @@ public: CustomUploader(QString absFilePath); QString name(); QString description(); - void doUpload(QByteArray imgData, QString format); + void doUpload(QByteArray imgData, QString format, QString filename); private: double limit = -1; diff --git a/src/uploaders/default/clipboarduploader.cpp b/src/uploaders/default/clipboarduploader.cpp index bbb2cfd..25d1c12 100644 --- a/src/uploaders/default/clipboarduploader.cpp +++ b/src/uploaders/default/clipboarduploader.cpp @@ -5,8 +5,9 @@ #include #include #include +#include -void ClipboardUploader::doUpload(QByteArray imgData, QString format) { +void ClipboardUploader::doUpload(QByteArray imgData, QString format, QString filename) { auto f = formats::recordingFormatFromName(format); if (f != formats::Recording::None) { auto data = new QMimeData(); diff --git a/src/uploaders/default/clipboarduploader.hpp b/src/uploaders/default/clipboarduploader.hpp index 07e78f0..6e71f7f 100644 --- a/src/uploaders/default/clipboarduploader.hpp +++ b/src/uploaders/default/clipboarduploader.hpp @@ -15,7 +15,7 @@ public: return "Copies the image to clipboard"; } - void doUpload(QByteArray imgData, QString format); + void doUpload(QByteArray imgData, QString format, QString filename); }; #endif // CLIPBOARDUPLOADER_HPP diff --git a/src/uploaders/default/imgursettingsdialog.cpp b/src/uploaders/default/imgursettingsdialog.cpp index fbaa65e..987bb64 100644 --- a/src/uploaders/default/imgursettingsdialog.cpp +++ b/src/uploaders/default/imgursettingsdialog.cpp @@ -45,6 +45,7 @@ void ImgurSettingsDialog::on_authorize_clicked() { ioutils::postJson(QUrl("https://api.imgur.com/oauth2/token"), QList>({ QPair("Content-Type", "applicaton/json") }), QJsonDocument::fromVariant(object.toVariantMap()).toJson(), + "", [&](QJsonDocument response, QByteArray, QNetworkReply *r) { if (r->error() != QNetworkReply::NoError || !response.isObject()) { ui->buttonBox->setEnabled(true); diff --git a/src/uploaders/default/imguruploader.cpp b/src/uploaders/default/imguruploader.cpp index 90722ce..37e43c2 100644 --- a/src/uploaders/default/imguruploader.cpp +++ b/src/uploaders/default/imguruploader.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -25,15 +26,15 @@ struct SegfaultWorkaround { // I'm a scrub for doing this ioutils::postJson( QUrl("https://api.imgur.com/oauth2/token"), QList>({ QPair("Content-Type", "applicaton/json") }), - QJsonDocument::fromVariant(object.toVariantMap()).toJson(), [&](QJsonDocument response, QByteArray, QNetworkReply *r) { + QJsonDocument::fromVariant(object.toVariantMap()).toJson(), "", [&](QJsonDocument response, QByteArray, QNetworkReply *r) { qDebug() << response; if (r->error() != QNetworkReply::NoError || !response.isObject()) { - dis->handleSend(QStringLiteral("Client-ID 8a98f183fc895da"), mime, byteArray); + dis->handleSend(QStringLiteral("Client-ID 8a98f183fc895da"), mime, byteArray, ""); return; } QJsonObject res = response.object(); if (res.value("success").toBool()) { - dis->handleSend(QStringLiteral("Client-ID 8a98f183fc895da"), mime, byteArray); + dis->handleSend(QStringLiteral("Client-ID 8a98f183fc895da"), mime, byteArray, ""); return; } @@ -42,7 +43,7 @@ struct SegfaultWorkaround { // I'm a scrub for doing this settings::settings().setValue("imgur/refresh", res["refresh_token"].toString()); settings::settings().setValue("imgur/access", token); - dis->handleSend(token.prepend("Bearer "), mime, byteArray); + dis->handleSend(token.prepend("Bearer "), mime, byteArray, ""); QScopedPointer(this); }); } @@ -53,7 +54,7 @@ private: QString mime; }; // I feel terrible for making this. I am sorry, reader -void ImgurUploader::doUpload(QByteArray byteArray, QString format) { +void ImgurUploader::doUpload(QByteArray byteArray, QString format, QString filename) { if (byteArray.size() > 1e+7) { notifications::notify(tr("KShare imgur Uploader"), tr("Failed upload! Image too big")); return; @@ -70,20 +71,20 @@ void ImgurUploader::doUpload(QByteArray byteArray, QString format) { if (QDateTime::currentDateTimeUtc() > expireTime) { new SegfaultWorkaround(byteArray, this, mime); } else - handleSend("Bearer " + settings::settings().value("imgur/access").toString(), mime, byteArray); + handleSend("Bearer " + settings::settings().value("imgur/access").toString(), mime, byteArray, filename); } else - handleSend(QStringLiteral("Client-ID 8a98f183fc895da"), mime, byteArray); + handleSend(QStringLiteral("Client-ID 8a98f183fc895da"), mime, byteArray, filename); } void ImgurUploader::showSettings() { (new ImgurSettingsDialog())->show(); } -void ImgurUploader::handleSend(QString auth, QString mime, QByteArray byteArray) { +void ImgurUploader::handleSend(QString auth, QString mime, QByteArray byteArray, QString filename) { ioutils::postJson(QUrl("https://api.imgur.com/3/image"), QList>() << QPair("Content-Type", mime.toUtf8()) << QPair("Authorization", auth), - byteArray, [byteArray, this, mime](QJsonDocument res, QByteArray, QNetworkReply *r) { + byteArray, filename, [byteArray, this, mime](QJsonDocument res, QByteArray, QNetworkReply *r) { QString result = res.object()["data"].toObject()["link"].toString(); if (r->error() == QNetworkReply::ContentAccessDenied) { new SegfaultWorkaround(byteArray, this, mime); diff --git a/src/uploaders/default/imguruploader.hpp b/src/uploaders/default/imguruploader.hpp index ef8cc87..b65123a 100644 --- a/src/uploaders/default/imguruploader.hpp +++ b/src/uploaders/default/imguruploader.hpp @@ -15,11 +15,11 @@ public: QString description() override { return "imgur.com uploader"; } - void doUpload(QByteArray byteArray, QString) override; + void doUpload(QByteArray byteArray, QString, QString filename) override; void showSettings() override; private: - void handleSend(QString auth, QString mime, QByteArray byteArray); + void handleSend(QString auth, QString mime, QByteArray byteArray, QString filename); void playSuccessSound(); void playErrorSound(); }; diff --git a/src/uploaders/uploader.hpp b/src/uploaders/uploader.hpp index 357c852..4f1c590 100644 --- a/src/uploaders/uploader.hpp +++ b/src/uploaders/uploader.hpp @@ -6,7 +6,7 @@ class Uploader { public: - virtual void doUpload(QByteArray imgData, QString format) = 0; + virtual void doUpload(QByteArray imgData, QString format, QString filename) = 0; virtual QString name() = 0; virtual QString description() = 0; virtual void showSettings() { diff --git a/src/uploaders/uploadersingleton.cpp b/src/uploaders/uploadersingleton.cpp index f12b21d..16d8718 100644 --- a/src/uploaders/uploadersingleton.cpp +++ b/src/uploaders/uploadersingleton.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -72,7 +73,8 @@ void UploaderSingleton::upload(QPixmap pixmap) { playSound(); pixmap.save(file, format.toLocal8Bit().constData(), settings::settings().value("imageQuality", -1).toInt()); file->seek(0); - u->doUpload(file->readAll(), format); + QFileInfo fileInfo(file->fileName()); + u->doUpload(file->readAll(), format, fileInfo.fileName()); } else notifications::notify(tr("KShare - Failed to save picture"), file->errorString(), QSystemTrayIcon::Warning); delete file; @@ -94,8 +96,9 @@ void UploaderSingleton::upload(QByteArray img, QString format) { file->write(img); file->close(); } + QFileInfo fileInfo(file->fileName()); delete file; - uploaders.value(uploader)->doUpload(img, format); + uploaders.value(uploader)->doUpload(img, format, fileInfo.fileName()); } void UploaderSingleton::upload(QFile &img, QString format) { @@ -105,8 +108,9 @@ void UploaderSingleton::upload(QFile &img, QString format) { formatter::format(settings::settings().value("fileFormat", "Screenshot %(yyyy-MM-dd HH-mm-ss)date.%ext").toString(), format.toLower())))) { playSound(); + QFileInfo fileInfo(img.fileName()); if (img.open(QFile::ReadWrite)) - uploaders.value(uploader)->doUpload(img.readAll(), format); + uploaders.value(uploader)->doUpload(img.readAll(), format, fileInfo.fileName()); else notifications::notify(tr("KShare - Failed to save picture"), img.errorString(), QSystemTrayIcon::Warning); } else