added upload from clipboard

This commit is contained in:
Niklas 2019-05-11 15:00:12 +02:00
parent 31a02ab592
commit b5b54cefd8
8 changed files with 102 additions and 5 deletions

View File

@ -19,6 +19,7 @@ It has many features, including:
* Hotkeys,
* Color picker, and last but not least,
* Custom upload destinations
* Upload from clipboard
## Enough talking, show us how it looks
The main window is rather simple, with only a log, and a button in it:

View File

@ -0,0 +1,68 @@
#include "clipboardcopy.hpp"
#include <QClipboard>
#include <QMimeData>
#include <QClipboard>
#include <QApplication>
#include <QFile>
#include <QFileInfo>
#include <QString>
#include <QMimeDatabase>
#include <QPixmap>
#include <QTemporaryFile>
#include <QIODevice>
#include <QTextStream>
#include <QMediaPlayer>
#include <QUrl>
#include <logger.hpp>
#include <io/ioutils.hpp>
#include <notifications.hpp>
#include <uploaders/uploadersingleton.hpp>
#include "mainwindow.hpp"
void clipboardcopy::copyClipboard() {
const QClipboard *clipboard = QApplication::clipboard();
const QMimeData *mimeData = clipboard->mimeData();
if(mimeData->hasImage()) {
QPixmap map = qvariant_cast<QPixmap>(mimeData->imageData());
} else if(mimeData->hasText()) {
QFileInfo fileInfo(mimeData->text());
if(fileInfo.exists() && fileInfo.isReadable() && fileInfo.isFile()) {
QMimeDatabase db;
QMimeType mimeType = db.mimeTypeForFile(fileInfo);
QString type = mimeType.name();
QFile file(fileInfo.absoluteFilePath());
logger::info(type);
UploaderSingleton::inst().upload(file);
} else if (fileInfo.exists() && fileInfo.isReadable() && fileInfo.isDir()) {
notifications::notify("KShare - Directory is not uploadable", fileInfo.absolutePath(), QSystemTrayIcon::Warning);
playErrorSound();
} else {
QTemporaryFile tmpFile;
tmpFile.setAutoRemove(true);
if(tmpFile.open()) {
QTextStream stream(&tmpFile);
stream << mimeData->text();
stream.flush();
tmpFile.seek(0);
UploaderSingleton::inst().upload(tmpFile);
} else {
logger::warn("Can not open tmp file");
playErrorSound();
}
}
} else {
notifications::notify("Unsupported File Format", "Can not upload clipboard", QSystemTrayIcon::Warning);
playErrorSound();
}
}
void clipboardcopy::playErrorSound() {
QMediaPlayer*mediaPlayer = new QMediaPlayer(MainWindow::inst());
mediaPlayer->setMedia(QUrl("qrc:/errorsound.wav"));
mediaPlayer->setVolume(50);
mediaPlayer->play();
if(mediaPlayer->error() != QMediaPlayer::NoError && mediaPlayer->error() != QMediaPlayer::ServiceMissingError)
notifications::notify(QString::number(mediaPlayer->error()), mediaPlayer->errorString(), QSystemTrayIcon::Warning);
}

View File

@ -0,0 +1,11 @@
#ifndef KSHARE_CLIPBOARDCOPY_HPP
#define KSHARE_CLIPBOARDCOPY_HPP
namespace clipboardcopy {
void copyClipboard();
void playErrorSound();
}
#endif //KSHARE_CLIPBOARDCOPY_HPP

View File

