Actually fix updating roomlist on new messages
This commit is contained in:
parent
3c9ddc2afb
commit
6b6085b270
3 changed files with 32 additions and 29 deletions
|
|
@ -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<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(
|
||||
&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<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(&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<QString>
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue