Fix maximizing replied-to media

The previous index-based handling opened the wrong media, as it used the wrong index.
This commit is contained in:
Tobias Fella
2025-07-07 15:24:08 +02:00
committed by Tobias Fella
parent ad993d4340
commit 10123abc5b
6 changed files with 20 additions and 22 deletions

View File

@@ -236,11 +236,18 @@ void RoomManager::resolveResource(Uri uri, const QString &action)
}
}
void RoomManager::maximizeMedia(int index)
void RoomManager::maximizeMedia(const QString &eventId)
{
if (index < -1 || index > m_mediaMessageFilterModel->rowCount()) {
if (eventId.isEmpty()) {
qWarning() << "Tried to open media for empty event id";
return;
}
const auto index = m_mediaMessageFilterModel->getRowForEventId(eventId);
if (index == -1) {
return;
}
Q_EMIT showMaximizedMedia(index);
}

View File

@@ -212,12 +212,8 @@ public:
/**
* @brief Show a media item maximized.
*
* @param index the index to open the maximize delegate model at. This is the
* index in the MediaMessageFilterModel owned by this RoomManager. A value
* of -1 opens a the default item.
*/
Q_INVOKABLE void maximizeMedia(int index);
Q_INVOKABLE void maximizeMedia(const QString &eventId);
Q_INVOKABLE void maximizeCode(NeochatRoomMember *author, const QDateTime &time, const QString &codeText, const QString &language);

View File

@@ -158,12 +158,7 @@ Item {
}
root.Message.timeline.interactive = false;
if (!root.mediaInfo.isSticker) {
// We need to make sure the index is that of the MediaMessageFilterModel.
if (root.Message.timeline.model instanceof MessageFilterModel) {
RoomManager.maximizeMedia(RoomManager.mediaMessageFilterModel.getRowForSourceItem(root.Message.index));
} else {
RoomManager.maximizeMedia(root.Message.index);
}
RoomManager.maximizeMedia(root.eventId);
}
}
}

View File

@@ -385,12 +385,7 @@ Video {
onTriggered: {
root.Message.timeline.interactive = false;
root.pause();
// We need to make sure the index is that of the MediaMessageFilterModel.
if (root.Message.timeline.model instanceof MessageFilterModel) {
RoomManager.maximizeMedia(RoomManager.mediaMessageFilterModel.getRowForSourceItem(root.Message.index));
} else {
RoomManager.maximizeMedia(root.Message.index);
}
RoomManager.maximizeMedia(root.eventId);
}
}
}

View File

@@ -85,9 +85,14 @@ QHash<int, QByteArray> MediaMessageFilterModel::roleNames() const
return roles;
}
int MediaMessageFilterModel::getRowForSourceItem(int sourceRow) const
int MediaMessageFilterModel::getRowForEventId(const QString &eventId) const
{
return mapFromSource(sourceModel()->index(sourceRow, 0)).row();
for (auto i = 0; i < rowCount(); i++) {
if (data(index(i, 0), MessageModel::EventIdRole).toString() == eventId) {
return i;
}
}
return -1;
}
#include "moc_mediamessagefiltermodel.cpp"

View File

@@ -63,5 +63,5 @@ public:
*/
[[nodiscard]] QHash<int, QByteArray> roleNames() const override;
Q_INVOKABLE int getRowForSourceItem(int sourceRow) const;
int getRowForEventId(const QString &eventId) const;
};