@ -25,6 +25,7 @@
#include <logs/requestlogging.hpp>
#include "io/ioutils.hpp"
#include <monospacetextdialog.hpp>
#include <clipboard/clipboardcopy.hpp>
MainWindow *MainWindow::instance;
@ -112,7 +113,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
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->clipboardButton, &QPushButton::clicked, this, &MainWindow::openScreenshotFolder);
connect(ui->clipboardButton, &QPushButton::clicked, this, &clipboardcopy::copyClipboard);
connect(ui->colorPickerButton, &QPushButton::clicked, this, [] { ColorPickerScene::showPicker(); });
ui->treeWidget->addAction(ui->actionOpenURL);
@ -128,6 +129,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
addHotkey("area", [] { screenshotter::area(); });
addHotkey("active", [] { screenshotter::active(); });
addHotkey("picker", [] { ColorPickerScene::showPicker(); });
addHotkey("clipboard", [] { clipboardcopy::copyClipboard(); });
addHotkey("recordingstop", [&] { controller->end(); });
addHotkey("recordingabort", [&] { controller->abort(); });
addHotkey("recordingstart", [&] { this->rec(); });

View File

@ -19,6 +19,7 @@
#include <screenshotter.hpp>
#include <settings.hpp>
#include <uploaders/uploadersingleton.hpp>
#include <clipboard/clipboardcopy.hpp>
static QMap<QString, std::function<void()>> fncs;
@ -57,6 +58,7 @@ SettingsDialog::SettingsDialog(QWidget *parent) : QDialog(parent), ui(new Ui::Se
#ifdef PLATFORM_CAPABILITY_ACTIVEWINDOW
addHotkeyItem(ui->hotkeys, tr("Active window"), "active", [&] { screenshotter::active(); });
#endif
addHotkeyItem(ui->hotkeys, tr("Copy Clipboard"), "clipboard", [] { clipboardcopy::copyClipboard(); });
addHotkeyItem(ui->hotkeys, tr("Color picker"), "picker", [] { ColorPickerScene::showPicker(); });
addHotkeyItem(ui->hotkeys, tr("Stop Recording"), "recordingstop", [&] { MainWindow::inst()->controller->end(); });
addHotkeyItem(ui->hotkeys, tr("Start Recording"), "recordingstart", [&] { MainWindow::inst()->rec(); });

View File

@ -72,7 +72,8 @@ SOURCES += main.cpp\
screenoverlay/screenoverlayview.cpp \
screenoverlay/screenoverlay.cpp \
screenoverlay/screenoverlaysettings.cpp \
logger.cpp
logger.cpp \
clipboard/clipboardcopy.cpp
HEADERS += mainwindow.hpp \
cropeditor/cropeditor.hpp \
@ -123,7 +124,8 @@ HEADERS += mainwindow.hpp \
screenoverlay/screenoverlayview.hpp \
screenoverlay/screenoverlay.hpp \
screenoverlay/screenoverlaysettings.hpp \
logger.hpp
logger.hpp \
clipboard/clipboardcopy.hpp
nopkg {
# win32 {

View File

@ -105,8 +105,8 @@ void UploaderSingleton::upload(QFile &img, QString format) {
updateSaveSettings();
if (img.size() <= 0) return;
if (!saveImages || img.rename(saveDir.absoluteFilePath(
formatter::format(settings::settings().value("fileFormat", "Screenshot %(yyyy-MM-dd HH-mm-ss)date.%ext").toString(),
format.toLower())))) {
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))
@ -117,6 +117,16 @@ void UploaderSingleton::upload(QFile &img, QString format) {
notifications::notify(tr("KShare - Failed to save picture"), img.errorString(), QSystemTrayIcon::Warning);
}
void UploaderSingleton::upload(QFile &img) {
updateSaveSettings();
if (img.size() <= 0) return;
QFileInfo fileInfo(img.fileName());
if (img.open(QFile::ReadWrite))
uploaders.value(uploader)->doUpload(img.readAll(), "", fileInfo.fileName());
else
notifications::notify(tr("KShare - Failed to open File"), img.errorString(), QSystemTrayIcon::Warning);
}
void UploaderSingleton::showSettings() {
uploaders.value(uploader)->showSettings();
}

View File

@ -17,6 +17,7 @@ public:
void upload(QPixmap pixmap);
void upload(QByteArray img, QString format);
void upload(QFile &img, QString format);
void upload(QFile &img);
void showSettings();
QList<Uploader *> uploaderList();
void set(QString uploader);