Fix call answered on another device
2 files changed, 14 insertions, 6 deletions
diff --git a/src/CallManager.cpp b/src/CallManager.cpp
index 9864b203..f725d49f 100644
--- a/src/CallManager.cpp
+++ b/src/CallManager.cpp
@@ -351,12 +351,15 @@ CallManager::handleEvent(const RoomEvent<CallAnswer> &callAnswerEvent)
callAnswerEvent.content.call_id,
callAnswerEvent.sender);
- if (!isOnCall() && callAnswerEvent.sender == utils::localUser().toStdString() &&
+ if (callAnswerEvent.sender == utils::localUser().toStdString() &&
callid_ == callAnswerEvent.content.call_id) {
- emit ChatPage::instance()->showNotification("Call answered on another device.");
- stopRingtone();
- haveCallInvite_ = false;
- emit newInviteState();
+ if (!isOnCall()) {
+ emit ChatPage::instance()->showNotification(
+ "Call answered on another device.");
+ stopRingtone();
+ haveCallInvite_ = false;
+ emit newInviteState();
+ }
return;
}
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index adef886d..2b5b5794 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -613,8 +613,13 @@ TimelineModel::addEvents(const mtx::responses::Timeline &timeline)
std::visit(
[this](auto &event) {
event.room_id = room_id_.toStdString();
- if (event.sender != http::client()->user_id().to_string())
+ if constexpr (std::is_same_v<std::decay_t<decltype(event)>,
+ RoomEvent<msg::CallAnswer>>)
emit newCallEvent(event);
+ else {
+ if (event.sender != http::client()->user_id().to_string())
+ emit newCallEvent(event);
+ }
},
e);
else if (std::holds_alternative<StateEvent<state::Avatar>>(e))
|