From 9bbade37dec0ba98be0e9b20f7a6f45cff59a9b0 Mon Sep 17 00:00:00 2001
From: trilene <trilene@runbox.com>
Date: Fri, 1 Jan 2021 08:46:08 -0500
Subject: [PATCH] Fix call answered on another device

---
 src/CallManager.cpp            | 13 ++++++++-----
 src/timeline/TimelineModel.cpp |  7 ++++++-
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/src/CallManager.cpp b/src/CallManager.cpp
index 9864b2030..f725d49f8 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 adef886d2..2b5b5794c 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))
-- 
GitLab