Compare commits
100 Commits
Author | SHA256 | Date | |
---|---|---|---|
98faf5c50d | |||
e7b20c1966 | |||
|
3c2d28b48d | ||
39e5bdd15c | |||
|
f9e35bc929 | ||
|
7523f4d2a3 | ||
3013291cd6 | |||
|
85282ea69c | ||
774ef5652e | |||
|
aa4c93de6d | ||
c5969b0a35 | |||
|
a819409ac4 | ||
6883050530 | |||
|
3dcdab9a95 | ||
|
b6cf0a41ae | ||
|
8f9076a4c9 | ||
34585f5c12 | |||
|
01e9a813d7 | ||
57c3173eff | |||
|
52a96bce1b | ||
60bb4f0a74 | |||
|
e3bae292c7 | ||
ec9c89bc42 | |||
|
4b285a2774 | ||
1ee37b0e62 | |||
|
340f631f4d | ||
50f056edad | |||
|
241149069a | ||
410e4d231c | |||
|
9939d4e236 | ||
f13a31fa1b | |||
|
c47dc4f047 | ||
9b32eb9f35 | |||
|
64800542ca | ||
2ec69021aa | |||
|
e0abbbd124 | ||
830eabd337 | |||
|
9c944f468b | ||
b3c931733b | |||
|
dabf662116 | ||
|
e0189e10d5 | ||
|
2ecd8649e8 | ||
|
e36fd88801 | ||
43d13b30ef | |||
|
b90e3aed2d | ||
a52faffe13 | |||
|
6a01c8d29c | ||
46f3dd0383 | |||
|
6a4bd95bbd | ||
367d30ab27 | |||
|
10435cfb74 | ||
ebb23a1a9e | |||
|
68c7bed0cd | ||
8048e8a0d1 | |||
|
9800cee161 | ||
|
8f59c8f4ec | ||
|
8e6066db55 | ||
5ef77575c9 | |||
|
3d5e502143 | ||
62620512ae | |||
|
f1bf8ed390 | ||
a58c8bce6b | |||
|
79f59cf76e | ||
2488fd1a06 | |||
|
2c5d9aa78f | ||
|
d8d84efed1 | ||
|
53162fbb80 | ||
|
bcb74cc853 | ||
739cf46317 | |||
|
e907ca863a | ||
|
3c589f67a0 | ||
|
31486f1020 | ||
ec935551d8 | |||
|
fe8d5e238f | ||
e28142960e | |||
76ee7f347b | |||
705296d1f3 | |||
9d58f2cc57 | |||
90cc712612 | |||
5ffbeb8557 | |||
5e02823df7 | |||
370d42e992 | |||
206d66a3fb | |||
8d7b96186d | |||
ac73a32201 | |||
f97ca40a86 | |||
98c434dba6 | |||
2c7e37da37 | |||
997ba71cb1 | |||
f014da6d4f | |||
8c5e9185bf | |||
e95b407a88 | |||
|
1610127523 | ||
|
b49e18ab95 | ||
|
563b9b6aaf | ||
|
8306af2542 | ||
|
965cfe9ce4 | ||
|
233280a05e | ||
|
a40d1349fa | ||
|
e812aab02f |
@@ -1,532 +0,0 @@
|
||||
From eb802ff91f98204784d87db61a698b4038b7ef84 Mon Sep 17 00:00:00 2001
|
||||
From: James Graham <james.h.graham@protonmail.com>
|
||||
Date: Sat, 26 Oct 2024 07:47:15 +0000
|
||||
Subject: [PATCH] Cherry pick compatability changes for libquotient 0.9
|
||||
|
||||
Title
|
||||
---
|
||||
src/actionshandler.cpp | 8 ++
|
||||
src/eventhandler.cpp | 151 +++++++++++++++++++++++------
|
||||
src/eventhandler.h | 12 ++-
|
||||
src/models/messagecontentmodel.cpp | 18 +++-
|
||||
src/models/messageeventmodel.cpp | 5 +
|
||||
src/neochatroom.cpp | 44 ++++++++-
|
||||
6 files changed, 199 insertions(+), 39 deletions(-)
|
||||
|
||||
diff --git a/src/actionshandler.cpp b/src/actionshandler.cpp
|
||||
index e5ddaadbd..c47b780b1 100644
|
||||
--- a/src/actionshandler.cpp
|
||||
+++ b/src/actionshandler.cpp
|
||||
@@ -91,10 +91,18 @@ void ActionsHandler::handleMessage(const QString &text, QString handledText, Cha
|
||||
|
||||
for (auto it = m_room->messageEvents().crbegin(); it != m_room->messageEvents().crend(); it++) {
|
||||
if (const auto event = eventCast<const RoomMessageEvent>(&**it)) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event->senderId() == m_room->localMember().id() && event->has<EventContent::TextContent>()) {
|
||||
+#else
|
||||
if (event->senderId() == m_room->localMember().id() && event->hasTextContent()) {
|
||||
+#endif
|
||||
QString originalString;
|
||||
if (event->content()) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ originalString = event->get<EventContent::TextContent>()->body;
|
||||
+#else
|
||||
originalString = static_cast<const Quotient::EventContent::TextContent *>(event->content())->body;
|
||||
+#endif
|
||||
} else {
|
||||
originalString = event->plainBody();
|
||||
}
|
||||
diff --git a/src/eventhandler.cpp b/src/eventhandler.cpp
|
||||
index 8cad14601..6b02ade67 100644
|
||||
--- a/src/eventhandler.cpp
|
||||
+++ b/src/eventhandler.cpp
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
#include <Quotient/eventitem.h>
|
||||
#include <Quotient/events/encryptionevent.h>
|
||||
+#include <Quotient/events/event.h>
|
||||
+#include <Quotient/events/eventcontent.h>
|
||||
#include <Quotient/events/reactionevent.h>
|
||||
#include <Quotient/events/redactionevent.h>
|
||||
#include <Quotient/events/roomavatarevent.h>
|
||||
@@ -234,10 +236,18 @@ QString EventHandler::rawMessageBody(const Quotient::RoomMessageEvent &event)
|
||||
{
|
||||
QString body;
|
||||
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event.has<EventContent::FileContent>()) {
|
||||
+#else
|
||||
if (event.hasFileContent()) {
|
||||
+#endif
|
||||
// if filename is given or body is equal to filename,
|
||||
// then body is a caption
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ QString filename = event.get<EventContent::FileContent>()->originalName;
|
||||
+#else
|
||||
QString filename = event.content()->fileInfo()->originalName;
|
||||
+#endif
|
||||
QString body = event.plainBody();
|
||||
if (filename.isEmpty() || filename == body) {
|
||||
return QString();
|
||||
@@ -245,8 +255,13 @@ QString EventHandler::rawMessageBody(const Quotient::RoomMessageEvent &event)
|
||||
return body;
|
||||
}
|
||||
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event.has<EventContent::TextContent>() && event.content()) {
|
||||
+ body = event.get<EventContent::TextContent>()->body;
|
||||
+#else
|
||||
if (event.hasTextContent() && event.content()) {
|
||||
body = static_cast<const EventContent::TextContent *>(event.content())->body;
|
||||
+#endif
|
||||
} else {
|
||||
body = event.plainBody();
|
||||
}
|
||||
@@ -461,11 +476,16 @@ QString EventHandler::getMessageBody(const RoomMessageEvent &event, Qt::TextForm
|
||||
{
|
||||
TextHandler textHandler;
|
||||
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event.has<EventContent::FileContent>()) {
|
||||
+ QString fileCaption = event.get<EventContent::FileContent>()->originalName;
|
||||
+#else
|
||||
if (event.hasFileContent()) {
|
||||
auto fileCaption = event.content()->fileInfo()->originalName;
|
||||
+#endif
|
||||
if (fileCaption.isEmpty()) {
|
||||
fileCaption = event.plainBody();
|
||||
- } else if (event.content()->fileInfo()->originalName != event.plainBody()) {
|
||||
+ } else if (fileCaption != event.plainBody()) {
|
||||
fileCaption = event.plainBody() + " | "_ls + fileCaption;
|
||||
}
|
||||
textHandler.setData(fileCaption);
|
||||
@@ -473,8 +493,13 @@ QString EventHandler::getMessageBody(const RoomMessageEvent &event, Qt::TextForm
|
||||
}
|
||||
|
||||
QString body;
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event.has<EventContent::TextContent>() && event.content()) {
|
||||
+ body = event.get<EventContent::TextContent>()->body;
|
||||
+#else
|
||||
if (event.hasTextContent() && event.content()) {
|
||||
body = static_cast<const EventContent::TextContent *>(event.content())->body;
|
||||
+#endif
|
||||
} else {
|
||||
body = event.plainBody();
|
||||
}
|
||||
@@ -655,39 +680,65 @@ QVariantMap EventHandler::getMediaInfoForEvent(const Quotient::RoomEvent *event)
|
||||
// Get the file info for the event.
|
||||
if (event->is<RoomMessageEvent>()) {
|
||||
auto roomMessageEvent = eventCast<const RoomMessageEvent>(event);
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (!roomMessageEvent->has<EventContent::FileContentBase>()) {
|
||||
+#else
|
||||
if (!roomMessageEvent->hasFileContent()) {
|
||||
+#endif
|
||||
return {};
|
||||
}
|
||||
|
||||
- const EventContent::FileInfo *fileInfo;
|
||||
- fileInfo = roomMessageEvent->content()->fileInfo();
|
||||
- QVariantMap mediaInfo = getMediaInfoFromFileInfo(fileInfo, eventId, false, false);
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ const auto content = roomMessageEvent->get<EventContent::FileContentBase>();
|
||||
+ QVariantMap mediaInfo = getMediaInfoFromFileInfo(content.get(), eventId, false, false);
|
||||
+#else
|
||||
+ const auto content = static_cast<const EventContent::FileContent *>(roomMessageEvent->content());
|
||||
+ QVariantMap mediaInfo = getMediaInfoFromFileInfo(content, eventId, false, false);
|
||||
+#endif
|
||||
// if filename isn't specifically given, it is in body
|
||||
// https://spec.matrix.org/latest/client-server-api/#mfile
|
||||
- mediaInfo["filename"_ls] = (fileInfo->originalName.isEmpty()) ? roomMessageEvent->plainBody() : fileInfo->originalName;
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ mediaInfo["filename"_ls] = content->commonInfo().originalName.isEmpty() ? roomMessageEvent->plainBody() : content->commonInfo().originalName;
|
||||
+#else
|
||||
+ mediaInfo["filename"_ls] = (content->fileInfo()->originalName.isEmpty()) ? roomMessageEvent->plainBody() : content->fileInfo()->originalName;
|
||||
+#endif
|
||||
|
||||
return mediaInfo;
|
||||
} else if (event->is<StickerEvent>()) {
|
||||
- const EventContent::FileInfo *fileInfo;
|
||||
-
|
||||
auto stickerEvent = eventCast<const StickerEvent>(event);
|
||||
- fileInfo = &stickerEvent->image();
|
||||
+ auto content = &stickerEvent->image();
|
||||
|
||||
- return getMediaInfoFromFileInfo(fileInfo, eventId, false, true);
|
||||
+ return getMediaInfoFromFileInfo(content, eventId, false, true);
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
-QVariantMap EventHandler::getMediaInfoFromFileInfo(const EventContent::FileInfo *fileInfo, const QString &eventId, bool isThumbnail, bool isSticker) const
|
||||
+QVariantMap EventHandler::getMediaInfoFromFileInfo(
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ const Quotient::EventContent::FileContentBase *fileContent,
|
||||
+#else
|
||||
+ const Quotient::EventContent::TypedBase *fileContent,
|
||||
+#endif
|
||||
+ const QString &eventId,
|
||||
+ bool isThumbnail,
|
||||
+ bool isSticker) const
|
||||
{
|
||||
QVariantMap mediaInfo;
|
||||
|
||||
// Get the mxc URL for the media.
|
||||
- if (!fileInfo->url().isValid() || fileInfo->url().scheme() != QStringLiteral("mxc") || eventId.isEmpty()) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (!fileContent->url().isValid() || fileContent->url().scheme() != QStringLiteral("mxc") || eventId.isEmpty()) {
|
||||
+#else
|
||||
+ if (!fileContent->fileInfo()->url().isValid() || fileContent->fileInfo()->url().scheme() != QStringLiteral("mxc") || eventId.isEmpty()) {
|
||||
+#endif
|
||||
mediaInfo["source"_ls] = QUrl();
|
||||
} else {
|
||||
- QUrl source = m_room->makeMediaUrl(eventId, fileInfo->url());
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ QUrl source = m_room->makeMediaUrl(eventId, fileContent->url());
|
||||
+#else
|
||||
+ QUrl source = m_room->makeMediaUrl(eventId, fileContent->fileInfo()->url());
|
||||
+#endif
|
||||
|
||||
if (source.isValid()) {
|
||||
mediaInfo["source"_ls] = source;
|
||||
@@ -696,7 +747,7 @@ QVariantMap EventHandler::getMediaInfoFromFileInfo(const EventContent::FileInfo
|
||||
}
|
||||
}
|
||||
|
||||
- auto mimeType = fileInfo->mimeType;
|
||||
+ auto mimeType = fileContent->type();
|
||||
// Add the MIME type for the media if available.
|
||||
mediaInfo["mimeType"_ls] = mimeType.name();
|
||||
|
||||
@@ -704,45 +755,53 @@ QVariantMap EventHandler::getMediaInfoFromFileInfo(const EventContent::FileInfo
|
||||
mediaInfo["mimeIcon"_ls] = mimeType.iconName();
|
||||
|
||||
// Add media size if available.
|
||||
- mediaInfo["size"_ls] = fileInfo->payloadSize;
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ mediaInfo["size"_ls] = fileContent->commonInfo().payloadSize;
|
||||
+#else
|
||||
+ mediaInfo["size"_ls] = static_cast<const EventContent::FileContent *>(fileContent)->fileInfo()->payloadSize;
|
||||
+#endif
|
||||
|
||||
mediaInfo["isSticker"_ls] = isSticker;
|
||||
|
||||
// Add parameter depending on media type.
|
||||
if (mimeType.name().contains(QStringLiteral("image"))) {
|
||||
- if (auto castInfo = static_cast<const EventContent::ImageContent *>(fileInfo)) {
|
||||
+ if (auto castInfo = static_cast<const EventContent::ImageContent *>(fileContent)) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
mediaInfo["width"_ls] = castInfo->imageSize.width();
|
||||
mediaInfo["height"_ls] = castInfo->imageSize.height();
|
||||
+#else
|
||||
+ const auto imageInfo = static_cast<const EventContent::ImageInfo *>(castInfo->fileInfo());
|
||||
+ mediaInfo["width"_ls] = imageInfo->imageSize.width();
|
||||
+ mediaInfo["height"_ls] = imageInfo->imageSize.height();
|
||||
+#endif
|
||||
|
||||
// TODO: Images in certain formats (e.g. WebP) will be erroneously marked as animated, even if they are static.
|
||||
mediaInfo["animated"_ls] = QMovie::supportedFormats().contains(mimeType.preferredSuffix().toUtf8());
|
||||
|
||||
- if (!isThumbnail) {
|
||||
- QVariantMap tempInfo;
|
||||
- auto thumbnailInfo = getMediaInfoFromFileInfo(castInfo->thumbnailInfo(), eventId, true);
|
||||
- if (thumbnailInfo["source"_ls].toUrl().scheme() == "mxc"_ls) {
|
||||
- tempInfo = thumbnailInfo;
|
||||
+ QVariantMap tempInfo;
|
||||
+ auto thumbnailInfo = getMediaInfoFromTumbnail(castInfo->thumbnail, eventId);
|
||||
+ if (thumbnailInfo["source"_ls].toUrl().scheme() == "mxc"_ls) {
|
||||
+ tempInfo = thumbnailInfo;
|
||||
+ } else {
|
||||
+ QString blurhash = castInfo->originalInfoJson["xyz.amorgan.blurhash"_ls].toString();
|
||||
+ if (blurhash.isEmpty()) {
|
||||
+ tempInfo["source"_ls] = QUrl();
|
||||
} else {
|
||||
- QString blurhash = castInfo->originalInfoJson["xyz.amorgan.blurhash"_ls].toString();
|
||||
- if (blurhash.isEmpty()) {
|
||||
- tempInfo["source"_ls] = QUrl();
|
||||
- } else {
|
||||
- tempInfo["source"_ls] = QUrl("image://blurhash/"_ls + blurhash);
|
||||
- }
|
||||
+ tempInfo["source"_ls] = QUrl("image://blurhash/"_ls + blurhash);
|
||||
}
|
||||
- mediaInfo["tempInfo"_ls] = tempInfo;
|
||||
}
|
||||
+ mediaInfo["tempInfo"_ls] = tempInfo;
|
||||
}
|
||||
}
|
||||
if (mimeType.name().contains(QStringLiteral("video"))) {
|
||||
- if (auto castInfo = static_cast<const EventContent::VideoContent *>(fileInfo)) {
|
||||
+ if (auto castInfo = static_cast<const EventContent::VideoContent *>(fileContent)) {
|
||||
mediaInfo["width"_ls] = castInfo->imageSize.width();
|
||||
mediaInfo["height"_ls] = castInfo->imageSize.height();
|
||||
mediaInfo["duration"_ls] = castInfo->duration;
|
||||
|
||||
if (!isThumbnail) {
|
||||
QVariantMap tempInfo;
|
||||
- auto thumbnailInfo = getMediaInfoFromFileInfo(castInfo->thumbnailInfo(), eventId, true);
|
||||
+ auto thumbnailInfo = getMediaInfoFromTumbnail(castInfo->thumbnail, eventId);
|
||||
if (thumbnailInfo["source"_ls].toUrl().scheme() == "mxc"_ls) {
|
||||
tempInfo = thumbnailInfo;
|
||||
} else {
|
||||
@@ -758,7 +817,7 @@ QVariantMap EventHandler::getMediaInfoFromFileInfo(const EventContent::FileInfo
|
||||
}
|
||||
}
|
||||
if (mimeType.name().contains(QStringLiteral("audio"))) {
|
||||
- if (auto castInfo = static_cast<const EventContent::AudioContent *>(fileInfo)) {
|
||||
+ if (auto castInfo = static_cast<const EventContent::AudioContent *>(fileContent)) {
|
||||
mediaInfo["duration"_ls] = castInfo->duration;
|
||||
}
|
||||
}
|
||||
@@ -766,6 +825,38 @@ QVariantMap EventHandler::getMediaInfoFromFileInfo(const EventContent::FileInfo
|
||||
return mediaInfo;
|
||||
}
|
||||
|
||||
+QVariantMap EventHandler::getMediaInfoFromTumbnail(const Quotient::EventContent::Thumbnail &thumbnail, const QString &eventId) const
|
||||
+{
|
||||
+ QVariantMap thumbnailInfo;
|
||||
+
|
||||
+ if (!thumbnail.url().isValid() || thumbnail.url().scheme() != QStringLiteral("mxc") || eventId.isEmpty()) {
|
||||
+ thumbnailInfo["source"_ls] = QUrl();
|
||||
+ } else {
|
||||
+ QUrl source = m_room->makeMediaUrl(eventId, thumbnail.url());
|
||||
+
|
||||
+ if (source.isValid()) {
|
||||
+ thumbnailInfo["source"_ls] = source;
|
||||
+ } else {
|
||||
+ thumbnailInfo["source"_ls] = QUrl();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ auto mimeType = thumbnail.mimeType;
|
||||
+ // Add the MIME type for the media if available.
|
||||
+ thumbnailInfo["mimeType"_ls] = mimeType.name();
|
||||
+
|
||||
+ // Add the MIME type icon if available.
|
||||
+ thumbnailInfo["mimeIcon"_ls] = mimeType.iconName();
|
||||
+
|
||||
+ // Add media size if available.
|
||||
+ thumbnailInfo["size"_ls] = thumbnail.payloadSize;
|
||||
+
|
||||
+ thumbnailInfo["width"_ls] = thumbnail.imageSize.width();
|
||||
+ thumbnailInfo["height"_ls] = thumbnail.imageSize.height();
|
||||
+
|
||||
+ return thumbnailInfo;
|
||||
+}
|
||||
+
|
||||
bool EventHandler::hasReply() const
|
||||
{
|
||||
if (m_event == nullptr) {
|
||||
diff --git a/src/eventhandler.h b/src/eventhandler.h
|
||||
index 277273c9e..6a3520882 100644
|
||||
--- a/src/eventhandler.h
|
||||
+++ b/src/eventhandler.h
|
||||
@@ -339,6 +339,14 @@ private:
|
||||
QString getMessageBody(const Quotient::RoomMessageEvent &event, Qt::TextFormat format, bool stripNewlines) const;
|
||||
|
||||
QVariantMap getMediaInfoForEvent(const Quotient::RoomEvent *event) const;
|
||||
- QVariantMap
|
||||
- getMediaInfoFromFileInfo(const Quotient::EventContent::FileInfo *fileInfo, const QString &eventId, bool isThumbnail = false, bool isSticker = false) const;
|
||||
+ QVariantMap getMediaInfoFromFileInfo(
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ const Quotient::EventContent::FileContentBase *fileContent,
|
||||
+#else
|
||||
+ const Quotient::EventContent::TypedBase *fileContent,
|
||||
+#endif
|
||||
+ const QString &eventId,
|
||||
+ bool isThumbnail = false,
|
||||
+ bool isSticker = false) const;
|
||||
+ QVariantMap getMediaInfoFromTumbnail(const Quotient::EventContent::Thumbnail &thumbnail, const QString &eventId) const;
|
||||
};
|
||||
diff --git a/src/models/messagecontentmodel.cpp b/src/models/messagecontentmodel.cpp
|
||||
index 7de11f274..ac1756f84 100644
|
||||
--- a/src/models/messagecontentmodel.cpp
|
||||
+++ b/src/models/messagecontentmodel.cpp
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <QImageReader>
|
||||
|
||||
+#include <Quotient/events/eventcontent.h>
|
||||
#include <Quotient/events/redactionevent.h>
|
||||
#include <Quotient/events/roommessageevent.h>
|
||||
#include <Quotient/events/stickerevent.h>
|
||||
@@ -445,10 +446,19 @@ QList<MessageComponent> MessageContentModel::componentsForType(MessageComponentT
|
||||
auto fileTransferInfo = m_room->cachedFileTransferInfo(m_event.get());
|
||||
|
||||
#ifndef Q_OS_ANDROID
|
||||
- Q_ASSERT(event->content() != nullptr && event->content()->fileInfo() != nullptr);
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ Q_ASSERT(event->content() != nullptr && event->has<EventContent::FileContent>());
|
||||
+ const QMimeType mimeType = event->get<EventContent::FileContent>()->mimeType;
|
||||
+#else
|
||||
+ Q_ASSERT(event->content() != nullptr && event->hasFileContent());
|
||||
const QMimeType mimeType = event->content()->fileInfo()->mimeType;
|
||||
+#endif
|
||||
if (mimeType.name() == QStringLiteral("text/plain") || mimeType.parentMimeTypes().contains(QStringLiteral("text/plain"))) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ QString originalName = event->get<EventContent::FileContent>()->originalName;
|
||||
+#else
|
||||
QString originalName = event->content()->fileInfo()->originalName;
|
||||
+#endif
|
||||
if (originalName.isEmpty()) {
|
||||
originalName = event->plainBody();
|
||||
}
|
||||
@@ -571,8 +581,12 @@ void MessageContentModel::updateItineraryModel()
|
||||
}
|
||||
|
||||
if (auto event = eventCast<const Quotient::RoomMessageEvent>(m_event)) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event->has<EventContent::FileContent>()) {
|
||||
+#else
|
||||
if (event->hasFileContent()) {
|
||||
- auto filePath = m_room->cachedFileTransferInfo(m_event.get()).localPath;
|
||||
+#endif
|
||||
+ auto filePath = m_room->cachedFileTransferInfo(event).localPath;
|
||||
if (filePath.isEmpty() && m_itineraryModel != nullptr) {
|
||||
delete m_itineraryModel;
|
||||
m_itineraryModel = nullptr;
|
||||
diff --git a/src/models/messageeventmodel.cpp b/src/models/messageeventmodel.cpp
|
||||
index 09c738d0e..784fcd36e 100644
|
||||
--- a/src/models/messageeventmodel.cpp
|
||||
+++ b/src/models/messageeventmodel.cpp
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "neochatconfig.h"
|
||||
|
||||
#include <Quotient/csapi/rooms.h>
|
||||
+#include <Quotient/events/eventcontent.h>
|
||||
#include <Quotient/events/redactionevent.h>
|
||||
#include <Quotient/events/roommessageevent.h>
|
||||
#include <Quotient/events/stickerevent.h>
|
||||
@@ -498,7 +499,11 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const
|
||||
|
||||
if (role == ProgressInfoRole) {
|
||||
if (auto e = eventCast<const RoomMessageEvent>(&evt)) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (e->has<EventContent::FileContent>()) {
|
||||
+#else
|
||||
if (e->hasFileContent()) {
|
||||
+#endif
|
||||
return QVariant::fromValue(m_currentRoom->cachedFileTransferInfo(&evt));
|
||||
}
|
||||
}
|
||||
diff --git a/src/neochatroom.cpp b/src/neochatroom.cpp
|
||||
index f5b1eb57b..8f4201e58 100644
|
||||
--- a/src/neochatroom.cpp
|
||||
+++ b/src/neochatroom.cpp
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <QMimeDatabase>
|
||||
#include <QTemporaryFile>
|
||||
|
||||
+#include <Quotient/events/eventcontent.h>
|
||||
#include <Quotient/jobs/basejob.h>
|
||||
#include <Quotient/quotient_common.h>
|
||||
#include <qcoro/qcorosignal.h>
|
||||
@@ -76,11 +77,16 @@ NeoChatRoom::NeoChatRoom(Connection *connection, QString roomId, JoinState joinS
|
||||
const auto m_event = evtIt->viewAs<RoomEvent>();
|
||||
QString mxcUrl;
|
||||
if (auto event = eventCast<const Quotient::RoomMessageEvent>(m_event)) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event->has<EventContent::FileContentBase>()) {
|
||||
+ mxcUrl = event->get<EventContent::FileContentBase>()->url().toString();
|
||||
+#else
|
||||
if (event->hasFileContent()) {
|
||||
mxcUrl = event->content()->fileInfo()->url().toString();
|
||||
+#endif
|
||||
}
|
||||
} else if (auto event = eventCast<const Quotient::StickerEvent>(m_event)) {
|
||||
- mxcUrl = event->image().fileInfo()->url().toString();
|
||||
+ mxcUrl = event->image().url().toString();
|
||||
}
|
||||
if (mxcUrl.isEmpty()) {
|
||||
return;
|
||||
@@ -255,7 +261,11 @@ QCoro::Task<void> NeoChatRoom::doUploadFile(QUrl url, QString body)
|
||||
auto mime = QMimeDatabase().mimeTypeForUrl(url);
|
||||
url.setScheme("file"_ls);
|
||||
QFileInfo fileInfo(url.isLocalFile() ? url.toLocalFile() : url.toString());
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ EventContent::FileContentBase *content;
|
||||
+#else
|
||||
EventContent::TypedBase *content;
|
||||
+#endif
|
||||
if (mime.name().startsWith("image/"_ls)) {
|
||||
QImage image(url.toLocalFile());
|
||||
content = new EventContent::ImageContent(url, fileInfo.size(), mime, image.size(), fileInfo.fileName());
|
||||
@@ -270,7 +280,11 @@ QCoro::Task<void> NeoChatRoom::doUploadFile(QUrl url, QString body)
|
||||
} else {
|
||||
content = new EventContent::FileContent(url, fileInfo.size(), mime, fileInfo.fileName());
|
||||
}
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ QString txnId = postFile(body.isEmpty() ? url.fileName() : body, std::unique_ptr<EventContent::FileContentBase>(content));
|
||||
+#else
|
||||
QString txnId = postFile(body.isEmpty() ? url.fileName() : body, content);
|
||||
+#endif
|
||||
setHasFileUploading(true);
|
||||
connect(this, &Room::fileTransferCompleted, [this, txnId](const QString &id, FileSourceInfo) {
|
||||
if (id == txnId) {
|
||||
@@ -396,8 +410,13 @@ bool NeoChatRoom::lastEventIsSpoiler() const
|
||||
{
|
||||
if (auto event = lastEvent()) {
|
||||
if (auto e = eventCast<const RoomMessageEvent>(event)) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (e->has<EventContent::TextContent>() && e->content() && e->mimeType().name() == "text/html"_ls) {
|
||||
+ auto htmlBody = e->get<EventContent::TextContent>()->body;
|
||||
+#else
|
||||
if (e->hasTextContent() && e->content() && e->mimeType().name() == "text/html"_ls) {
|
||||
auto htmlBody = static_cast<const Quotient::EventContent::TextContent *>(e->content())->body;
|
||||
+#endif
|
||||
return htmlBody.contains("data-mx-spoiler"_ls);
|
||||
}
|
||||
}
|
||||
@@ -1456,7 +1475,11 @@ void NeoChatRoom::openEventMediaExternally(const QString &eventId)
|
||||
const auto evtIt = findInTimeline(eventId);
|
||||
if (evtIt != messageEvents().rend() && is<RoomMessageEvent>(**evtIt)) {
|
||||
const auto event = evtIt->viewAs<RoomMessageEvent>();
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event->has<EventContent::FileContent>()) {
|
||||
+#else
|
||||
if (event->hasFileContent()) {
|
||||
+#endif
|
||||
const auto transferInfo = cachedFileTransferInfo(event);
|
||||
if (transferInfo.completed()) {
|
||||
UrlHelper helper;
|
||||
@@ -1489,7 +1512,11 @@ void NeoChatRoom::copyEventMedia(const QString &eventId)
|
||||
const auto evtIt = findInTimeline(eventId);
|
||||
if (evtIt != messageEvents().rend() && is<RoomMessageEvent>(**evtIt)) {
|
||||
const auto event = evtIt->viewAs<RoomMessageEvent>();
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (event->has<EventContent::FileContent>()) {
|
||||
+#else
|
||||
if (event->hasFileContent()) {
|
||||
+#endif
|
||||
const auto transferInfo = fileTransferInfo(eventId);
|
||||
if (transferInfo.completed()) {
|
||||
Clipboard clipboard;
|
||||
@@ -1522,13 +1549,20 @@ FileTransferInfo NeoChatRoom::cachedFileTransferInfo(const Quotient::RoomEvent *
|
||||
QString mxcUrl;
|
||||
int total = 0;
|
||||
if (auto evt = eventCast<const Quotient::RoomMessageEvent>(event)) {
|
||||
+#if Quotient_VERSION_MINOR > 8
|
||||
+ if (evt->has<EventContent::FileContent>()) {
|
||||
+ const auto fileContent = evt->get<EventContent::FileContent>();
|
||||
+#else
|
||||
if (evt->hasFileContent()) {
|
||||
- mxcUrl = evt->content()->fileInfo()->url().toString();
|
||||
- total = evt->content()->fileInfo()->payloadSize;
|
||||
+ const auto fileContent = evt->content()->fileInfo();
|
||||
+#endif
|
||||
+
|
||||
+ mxcUrl = fileContent->url().toString();
|
||||
+ total = fileContent->payloadSize;
|
||||
}
|
||||
} else if (auto evt = eventCast<const Quotient::StickerEvent>(event)) {
|
||||
- mxcUrl = evt->image().fileInfo()->url().toString();
|
||||
- total = evt->image().fileInfo()->payloadSize;
|
||||
+ mxcUrl = evt->image().url().toString();
|
||||
+ total = evt->image().payloadSize;
|
||||
}
|
||||
|
||||
FileTransferInfo transferInfo = fileTransferInfo(event->id());
|
||||
--
|
||||
2.47.0
|
||||
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cfd419a87cbbe5fecbd7833189255ee2f582b4e1fb0f4f88bdef7e60a92fbc8f
|
||||
size 980740
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmaDnTEACgkQu0YzUNbv
|
||||
Me+NtQ/9GvS+JIQ/Q2lIz7j+kHAM8AB/+iU2QT/9EEwUB1C43KnGr71xK/SW9Cnc
|
||||
Ug1ctNLE1kuDu1cfOo59+MY/ite1r4lksGl/3lGFUe6OGexbkfj9sArtFrm2ci4+
|
||||
JIiNfceGgFIrVcDotyDEqyoSrRTpeT33IIlNbmB6TrJmPNPQtnHwE4CPp1K7/oXK
|
||||
/YEYfikYJ7FJ3a329qQ6IqiX9pNGNYnA10Hnh7fFEIrEqPPjQOG/0wIOXYtZHdfK
|
||||
sjWYpxkXm47NDuvJdh40oRYYFEPfnsTMyalA08jZ/v7LJk6tii2UPkQXDW3QRdj5
|
||||
1CHgtScM5bmwvpOqPoPmC3tldS3aQQmevRARIKucXfp2cG+oXvWWejOM+rcFCQK9
|
||||
/B8E+M8Yg5emLUNGHmnC0yp7TnwjY3E5SQO43Vvu3o87pM+VICP9q2tjtM1p41dH
|
||||
TbGVMEJghD502IGS49zXTDpgxmvcfEY1DcfaaMIQTEvlc2vYEYiF9iYlBka/snUb
|
||||
1UjvwIpZE6XPkV1eZx0QZEjwE9lqrIwImKp+gqOFWvMlDsc/nw4BgzbofNApZFkU
|
||||
rDtBiUpRUJzCUBR0mGY+u45RT+PfMsZ4jwTCK7b7HS/CFBlMgNEB+QIrlA3hH7Hd
|
||||
s6D27AhtAfNv6BO2gmmghrq7mp1NPqZd7OonOrIm6HpM12LVo/U=
|
||||
=uTZj
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:6b72d1864cc0d90704318c8970b9dc6a2dacd541fc5b95c46dcebb5c6a61705f
|
||||
size 1024700
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAma+4OIACgkQu0YzUNbv
|
||||
Me9Ulg//RSBBVRtllnbfvqEtMsR4GTdAl9MzMI56XvPRszsHWiNVJqP3PXOYR7+m
|
||||
fqpGkxbAxelBxKn8gpYzBqj75TLMnPKQdjXR5op3kI9EIr5kToc6VWvPyr7+MOaW
|
||||
V1Jos7n3EzzL9cMOyWcG+ty9ar5+o80Zr3MuLNN7bevc11YQSzmx+EG1A6sfCPCO
|
||||
wWyjX0CBepYZJsuafbT0Zxd1+hHvjGOTQg6GmVl1l0kn1Jkt7jb1hS+pVzNPgniJ
|
||||
y3/sMkR6PE/fNmteUbBiqYBMVLyx7Ii2lqwlD+8vWRrRjSF/p5QjAieVjYybY/6q
|
||||
sHgsBvfoPS4znN6ld1Guvx9KdoCUkoftJ54xZpe6fPZBlRLAqxd91a7guZ1aqbSp
|
||||
XRsVnos0JCsViHIXCgaSm8KmmtGgHZSQX3rxmRzx2hnLn7V16zs7rAA6rXRE36XH
|
||||
6fntJwYBKPER6BK06h8bxCxna0qljF9v1nSx84qN06jtWcn78dGZsR+EWR8PcN6C
|
||||
gPpoXyp050sUwtVYPaYD/xZ/ypsuRFj0z2fbmUslONFwMPwmCdgcYoaRcUXey6Nc
|
||||
iEQe2YkUY0408INPgVafA5puVgWrGm6dU6wSv6sjQHl70Z2p/RDA91hpQC/662Fy
|
||||
cvoREbi83cVIpzrf+EaYCGLd6JiDhddpaZayPCG/XvGm7Qr+mfc=
|
||||
=q5Hs
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:a394f04cf19d5567437e558075c9f7ce5c37bf73943b13c47739ff56acde571d
|
||||
size 1025240
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmbf/SUACgkQu0YzUNbv
|
||||
Me8geQ//RxjnQ0GVT7lKRZAIqd3Do6mFGt8Mi0L1pspRRRW8W9HmG+k7aO5Syo2D
|
||||
slkPngcLFEOwm/4x5dqIre2SOt+vvJwC07TDkUv8pkd4GjsmnyJmnAV2Y6yz1+cw
|
||||
kDKP569Re/IW+EZxnuweGTlAn7eu4sp36LpFwZwFHxNUcdHMX2BvO24nk4kLy2VC
|
||||
Igt8BCZfng1Qf0jybIjIqKGPDmaJ8WGmUMRfyqn9aPVc+O9Tb6SMo4cPSUMbic4i
|
||||
XAFpPlrkgudwd0KlBftAx1zGNFxUU/3o3kTQv/2ZNj/Y4ouuRBpR0vl5Js5zDK4E
|
||||
+S5bVtSTIFU4qYcxm1nTVYrfjp0DGADUavz64op5DgLzmalMAe7DNqHIhOmA25O3
|
||||
urKbyU6p9WtUZ2Dx6ZPO78TepTGgl+CSkfPtCTTtSGFwQyR/D7HzihMXqXHb7rjK
|
||||
L+FjUq7Kq+Vkl5cXyYWJaqMBDbwRRRU0Vv72DUB/Lj6GpVUSaJzNKTlU76Xgp/hj
|
||||
vUhIvanwube9FTiKLfRxuf64vm56j2/llkAqpb3sBFz6ygOlwMo+AF7gFKmvHtlc
|
||||
UuF4khQQYimjaoAMI/skd1xBmjVGVZmrTpiX3ZeDwhb9Sq240kazRxLwEnh7tfoG
|
||||
0mEv0Efl7Zv5DR3G+x6MKJPmWxU6zn/fewlT59xfiFuAOyYp+as=
|
||||
=F8mD
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:873f08f35ef1055b17647098a2ba5a3924dc0fb8350441d380c3598d8213c1bc
|
||||
size 1027192
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmcGk4kACgkQu0YzUNbv
|
||||
Me8e9Q/+LTIxIAfoDPOM1KjqErxZC9FGfQVewTwQhE7G3+zsXmydxk3J0CskKlKL
|
||||
3FrbKJKE5APPJU33fnGRK+5mBpF9ZlnfD4p6eN8Cj//8M09M8NOHK1uTeNXzxD9L
|
||||
YTFkJftkW8lGqAoFE6xOPqJz3enZrnpjoH5tisRp6UHRgAjSL72yljVL5PPID1Rn
|
||||
aTISvCvPd3efKDdTiLJozYCSzboH5hJI4t3Unq9EACBXCnpecFZGQaFx/IGkm+wc
|
||||
VF46g6YPV5wnYseqYrmS2esCBrdDz7DmT2chfeeJz42HkhmVUpqzyWs00tTo3j6n
|
||||
cHcsOv5IFpHe9ryxnHPBfeh4uSnVvHMpDpeFbjWvQqF3zssiJNMluqiXAKKyHK2e
|
||||
W5WJZd5+gSerSNDEnNUnCiX6hVhJ2+EN1Ez5CINJferJx7yp9Vz+Gsh3119E6chs
|
||||
x/x9qJS3Jtibi4gKKZq+dKFEzGiaFyUcBG9iXM864rrzKumZ4cATmar8ik7x35Sh
|
||||
tp6B8IvklMREZz4t327eV8l8FtbogEanvNFKyv+bohDAzyDgNG9eRvCLto4W9/ab
|
||||
2QZVydVru1hnbQRgg1UcxNe/WIqex4zLS5hSUpISWmxanJGGzGJn4z8lUQxs14GF
|
||||
/jQjwN5DIpa90Rcl9OY9KKNNd6ZTbN5V9M0dGBLENJuThx/Hf6E=
|
||||
=w8nA
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f28988f68ebf405b0c448ab9f8e4ddace819e08e86fad9d6b2149bb98e7d0f09
|
||||
size 1031148
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmcpZPAACgkQu0YzUNbv
|
||||
Me+WHg/8CZJFrkPTvJ9r/hYwLheQhvgBqfcU4HnxM/IDss62ckeba3XQohMg5xze
|
||||
jxgPq72zVRAB9UDN4srpsUH2JKdmKgEbYJP1MLzr9x7074mh7c8Ooa0iyMDrrlGR
|
||||
+NfHU7vBCphUYd6oSEMzoOnV03pWAQ5o3nz7YW5+syZrJgnhbPbqZ9YXVrGcDuZy
|
||||
wbrEjEnPXy9StPKi8M+kbr8ufHardBfgoccYr7Vn8ONeLm6iEzmnT8CjDumAZBSL
|
||||
I28ZpO6dn3+5zbdtUDe2EkFNqzQvrlSVPornFtSpl1wfnmBwwCdBRjiuy1FFLUF0
|
||||
YCB0W6Boog1S62j10pWaQl5zrHjJbT/+QTkzSTtp4x6GWwk0k5L/jOTrwe3NUVEO
|
||||
Ztc4MGO2vDw5OZ7QjGPGa/YxWAwvx1lnyHpxz+DiXKGZQ9Ry0rILg/sOMkHnI0s7
|
||||
BtM7KW4b160MCLP7Z2iIXx6GWJBL94/VLM3+quJ5ou7z9rxYHgyLJsbTrE38X1Af
|
||||
WkXoixjJRH4BYVBe/xyyu4x2y/bNC270CH/t7CdA2ZPZcFa6TV7LfSxi9taqMuPe
|
||||
K4DX3Hfh8+f47+/KZ7KivCqtLEpldYIpTEGCa59po+ueIxAXstr/CYscZ7GXjne5
|
||||
m4c9gFkcPbXwseOh+8KsjiMjIHLj1xWvdhnkYYT6WuyDgvG2jVw=
|
||||
=seO3
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:381cb65eff65d58854ddbb7de77a56a6d9bf94ec55ccc73eb31d0d12976f4497
|
||||
size 1063988
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmd80zsACgkQu0YzUNbv
|
||||
Me+SUA/7B7WVvZQ4geXAPsF54klBTpy4GJyxxd2nKi0HNgWxTGwiEW9jof1juFV9
|
||||
ZZClQXbd4wtMjfrH0LnjFZB+ROWjRKBF+zDamApsCusqv2VjTeEpjABFG/4VQVCr
|
||||
2rlUpaAmU4BjyLhRw95baK5quYlg89V2gmaKmSRAx4mPZEdQUjs4wyDxqFAftQpK
|
||||
jvJl2txdRwqlFOxJof4F9mvVbF4nuV7wqRupAnq2ZEr2C95bNvD6zc2uFItPVda0
|
||||
T0mTRaFnHIPB144o01amjAtbRF8ftKnqwk2Qj5W1qiTWfqyiTzXWqdhj2jIMLC6r
|
||||
m8iZsiThDmqFmurcmT3jxgZ7Lxn9H2+oCZ1uXjaiTG46dkLGWo7hhDbqS7nlHofT
|
||||
tA/eKoDZJBI1Fch4qNLArNNmgRJKxgR6DF5GvcmPBhaVDxxAoUGrkcwS7a35AtII
|
||||
5R92eeEj3NUeMGkWbP5BVLCZJnI5xotSdXHadASGIN8R8T+DUx5Zqjr9ZNp+Ebp4
|
||||
JHMuv+/NwdtTbcvlTAiytMf0OLGKCZgsmwXpOzN6kirvkOuJQMDmAKVOwHrxpV+z
|
||||
umz8HrQVVBM4D98/yGRS2lx828PI4yvNtPoIKafudOZffIqK2NONwzSZ1CyXtPr2
|
||||
s0eAI0ppkRzAp06VpHrL1TwmcrE83ejBQnJUTycG9tnkj9GuhH8=
|
||||
=AFoS
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:cb26faff6274b099287e49d0d44312dfc56e2e07d975a62e299749066dc23476
|
||||
size 1063892
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmehwboACgkQu0YzUNbv
|
||||
Me/OMw/+LzRiFNIAC/2q/b3YOQBIMEdZZmrdrkDMiB1rwhyyGja0uOKW4GBvnsqB
|
||||
EJlZ8dW+3Wb/hPYYtp3/6UQdh02KLG+LvdrnWrcBRquTQYAqe1ad+fojxdaBeu1K
|
||||
LSqz/kp8mNv9+IXqVsOiik6ZYyz/YEgb2JNAkhd9QdBzPMueGitgVe/u2UbPTsrd
|
||||
LjeYxOwQjY+zn6kYKD0APQzHvTvZnOZyLfpuHYPYs02YEUXu4vLCkzkXkhyEvB3M
|
||||
j/IULwh/6MBeVejULXkX6r1rthXBamKHgwwj6kCkYf8n1B78fHNspH3Kng/IJRx0
|
||||
FTUlFL4IoEr9hes8t4Zl/1iX4B3ysPvXfCJ27SjrZxUawDVFp3+JB691cnLiEx1P
|
||||
YUg4zvmpDsAB8Ni3vjX6SCxrv40iOwK4XQrbVq5FOU+IsB7gV5tBFpUTIfXo73Xi
|
||||
lHqxlJ5WQwfRepUnufhU96NKqcEwu7tst7ZZm2xpJtXWIJ7zAvFIsoM4Bno8SqMz
|
||||
TgpVuzZdR4DQp9zZjmt00iHZMGVC08zdzmBtLUvmV1aW8g9OsLJqHaOTb2aWmsJ2
|
||||
rdpCpZfIhwEVMAMvK+A+DMDrW/EfgEOb5nMNyPr2CX0EQUgmfm/48ROfqIZ0H1OR
|
||||
zH82RhUlkR2uDe+Q0uzbOZ9v+TuV9g/zhoyulk9eatnLke3OGfA=
|
||||
=9V0a
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0da4ef87620647efca0198d420e897b97c56bcfcbcfdaa5a78aa50fd488301e0
|
||||
size 1064312
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmfG1q0ACgkQu0YzUNbv
|
||||
Me8SGA/+J36VqZ79cdjApXu5hMgkKjoS0ollM/tB3A1201OqAogzI7af0gP43mvf
|
||||
MCW81BU6cdsmM9SJwKTst3wPx50RqaPxkdxNrVEGKRGmYTJe20Qo77UYsihRYMvB
|
||||
qWdVxQFaaDE6e32c3oXNb2VcADHvIhi/ty7WvQQH52LY/rTaUiqQa0Yt/Z5hf9Ig
|
||||
MibHwl3DkydE1bWlQEGQv1Qt0vH2CP8TKsN2BuOEoRkMTO2UFDVPIJ5vBtJXjmvV
|
||||
N22oDCKiWuqzvnJT5A0K89D53/cildDzjD4F1UnId6YA6x3BmLqRt5D+aP2C119R
|
||||
UK/Di0NaSpI9fjfZvF1rA6DDqXJkZJrONnbKyv4dtuFvr39npeYMv/YBw4cvQify
|
||||
zXopL0A82cgua8cGifkCqw9pkikv19yae5Ph+NpnNR4/mhGirjdtvZTAwEfY7ioX
|
||||
HfSWgdreGGwc6v95pvwtxQLJdmaQJCfckA/DaI/Wj74ervspl2Ux2YtLjm5x2veS
|
||||
YiLpCFJODe/T43wzmNW+tm02XdP/oxcSnJE5kKbsThD6qPn1gSoRle/317zX+FG2
|
||||
9coN6ntyqDd9mRs62gbK+52iIs2Jv4iNR/xBCzY7zohovfdKjJO2Xlr04u5lXbr7
|
||||
GHMwJ+sY3je/iAHyD0G4hXwEzoMLTQgPIqClUZ/xzr4xMcTwC10=
|
||||
=i792
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8f82f14eecf6b5cbb2054a957cb889fbc025fe368ca1fca1ab7a2319a7317202
|
||||
size 1149304
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmf4ucgACgkQu0YzUNbv
|
||||
Me9qxQ//dmOdP8Xm2Oc9TBXCqFLzfkM8jYPsFRQvfI++Xs+UiTZR3AGe36s2IrYI
|
||||
hoV94icG7egvBCMh2DOQ8a7cPqqMhlATDgFYjM06J9dWMLAm/Xhua0k5NN974MRP
|
||||
mW1H80H8LJoS0brVT1SMuRVSCUqu6t2BIZ4YXGYIO4JkR+htknLhbDMi79WWDVRF
|
||||
jIIAOYzGP9YDbxR5fWEpxoTLP1oXrFvdyxbtNP0xvH9EnnXRSHzpxLnkv5vtNmqy
|
||||
KLDMko6vRkR8WaZbRHpjsMFxsyAOaqgqAn6JqNbX7666CrkvvSbWQqX9Ir/wV2Hi
|
||||
XwIsJvl03G70Or4xTQ23PicVROXQ2hFx5O1ZTOrKPdnjTHUe9VB/ghXh/4sliJiR
|
||||
q24fqfbQHM6JIgWvgpfmrdWO8bI/q8+ZCFwzXn033RxiJFEZZn+EfhKW8zXh5gc3
|
||||
VtiCAQ8J/1aaKoDPlWiLe38gKvT/AAj6NNqNZ0kMikN2UUurgbebA4yP7bXdZkp3
|
||||
oMNGcbWodXvhF6U/Cl9T6RLTtJ4+qx2tqlwrmLEDMUTQLwpqXmn9ckbrki5ZC23K
|
||||
hH/0M0mRkplrqAaJG6RY8/L/ilmdUrar4ozurSJMSas6f9KfzMdiLmyDveBSY96I
|
||||
QsfszozkdyBJVLNjy4vVCpjkZpdGAKbPWA4L74tljHML5iE47ys=
|
||||
=TNmN
|
||||
-----END PGP SIGNATURE-----
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e66d8290ee1a51f817a10cf083a1823289e9eceb9bcd0a0747f0b057424957ea
|
||||
size 1151184
|
@@ -1,16 +0,0 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIzBAABCgAdFiEE2BwMs463Je9mkcOFu0YzUNbvMe8FAmgZtu0ACgkQu0YzUNbv
|
||||
Me/TeA//ZTdhGvess8l3O8Wg4kG3ifdWX5TGs12SbHL85/4gTtyfTeI1iT4lJvAx
|
||||
C0XQtfsfEkDVQtAPC5BBGnHpcOnQNuT8J4eNQ/hteSlYqwE5DX82RHoVH4MsI3oI
|
||||
TjRRXixFH4oadpPd8KgKQ64pF/tqPbtBa1K9fxv7Nng8vQzLOkAX1G+dQSVmJRKk
|
||||
TG6xWIO/LP3Y2LHfrOjwsy1EDymqyU7GROqWn6mNsxhBCnAlaZWCUbQRMHRiC1OX
|
||||
aQfEkkcGBDBtd6EOIDxi5iQfcuHJ/+b6tCNv9YIxE1zJLMzbXSjQGu5k2sxSW6NO
|
||||
mePN47wNX/1mtoQeafB3EpRES+h4wUeSY6MN3pHCBmcYIncN3m1aiP1WHfdpOmmT
|
||||
j1Qa+csPVe0fIe6rzkR4Rxkvv5aXNzi0gOv9mhRZLayVKBnE0fvowIDPVhvuXaPA
|
||||
VcDWewMjjYFXJOy+SWP1aZfMJFSg5HBFPS/hi7HR0W2V3CylkhlF7uc0y57h4oYi
|
||||
aUOFumq6jK7HjMHZ5GAORctPaDcsIkz5eCMRJdXMnHVA+H0wkg41oA1RP/UgQyFh
|
||||
NbyaHKFRotyUPfLaz8jF8rpzP/+1rQtqbHSlXnjrTYHz8v9TcSRdtqkQGf5AEVEB
|
||||
nzJY1zVoF2V6IWKpfqsrKOIymOgKeNDeTAvp+BmHUMscW54XJFE=
|
||||
=38ke
|
||||
-----END PGP SIGNATURE-----
|
Reference in New Issue
Block a user