diff --git a/src/app/roommanager.cpp b/src/app/roommanager.cpp index 5502cf049..85ec1f9b6 100644 --- a/src/app/roommanager.cpp +++ b/src/app/roommanager.cpp @@ -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); } diff --git a/src/app/roommanager.h b/src/app/roommanager.h index 051e5d976..84d8f63ca 100644 --- a/src/app/roommanager.h +++ b/src/app/roommanager.h @@ -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); diff --git a/src/messagecontent/ImageComponent.qml b/src/messagecontent/ImageComponent.qml index e157a85df..5175f00c9 100644 --- a/src/messagecontent/ImageComponent.qml +++ b/src/messagecontent/ImageComponent.qml @@ -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); } } } diff --git a/src/messagecontent/VideoComponent.qml b/src/messagecontent/VideoComponent.qml index 5d4100648..3e5ff4434 100644 --- a/src/messagecontent/VideoComponent.qml +++ b/src/messagecontent/VideoComponent.qml @@ -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); } } } diff --git a/src/timeline/models/mediamessagefiltermodel.cpp b/src/timeline/models/mediamessagefiltermodel.cpp index f8817bcbf..bae64f042 100644 --- a/src/timeline/models/mediamessagefiltermodel.cpp +++ b/src/timeline/models/mediamessagefiltermodel.cpp @@ -85,9 +85,14 @@ QHash 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" diff --git a/src/timeline/models/mediamessagefiltermodel.h b/src/timeline/models/mediamessagefiltermodel.h index 9d8125f2f..ffafd10d1 100644 --- a/src/timeline/models/mediamessagefiltermodel.h +++ b/src/timeline/models/mediamessagefiltermodel.h @@ -63,5 +63,5 @@ public: */ [[nodiscard]] QHash roleNames() const override; - Q_INVOKABLE int getRowForSourceItem(int sourceRow) const; + int getRowForEventId(const QString &eventId) const; };