From 163b02f023f5d84ae02d3a8cb07ba77ebb9ab67c Mon Sep 17 00:00:00 2001 From: James Graham Date: Tue, 9 Apr 2024 18:54:59 +0000 Subject: [PATCH] Add image info for stickers Closes network/neochat#584 --- src/events/imagepackevent.cpp | 3 +++ src/models/accountemoticonmodel.cpp | 26 ++++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/events/imagepackevent.cpp b/src/events/imagepackevent.cpp index eeaa0edf0..6a909bd21 100644 --- a/src/events/imagepackevent.cpp +++ b/src/events/imagepackevent.cpp @@ -74,6 +74,9 @@ void ImagePackEventContent::fillJson(QJsonObject *o) const } imageJson["usage"_ls] = usageJson; } + if (image.info.has_value()) { + imageJson["info"_ls] = Quotient::EventContent::toInfoJson(*image.info); + } imagesJson[image.shortcode] = imageJson; } (*o)["images"_ls] = imagesJson; diff --git a/src/models/accountemoticonmodel.cpp b/src/models/accountemoticonmodel.cpp index c61c9a114..44a39261a 100644 --- a/src/models/accountemoticonmodel.cpp +++ b/src/models/accountemoticonmodel.cpp @@ -3,7 +3,11 @@ #include "accountemoticonmodel.h" +#include +#include + #include +#include #include using namespace Quotient; @@ -162,7 +166,15 @@ QCoro::Task AccountEmoticonModel::doSetEmoticonImage(int index, QUrl sourc co_return; } m_images->images[index].url = job->contentUri(); - m_images->images[index].info = none; + auto mime = QMimeDatabase().mimeTypeForUrl(source); + source.setScheme("file"_ls); + QFileInfo fileInfo(source.isLocalFile() ? source.toLocalFile() : source.toString()); + EventContent::ImageInfo info; + if (mime.name().startsWith("image/"_ls)) { + QImage image(source.toLocalFile()); + info = EventContent::ImageInfo(source, fileInfo.size(), mime, image.size(), fileInfo.fileName()); + } + m_images->images[index].info = info; QJsonObject data; m_images->fillJson(&data); m_connection->setAccountData("im.ponies.user_emotes"_ls, data); @@ -175,11 +187,21 @@ QCoro::Task AccountEmoticonModel::doAddEmoticon(QUrl source, QString short if (job->error() != BaseJob::NoError) { co_return; } + + auto mime = QMimeDatabase().mimeTypeForUrl(source); + source.setScheme("file"_ls); + QFileInfo fileInfo(source.isLocalFile() ? source.toLocalFile() : source.toString()); + EventContent::ImageInfo info; + if (mime.name().startsWith("image/"_ls)) { + QImage image(source.toLocalFile()); + info = EventContent::ImageInfo(source, fileInfo.size(), mime, image.size(), fileInfo.fileName()); + } + m_images->images.append(ImagePackEventContent::ImagePackImage{ shortcode, job->contentUri(), description, - none, + info, QStringList{type}, }); QJsonObject data;