From 88985690c8e2606e95bc8794edaf64b6bc30ac71 Mon Sep 17 00:00:00 2001 From: ArsenArsen Date: Fri, 30 Jun 2017 16:49:12 +0200 Subject: [PATCH] Add an ImagePlus uploader --- KShare.pro | 6 ++-- uploaders/default/imgplusuploader.cpp | 52 +++++++++++++++++++++++++++ uploaders/default/imgplusuploader.hpp | 19 ++++++++++ uploaders/uploadersingleton.cpp | 2 ++ 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 uploaders/default/imgplusuploader.cpp create mode 100644 uploaders/default/imgplusuploader.hpp diff --git a/KShare.pro b/KShare.pro index fbfb2c6..1b557df 100644 --- a/KShare.pro +++ b/KShare.pro @@ -64,7 +64,8 @@ SOURCES += main.cpp\ cropeditor/drawing/ellipseitem.cpp \ hotkeyinputdialog.cpp \ cropeditor/drawing/arrowitem.cpp \ - uploaders/default/imgursettingsdialog.cpp + uploaders/default/imgursettingsdialog.cpp \ + uploaders/default/imgplusuploader.cpp HEADERS += mainwindow.hpp \ cropeditor/cropeditor.hpp \ @@ -107,7 +108,8 @@ HEADERS += mainwindow.hpp \ cropeditor/drawing/ellipseitem.hpp \ hotkeyinputdialog.hpp \ cropeditor/drawing/arrowitem.hpp \ - uploaders/default/imgursettingsdialog.hpp + uploaders/default/imgursettingsdialog.hpp \ + uploaders/default/imgplusuploader.hpp LIBS += -lavcodec -lavformat -lavutil -lswscale -lavutil diff --git a/uploaders/default/imgplusuploader.cpp b/uploaders/default/imgplusuploader.cpp new file mode 100644 index 0000000..f81e2b0 --- /dev/null +++ b/uploaders/default/imgplusuploader.cpp @@ -0,0 +1,52 @@ +#include "imgplusuploader.hpp" +#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() << "Failed to upload! Copied the response to clipboard"; + else + notifications::notify("KShare imgur Uploader ", "Uploaded to ImagePlus!"); + }); +} + +void ImgplusUploader::showSettings() { + QString text = QInputDialog::getText(0, "imgplus API key", "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/uploaders/default/imgplusuploader.hpp b/uploaders/default/imgplusuploader.hpp new file mode 100644 index 0000000..a7050c6 --- /dev/null +++ b/uploaders/default/imgplusuploader.hpp @@ -0,0 +1,19 @@ +#ifndef IMGPLUSUPLOADER_HPP +#define IMGPLUSUPLOADER_HPP + +#include + +class ImgplusUploader : public Uploader { +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/uploaders/uploadersingleton.cpp b/uploaders/uploadersingleton.cpp index 614ae2e..816ed78 100644 --- a/uploaders/uploadersingleton.cpp +++ b/uploaders/uploadersingleton.cpp @@ -11,6 +11,7 @@ #include #include #include +#include UploaderSingleton::UploaderSingleton() : QObject(), saveDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)) { @@ -37,6 +38,7 @@ UploaderSingleton::UploaderSingleton() // UPLOADERS registerUploader(new ImgurUploader); + registerUploader(new ImgplusUploader); registerUploader(new ClipboardUploader); // ---------