diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-03-21 05:49:12 +0100 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2022-03-21 05:49:12 +0100 |
commit | a9486ec89616a1e944d325c99d87173742a2de33 (patch) | |
tree | 70a494e3abcfc6f085f64d5497afa86373faacb9 /src/timeline/InputBar.cpp | |
parent | Show some previews in upload window (diff) | |
download | nheko-a9486ec89616a1e944d325c99d87173742a2de33.tar.xz |
Fix thumbnails for encrypted files and factor upload box out
Diffstat (limited to 'src/timeline/InputBar.cpp')
-rw-r--r-- | src/timeline/InputBar.cpp | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index aa470989..e1223021 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -17,7 +17,6 @@ #include <QMimeDatabase> #include <QStandardPaths> #include <QTextBoundaryFinder> -#include <QUrl> #include <QRegularExpression> #include <mtx/responses/common.hpp> @@ -39,6 +38,20 @@ static constexpr size_t INPUT_HISTORY_SIZE = 10; +QUrl +MediaUpload::thumbnailDataUrl() const +{ + if (thumbnail_.isNull()) + return {}; + + QByteArray byteArray; + QBuffer buffer(&byteArray); + buffer.open(QIODevice::WriteOnly); + thumbnail_.save(&buffer, "PNG"); + QString base64 = QString::fromUtf8(byteArray.toBase64()); + return QString("data:image/png;base64,") + base64; +} + bool InputVideoSurface::present(const QVideoFrame &frame) { @@ -465,6 +478,10 @@ InputBar::image(const QString &filename, const QString &mime, uint64_t dsize, const QSize &dimensions, + const std::optional<mtx::crypto::EncryptedFile> &thumbnailEncryptedFile, + const QString &thumbnailUrl, + uint64_t thumbnailSize, + const QSize &thumbnailDimensions, const QString &blurhash) { mtx::events::msg::Image image; @@ -480,6 +497,18 @@ InputBar::image(const QString &filename, else image.url = url.toStdString(); + if (!thumbnailUrl.isEmpty()) { + if (thumbnailEncryptedFile) + image.info.thumbnail_file = thumbnailEncryptedFile; + else + image.info.thumbnail_url = thumbnailUrl.toStdString(); + + image.info.thumbnail_info.h = thumbnailDimensions.height(); + image.info.thumbnail_info.w = thumbnailDimensions.width(); + image.info.thumbnail_info.size = thumbnailSize; + image.info.thumbnail_info.mimetype = "image/png"; + } + if (!room->reply().isEmpty()) { image.relations.relations.push_back( {mtx::common::RelationType::InReplyTo, room->reply().toStdString()}); @@ -566,11 +595,13 @@ InputBar::video(const QString &filename, const std::optional<mtx::crypto::EncryptedFile> &thumbnailEncryptedFile, const QString &thumbnailUrl, uint64_t thumbnailSize, - const QSize &thumbnailDimensions) + const QSize &thumbnailDimensions, + const QString &blurhash) { mtx::events::msg::Video video; video.info.mimetype = mime.toStdString(); video.info.size = dsize; + video.info.blurhash = blurhash.toStdString(); video.body = filename.toStdString(); if (duration > 0) @@ -946,7 +977,17 @@ InputBar::finalizeUpload(MediaUpload *upload, QString url) auto size = upload->size(); auto encryptedFile = upload->encryptedFile_(); if (mimeClass == u"image") - image(filename, encryptedFile, url, mime, size, upload->dimensions(), upload->blurhash()); + image(filename, + encryptedFile, + url, + mime, + size, + upload->dimensions(), + upload->thumbnailEncryptedFile_(), + upload->thumbnailUrl(), + upload->thumbnailSize(), + upload->thumbnailImg().size(), + upload->blurhash()); else if (mimeClass == u"audio") audio(filename, encryptedFile, url, mime, size, upload->duration()); else if (mimeClass == u"video") @@ -960,7 +1001,8 @@ InputBar::finalizeUpload(MediaUpload *upload, QString url) upload->thumbnailEncryptedFile_(), upload->thumbnailUrl(), upload->thumbnailSize(), - upload->thumbnailImg().size()); + upload->thumbnailImg().size(), + upload->blurhash()); else file(filename, encryptedFile, url, mime, size); |