From 7bc57f76f77ac282afb78c3e4d02dd647dc0d449 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sat, 23 Jan 2021 20:08:59 +0100 Subject: Request unknown message indices --- src/timeline/EventStore.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/timeline/EventStore.cpp') diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index 41001081..d7629456 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -543,12 +543,21 @@ EventStore::decryptEvent(const IdIndex &idx, if (decryptionResult.error) { switch (*decryptionResult.error) { - case olm::DecryptionErrorCode::MissingSession: { - dummy.content.body = - tr("-- Encrypted Event (No keys found for decryption) --", - "Placeholder, when the message was not decrypted yet or can't be " - "decrypted.") - .toStdString(); + case olm::DecryptionErrorCode::MissingSession: + case olm::DecryptionErrorCode::MissingSessionIndex: { + if (decryptionResult.error == olm::DecryptionErrorCode::MissingSession) + dummy.content.body = + tr("-- Encrypted Event (No keys found for decryption) --", + "Placeholder, when the message was not decrypted yet or can't " + "be " + "decrypted.") + .toStdString(); + else + dummy.content.body = + tr("-- Encrypted Event (Key not valid for this index) --", + "Placeholder, when the message can't be decrypted with this " + "key since it is not valid for this index ") + .toStdString(); nhlog::crypto()->info("Could not find inbound megolm session ({}, {}, {})", index.room_id, index.session_id, -- cgit 1.5.1 From f0102c1e55bbe686d0cf799bc4e3d3a4cc643ffd Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Sun, 24 Jan 2021 20:02:24 +0100 Subject: Fix old messages being played back after limit reset --- src/timeline/EventStore.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/timeline/EventStore.cpp') diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index d7629456..b16bf1d2 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -229,6 +229,9 @@ EventStore::clearTimeline() } nhlog::ui()->info("Range {} {}", this->last, this->first); + decryptedEvents_.clear(); + events_.clear(); + emit endResetModel(); } @@ -265,6 +268,9 @@ EventStore::handleSync(const mtx::responses::Timeline &events) emit beginResetModel(); this->first = std::numeric_limits::max(); this->last = std::numeric_limits::max(); + + decryptedEvents_.clear(); + events_.clear(); emit endResetModel(); return; } @@ -273,6 +279,9 @@ EventStore::handleSync(const mtx::responses::Timeline &events) emit beginResetModel(); this->last = range->last; this->first = range->first; + + decryptedEvents_.clear(); + events_.clear(); emit endResetModel(); } else if (range->last > this->last) { emit beginInsertRows(toExternalIdx(this->last + 1), toExternalIdx(range->last)); -- cgit 1.5.1 From 5fbf17f6ec6a0a31fbb6ee874c56db507b02ffe9 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 20:29:06 +0100 Subject: Fix request key loops --- src/timeline/EventStore.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/timeline/EventStore.cpp') diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index b16bf1d2..4748f9c0 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -242,7 +242,9 @@ EventStore::receivedSessionKey(const std::string &session_id) return; auto request = pending_key_requests.at(session_id); - pending_key_requests.erase(session_id); + + // Don't request keys again until Nheko is restarted (for now) + pending_key_requests[session_id].events.clear(); olm::send_key_request_for(request.events.front(), request.request_id, true); @@ -778,7 +780,8 @@ EventStore::fetchMore() if (cache::client()->previousBatchToken(room_id_) != opts.from) { nhlog::net()->warn("Cache cleared while fetching more messages, dropping " "/messages response"); - emit fetchedMore(); + if (!opts.to.empty()) + emit fetchedMore(); return; } if (err) { -- cgit 1.5.1 From 50564985ccfd686dde6f74050c1c3890246bd141 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 21:30:06 +0100 Subject: Fix crash, when keys for no events were requested --- src/timeline/EventStore.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/timeline/EventStore.cpp') diff --git a/src/timeline/EventStore.cpp b/src/timeline/EventStore.cpp index 4748f9c0..be4bc09e 100644 --- a/src/timeline/EventStore.cpp +++ b/src/timeline/EventStore.cpp @@ -246,7 +246,8 @@ EventStore::receivedSessionKey(const std::string &session_id) // Don't request keys again until Nheko is restarted (for now) pending_key_requests[session_id].events.clear(); - olm::send_key_request_for(request.events.front(), request.request_id, true); + if (!request.events.empty()) + olm::send_key_request_for(request.events.front(), request.request_id, true); for (const auto &e : request.events) { auto idx = idToIndex(e.event_id); -- cgit 1.5.1