TempInfo Messageeventmodel

Further improvements to the handling of `mediaInfo` in `messageeventmodel`.

`blurhash` and `thumbnailInfo` are now replaced with a single `tempInfo` object that contains a single temp source. The priority is thumbnail > `blurhash` > empty if none exist.

Fixes network/neochat#235
This commit is contained in:
James Graham
2023-05-08 07:50:20 +00:00
committed by Tobias Fella
parent 20443ba59f
commit b82d3ab5ad
4 changed files with 29 additions and 12 deletions

View File

@@ -1150,14 +1150,19 @@ QVariantMap MessageEventModel::getMediaInfoFromFileInfo(const EventContent::File
mediaInfo["height"] = castInfo->imageSize.height(); mediaInfo["height"] = castInfo->imageSize.height();
if (!isThumbnail) { if (!isThumbnail) {
mediaInfo["thumbnailInfo"] = getMediaInfoFromFileInfo(castInfo->thumbnailInfo(), eventId, true); QVariantMap tempInfo;
} auto thumbnailInfo = getMediaInfoFromFileInfo(castInfo->thumbnailInfo(), eventId, true);
if (thumbnailInfo["source"].toUrl().scheme() == "mxc") {
QString blurhash = castInfo->originalInfoJson["xyz.amorgan.blurhash"].toString(); tempInfo = thumbnailInfo;
if (blurhash.isEmpty()) { } else {
mediaInfo["blurhash"] = QUrl(); QString blurhash = castInfo->originalInfoJson["xyz.amorgan.blurhash"].toString();
} else { if (blurhash.isEmpty()) {
mediaInfo["blurhash"] = QUrl("image://blurhash/" + blurhash); tempInfo["source"] = QUrl();
} else {
tempInfo["source"] = QUrl("image://blurhash/" + blurhash);
}
}
mediaInfo["tempInfo"] = tempInfo;
} }
} }
} }
@@ -1168,7 +1173,19 @@ QVariantMap MessageEventModel::getMediaInfoFromFileInfo(const EventContent::File
mediaInfo["duration"] = castInfo->duration; mediaInfo["duration"] = castInfo->duration;
if (!isThumbnail) { if (!isThumbnail) {
mediaInfo["thumbnailInfo"] = getMediaInfoFromFileInfo(castInfo->thumbnailInfo(), eventId, true); QVariantMap tempInfo;
auto thumbnailInfo = getMediaInfoFromFileInfo(castInfo->thumbnailInfo(), eventId, true);
if (thumbnailInfo["source"].toUrl().scheme() == "mxc") {
tempInfo = thumbnailInfo;
} else {
QString blurhash = castInfo->originalInfoJson["xyz.amorgan.blurhash"].toString();
if (blurhash.isEmpty()) {
tempInfo["source"] = QUrl();
} else {
tempInfo["source"] = QUrl("image://blurhash/" + blurhash);
}
}
mediaInfo["tempInfo"] = tempInfo;
} }
} }
} }

View File

@@ -20,7 +20,7 @@ Components.AlbumMaximizeComponent {
Components.AlbumModelItem { Components.AlbumModelItem {
type: root.modelData.delegateType === MessageEventModel.Image || root.modelData.delegateType === MessageEventModel.Sticker ? Components.AlbumModelItem.Image : Components.AlbumModelItem.Video type: root.modelData.delegateType === MessageEventModel.Image || root.modelData.delegateType === MessageEventModel.Sticker ? Components.AlbumModelItem.Image : Components.AlbumModelItem.Video
source: root.modelData.delegateType === MessageEventModel.Video ? modelData.progressInfo.localPath : modelData.mediaInfo.source source: root.modelData.delegateType === MessageEventModel.Video ? modelData.progressInfo.localPath : modelData.mediaInfo.source
tempSource: modelData.mediaInfo.blurhash tempSource: modelData.mediaInfo.tempInfo.source
caption: modelData.display caption: modelData.display
} }
] ]

View File

@@ -74,7 +74,7 @@ TimelineContainer {
Image { Image {
anchors.fill: parent anchors.fill: parent
source: model.mediaInfo.blurhash source: model.mediaInfo.tempInfo.source
visible: parent.status !== Image.Ready visible: parent.status !== Image.Ready
} }

View File

@@ -154,7 +154,7 @@ TimelineContainer {
anchors.fill: parent anchors.fill: parent
visible: false visible: false
source: model.mediaInfo.thumbnailInfo.source source: model.mediaInfo.tempInfo.source
fillMode: Image.PreserveAspectFit fillMode: Image.PreserveAspectFit
} }