|
|
|
@ -32,7 +32,8 @@ EventStore::EventStore(std::string room_id, QObject *) |
|
|
|
|
this->last = range->last; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
connect(this, |
|
|
|
|
connect( |
|
|
|
|
this, |
|
|
|
|
&EventStore::eventFetched, |
|
|
|
|
this, |
|
|
|
|
[this](std::string id, |
|
|
|
@ -48,12 +49,13 @@ EventStore::EventStore(std::string room_id, QObject *) |
|
|
|
|
}, |
|
|
|
|
Qt::QueuedConnection); |
|
|
|
|
|
|
|
|
|
connect(this, |
|
|
|
|
connect( |
|
|
|
|
this, |
|
|
|
|
&EventStore::oldMessagesRetrieved, |
|
|
|
|
this, |
|
|
|
|
[this](const mtx::responses::Messages &res) { |
|
|
|
|
uint64_t newFirst = cache::client()->saveOldMessages(room_id_, res); |
|
|
|
|
if (newFirst == first && !res.chunk.empty()) |
|
|
|
|
if (newFirst == first) |
|
|
|
|
fetchMore(); |
|
|
|
|
else { |
|
|
|
|
emit beginInsertRows(toExternalIdx(newFirst), |
|
|
|
@ -128,7 +130,8 @@ EventStore::EventStore(std::string room_id, QObject *) |
|
|
|
|
event->data); |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
connect(this, |
|
|
|
|
connect( |
|
|
|
|
this, |
|
|
|
|
&EventStore::messageFailed, |
|
|
|
|
this, |
|
|
|
|
[this](std::string txn_id) { |
|
|
|
@ -148,7 +151,8 @@ EventStore::EventStore(std::string room_id, QObject *) |
|
|
|
|
}, |
|
|
|
|
Qt::QueuedConnection); |
|
|
|
|
|
|
|
|
|
connect(this, |
|
|
|
|
connect( |
|
|
|
|
this, |
|
|
|
|
&EventStore::messageSent, |
|
|
|
|
this, |
|
|
|
|
[this](std::string txn_id, std::string event_id) { |
|
|
|
@ -280,50 +284,77 @@ EventStore::handleSync(const mtx::responses::Timeline &events) |
|
|
|
|
if (auto encrypted = |
|
|
|
|
std::get_if<mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>( |
|
|
|
|
&event)) { |
|
|
|
|
auto event = decryptEvent({room_id_, encrypted->event_id}, *encrypted); |
|
|
|
|
auto d_event = decryptEvent({room_id_, encrypted->event_id}, *encrypted); |
|
|
|
|
if (std::visit( |
|
|
|
|
[](auto e) { return (e.sender != utils::localUser().toStdString()); }, |
|
|
|
|
*event)) { |
|
|
|
|
if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationRequest>>(event)) { |
|
|
|
|
*d_event)) { |
|
|
|
|
if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationRequest>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationRequest>>(d_event); |
|
|
|
|
last_verification_request_event = *msg; |
|
|
|
|
} else if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationCancel>>(event)) { |
|
|
|
|
continue; |
|
|
|
|
} else if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationCancel>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationCancel>>(d_event); |
|
|
|
|
last_verification_cancel_event = *msg; |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationCancel( |
|
|
|
|
msg->content); |
|
|
|
|
} else if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationAccept>>(event)) { |
|
|
|
|
continue; |
|
|
|
|
} else if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationAccept>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationAccept>>(d_event); |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationAccept( |
|
|
|
|
msg->content); |
|
|
|
|
} else if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationKey>>(event)) { |
|
|
|
|
continue; |
|
|
|
|
} else if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationKey>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationKey>>(d_event); |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationKey( |
|
|
|
|
msg->content); |
|
|
|
|
} else if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationMac>>(event)) { |
|
|
|
|
continue; |
|
|
|
|
} else if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationMac>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationMac>>(d_event); |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationMac( |
|
|
|
|
msg->content); |
|
|
|
|
} else if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationReady>>(event)) { |
|
|
|
|
continue; |
|
|
|
|
} else if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationReady>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationReady>>(d_event); |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationReady( |
|
|
|
|
msg->content); |
|
|
|
|
} else if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationDone>>(event)) { |
|
|
|
|
continue; |
|
|
|
|
} else if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationDone>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationDone>>(d_event); |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationDone( |
|
|
|
|
msg->content); |
|
|
|
|
} else if (auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationStart>>(event)) { |
|
|
|
|
continue; |
|
|
|
|
} else if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationStart>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationStart>>(d_event); |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationStart( |
|
|
|
|
msg->content, msg->sender); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// only the key.verification.ready sent by localuser's other device
|
|
|
|
|
// is of significance as it is used for detecting accepted request
|
|
|
|
|
if (std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationReady>>(d_event)) { |
|
|
|
|
auto msg = std::get_if<mtx::events::RoomEvent< |
|
|
|
|
mtx::events::msg::KeyVerificationReady>>(d_event); |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationReady( |
|
|
|
|
msg->content); |
|
|
|
|
} |
|
|
|
|
// only the key.verification.ready sent by localuser's other device is of
|
|
|
|
|
// significance as it is used for detecting accepted request
|
|
|
|
|
if (auto msg = std::get_if< |
|
|
|
|
mtx::events::RoomEvent<mtx::events::msg::KeyVerificationReady>>( |
|
|
|
|
event)) { |
|
|
|
|
ChatPage::instance()->recievedDeviceVerificationReady(msg->content); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -614,12 +645,6 @@ EventStore::decryptEvent(const IdIndex &idx, |
|
|
|
|
return asCacheEntry(std::move(temp_events[0])); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
dummy.content.body = tr("-- Encrypted Event (Unknown event type) --", |
|
|
|
|
"Placeholder, when the message was decrypted, but we " |
|
|
|
|
"couldn't parse it, because " |
|
|
|
|
"Nheko/mtxclient don't support that event type yet.") |
|
|
|
|
.toStdString(); |
|
|
|
|
return asCacheEntry(std::move(dummy)); |
|
|
|
|
auto encInfo = mtx::accessors::file(decryptionResult.event.value()); |
|
|
|
|
if (encInfo) |
|
|
|
|
emit newEncryptedImage(encInfo.value()); |
|
|
|
|