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; return;
} }
const auto index = m_mediaMessageFilterModel->getRowForEventId(eventId);
if (index == -1) {
return;
}
Q_EMIT showMaximizedMedia(index); Q_EMIT showMaximizedMedia(index);
} }

View File

@@ -212,12 +212,8 @@ public:
/** /**
* @brief Show a media item maximized. * @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); 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; root.Message.timeline.interactive = false;
if (!root.mediaInfo.isSticker) { if (!root.mediaInfo.isSticker) {
// We need to make sure the index is that of the MediaMessageFilterModel. RoomManager.maximizeMedia(root.eventId);
if (root.Message.timeline.model instanceof MessageFilterModel) {
RoomManager.maximizeMedia(RoomManager.mediaMessageFilterModel.getRowForSourceItem(root.Message.index));
} else {
RoomManager.maximizeMedia(root.Message.index);
}
} }
} }
} }

View File

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

View File

@@ -85,9 +85,14 @@ QHash<int, QByteArray> MediaMessageFilterModel::roleNames() const
return roles; 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" #include "moc_mediamessagefiltermodel.cpp"

View File

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