From 6941c3d3d7086ffac55b96e6fdc186b868094b2d Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 27 Sep 2021 23:20:25 +0200 Subject: [PATCH 1/3] Fix --help and --version command line options when Nheko is already running. Also adds an info message when it sends a URI to another instance --- src/main.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index cf7e29e6..f6373d2a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -176,12 +176,6 @@ main(int argc, char *argv[]) 100, userdata); - if (app.isSecondary()) { - // open uri in main instance - app.sendMessage(matrixUri.toUtf8()); - return 0; - } - QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); @@ -202,6 +196,15 @@ main(int argc, char *argv[]) parser.process(app); + // This check needs to happen _after_ process(), so that we actually print help for --help when + // Nheko is already running. + if (app.isSecondary()) { + nhlog::ui()->info("Sending Matrix URL to main application: {}", matrixUri.toStdString()); + // open uri in main instance + app.sendMessage(matrixUri.toUtf8()); + return 0; + } + app.setWindowIcon(QIcon::fromTheme("nheko", QIcon{":/logos/nheko.png"})); http::init(); From c4b788917f9db8674fabf23b3972179b745b7700 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 27 Sep 2021 23:19:43 +0200 Subject: [PATCH 2/3] Fixes for pasting images, especially under windows where the image mime type detection doesn't work as expected --- src/timeline/InputBar.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index f0c38c84..c83bb19c 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -45,10 +45,8 @@ InputBar::paste(bool fromMouse) { const QMimeData *md = nullptr; - if (fromMouse) { - if (QGuiApplication::clipboard()->supportsSelection()) { - md = QGuiApplication::clipboard()->mimeData(QClipboard::Selection); - } + if (fromMouse && QGuiApplication::clipboard()->supportsSelection()) { + md = QGuiApplication::clipboard()->mimeData(QClipboard::Selection); } else { md = QGuiApplication::clipboard()->mimeData(QClipboard::Clipboard); } @@ -69,7 +67,7 @@ InputBar::insertMimeData(const QMimeData *md) const auto audio = formats.filter("audio/", Qt::CaseInsensitive); const auto video = formats.filter("video/", Qt::CaseInsensitive); - if (!image.empty() && md->hasImage()) { + if (md->hasImage()) { showPreview(*md, "", image); } else if (!audio.empty()) { showPreview(*md, "", audio); @@ -653,9 +651,15 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList & new dialogs::PreviewUploadOverlay(ChatPage::instance()); previewDialog_->setAttribute(Qt::WA_DeleteOnClose); - if (source.hasImage()) - previewDialog_->setPreview(qvariant_cast(source.imageData()), formats.front()); - else if (!path.isEmpty()) + if (source.hasImage()) { + if (formats.size() && formats.front().startsWith("image/")) { + // known format, keep as-is + previewDialog_->setPreview(qvariant_cast(source.imageData()), formats.front()); + } else { + // unknown image format, default to image/png + previewDialog_->setPreview(qvariant_cast(source.imageData()), "image/png"); + } + } else if (!path.isEmpty()) previewDialog_->setPreview(path); else if (!formats.isEmpty()) { auto mime = formats.first(); From 94441e68fde86977a70d60c735b1363c8b61ba08 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Tue, 28 Sep 2021 01:42:35 +0200 Subject: [PATCH 3/3] Support pasting image/svg+xml format straight from supporting applications --- src/dialogs/PreviewUploadOverlay.cpp | 7 +++++++ src/timeline/InputBar.cpp | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/dialogs/PreviewUploadOverlay.cpp b/src/dialogs/PreviewUploadOverlay.cpp index e850c03b..2e95bd91 100644 --- a/src/dialogs/PreviewUploadOverlay.cpp +++ b/src/dialogs/PreviewUploadOverlay.cpp @@ -158,6 +158,8 @@ PreviewUploadOverlay::setPreview(const QImage &src, const QString &mime) void PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime) { + nhlog::ui()->info("Pasting {} bytes of data, mimetype {}", data.size(), mime.toStdString()); + auto const &split = mime.split('/'); auto const &type = split[1]; @@ -166,6 +168,11 @@ PreviewUploadOverlay::setPreview(const QByteArray data, const QString &mime) filePath_ = "clipboard." + type; isImage_ = false; + if (mime == "image/svg+xml") { + isImage_ = true; + image_.loadFromData(data_, mediaType_.toStdString().c_str()); + } + setLabels(type, mime, data_.size()); init(); } diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index c83bb19c..f518248b 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -68,7 +68,11 @@ InputBar::insertMimeData(const QMimeData *md) const auto video = formats.filter("video/", Qt::CaseInsensitive); if (md->hasImage()) { - showPreview(*md, "", image); + if (formats.contains("image/svg+xml", Qt::CaseInsensitive)) { + showPreview(*md, "", QStringList("image/svg+xml")); + } else { + showPreview(*md, "", image); + } } else if (!audio.empty()) { showPreview(*md, "", audio); } else if (!video.empty()) { @@ -651,7 +655,8 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList & new dialogs::PreviewUploadOverlay(ChatPage::instance()); previewDialog_->setAttribute(Qt::WA_DeleteOnClose); - if (source.hasImage()) { + // Force SVG to _not_ be handled as an image, but as raw data + if (source.hasImage() && (!formats.size() || formats.front() != "image/svg+xml")) { if (formats.size() && formats.front().startsWith("image/")) { // known format, keep as-is previewDialog_->setPreview(qvariant_cast(source.imageData()), formats.front()); @@ -679,6 +684,12 @@ InputBar::showPreview(const QMimeData &source, QString path, const QStringList & &dialogs::PreviewUploadOverlay::confirmUpload, this, [this](const QByteArray data, const QString &mime, const QString &fn) { + if (!data.size()) { + nhlog::ui()->warn("Attempted to upload zero-byte file?! Mimetype {}, filename {}", + mime.toStdString(), + fn.toStdString()); + return; + } setUploading(true); setText("");