KShare/uploaders/uploadersingleton.cpp

110 lines
3.6 KiB
C++
Raw Normal View History

2017-04-23 15:05:48 +02:00
#include "uploadersingleton.hpp"
2017-04-24 23:14:01 +02:00
#include "customuploader.hpp"
2017-04-23 15:05:48 +02:00
#include "default/clipboarduploader.hpp"
#include "default/imguruploader.hpp"
#include <QBuffer>
2017-04-24 23:14:01 +02:00
#include <QDebug>
2017-04-23 15:05:48 +02:00
#include <QDir>
#include <QFile>
2017-04-23 15:05:48 +02:00
#include <QStandardPaths>
#include <formats.hpp>
2017-04-23 20:29:24 +02:00
#include <formatter.hpp>
#include <notifications.hpp>
2017-04-23 15:05:48 +02:00
#include <settings.hpp>
UploaderSingleton::UploaderSingleton()
: QObject(), saveDir(QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)) {
if (QStandardPaths::writableLocation(QStandardPaths::PicturesLocation).isEmpty()) {
2017-05-22 15:56:47 +02:00
qFatal("Cannot determine location for pictures");
}
if (!saveDir.exists()) {
2017-05-22 15:56:47 +02:00
if (!saveDir.mkpath(".")) {
qFatal("Could not create the path %s to store images in!", saveDir.absolutePath().toLocal8Bit().constData());
2017-05-22 15:56:47 +02:00
}
}
QDir configDir(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation));
configDir.mkpath("KShare/uploaders");
configDir.cd("KShare/uploaders");
configDir.setNameFilters({ "*.uploader" });
for (QString file : configDir.entryList()) {
try {
registerUploader(new CustomUploader(configDir.absoluteFilePath(file)));
} catch (std::runtime_error e) {
qWarning() << e.what();
errs << e;
}
2017-04-24 23:14:01 +02:00
}
2017-04-23 15:05:48 +02:00
// UPLOADERS
registerUploader(new ImgurUploader);
registerUploader(new ClipboardUploader);
// ---------
2017-04-23 15:05:48 +02:00
if (settings::settings().contains("uploader"))
uploader = settings::settings().value("uploader").toString();
else
settings::settings().setValue("uploader", uploader);
if (!uploaders.contains(uploader)) {
settings::settings().setValue("uploader", uploader);
uploader = "imgur";
}
2017-04-23 15:05:48 +02:00
}
2017-05-06 13:21:12 +02:00
void UploaderSingleton::registerUploader(Uploader *uploader) {
if (uploaders.contains(uploader->name())) {
throw std::runtime_error(("Ambigious uploader " + uploader->name()).toStdString());
}
uploaders.insert(uploader->name(), uploader);
emit newUploader(uploader);
2017-04-23 15:05:48 +02:00
}
2017-05-06 13:21:12 +02:00
void UploaderSingleton::upload(QPixmap *pixmap) {
auto u = uploaders.value(uploader);
QString format = settings::settings().value("captureformat", "PNG").toString();
QFile file(saveDir.absoluteFilePath(formatter::format(settings::settings().value("fileFormat").toString(), format.toLower())));
if (file.open(QFile::ReadWrite)) {
pixmap->save(&file, format.toLocal8Bit().constData());
file.seek(0);
u->doUpload(file.readAll(), format);
} else
notifications::notify("KShare - Failed to save picture", file.errorString(), QSystemTrayIcon::Warning);
delete pixmap;
2017-04-23 15:05:48 +02:00
}
void UploaderSingleton::upload(QByteArray img, QString format) {
2017-06-13 17:02:35 +02:00
if (img.isEmpty()) return;
QFile file(saveDir.absoluteFilePath(formatter::format(settings::settings().value("fileFormat").toString(), format.toLower())));
if (file.open(QFile::WriteOnly)) {
file.write(img);
file.close();
}
uploaders.value(uploader)->doUpload(img, format);
}
void UploaderSingleton::upload(QFile img, QString format) {
if (img.open(QIODevice::ReadOnly)) {
uploaders.value(uploader)->doUpload(img.readAll(), format);
img.close();
}
}
2017-05-06 13:21:12 +02:00
QList<Uploader *> UploaderSingleton::uploaderList() {
return uploaders.values();
2017-04-23 15:05:48 +02:00
}
2017-05-06 13:21:12 +02:00
void UploaderSingleton::set(QString uploader) {
if (uploaders.contains(uploader)) {
this->uploader = uploader;
settings::settings().setValue("uploader", uploader);
}
2017-04-23 15:05:48 +02:00
}
QString UploaderSingleton::selectedUploader() {
return uploader;
}
2017-04-25 16:04:46 +02:00
QList<std::runtime_error> UploaderSingleton::errors() {
return errs;
}