Add an ImagePlus uploader

This commit is contained in:
ArsenArsen 2017-06-30 16:49:12 +02:00
parent 6ab5452fb6
commit 88985690c8
4 changed files with 77 additions and 2 deletions

View File

@ -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

View File

@ -0,0 +1,52 @@
#include "imgplusuploader.hpp"
#include <QApplication>
#include <QBuffer>
#include <QClipboard>
#include <QHttpMultiPart>
#include <QInputDialog>
#include <formats.hpp>
#include <io/ioutils.hpp>
#include <settings.hpp>
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<QString, QString>("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;
}

View File

@ -0,0 +1,19 @@
#ifndef IMGPLUSUPLOADER_HPP
#define IMGPLUSUPLOADER_HPP
#include <uploaders/uploader.hpp>
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

View File

@ -11,6 +11,7 @@
#include <formatter.hpp>
#include <notifications.hpp>
#include <settings.hpp>
#include <uploaders/default/imgplusuploader.hpp>
UploaderSingleton::UploaderSingleton()
: QObject(), saveDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)) {
@ -37,6 +38,7 @@ UploaderSingleton::UploaderSingleton()
// UPLOADERS
registerUploader(new ImgurUploader);
registerUploader(new ImgplusUploader);
registerUploader(new ClipboardUploader);
// ---------