From 6b6085b270bcdffe56e19de1cd1171a73fe5fba1 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Thu, 31 Oct 2019 14:09:51 +0100 Subject: Actually fix updating roomlist on new messages --- src/timeline2/TimelineModel.cpp | 57 +++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 28 deletions(-) (limited to 'src/timeline2/TimelineModel.cpp') diff --git a/src/timeline2/TimelineModel.cpp b/src/timeline2/TimelineModel.cpp index 45126b36..2428ddb6 100644 --- a/src/timeline2/TimelineModel.cpp +++ b/src/timeline2/TimelineModel.cpp @@ -348,6 +348,9 @@ TimelineModel::TimelineModel(TimelineViewManager *manager, QString room_id, QObj events.remove(txn_id); events.insert(event_id, ev); + // mark our messages as read + readEvent(event_id.toStdString()); + // ask to be notified for read receipts cache::client()->addPendingReceipt(room_id_, event_id); @@ -525,25 +528,20 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline) this->eventOrder.insert(this->eventOrder.end(), ids.begin(), ids.end()); endInsertRows(); - for (auto id = eventOrder.rbegin(); id != eventOrder.rend(); id++) { - auto event = events.value(*id); - if (auto e = boost::get>( - &event)) { - event = decryptEvent(*e).event; - } + updateLastMessage(); +} - auto type = boost::apply_visitor( - [](const auto &e) -> mtx::events::EventType { return e.type; }, event); - if (type == mtx::events::EventType::RoomMessage || - type == mtx::events::EventType::Sticker) { - auto description = utils::getMessageDescription( - event, - QString::fromStdString(http::client()->user_id().to_string()), - room_id_); - emit manager_->updateRoomsLastMessage(room_id_, description); - break; - } +void +TimelineModel::updateLastMessage() +{ + auto event = events.value(eventOrder.back()); + if (auto e = boost::get>(&event)) { + event = decryptEvent(*e).event; } + + auto description = utils::getMessageDescription( + event, QString::fromStdString(http::client()->user_id().to_string()), room_id_); + emit manager_->updateRoomsLastMessage(room_id_, description); } std::vector @@ -634,20 +632,23 @@ TimelineModel::setCurrentIndex(int index) currentId = indexToId(index); emit currentIndexChanged(index); - if (oldIndex < index) { - http::client()->read_event(room_id_.toStdString(), - currentId.toStdString(), - [this](mtx::http::RequestErr err) { - if (err) { - nhlog::net()->warn( - "failed to read_event ({}, {})", - room_id_.toStdString(), - currentId.toStdString()); - } - }); + if (oldIndex < index && !pending.contains(currentId)) { + readEvent(currentId.toStdString()); } } +void +TimelineModel::readEvent(const std::string &id) +{ + http::client()->read_event(room_id_.toStdString(), id, [this](mtx::http::RequestErr err) { + if (err) { + nhlog::net()->warn("failed to read_event ({}, {})", + room_id_.toStdString(), + currentId.toStdString()); + } + }); +} + void TimelineModel::addBackwardsEvents(const mtx::responses::Messages &msgs) { -- cgit 1.5.1