summary refs log tree commit diff
path: root/src/CallManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/CallManager.cpp')
-rw-r--r--src/CallManager.cpp44
1 files changed, 22 insertions, 22 deletions
diff --git a/src/CallManager.cpp b/src/CallManager.cpp

index eaf1a549..ac0636e0 100644 --- a/src/CallManager.cpp +++ b/src/CallManager.cpp
@@ -12,7 +12,6 @@ #include "Logging.h" #include "MainWindow.h" #include "MatrixClient.h" -#include "UserSettingsPage.h" #include "Utils.h" #include "WebRTCSession.h" #include "dialogs/AcceptCall.h" @@ -26,19 +25,15 @@ Q_DECLARE_METATYPE(mtx::responses::TurnServer) using namespace mtx::events; using namespace mtx::events::msg; -// https://github.com/vector-im/riot-web/issues/10173 -#define STUN_SERVER "stun://turn.matrix.org:3478" - namespace { std::vector<std::string> getTurnURIs(const mtx::responses::TurnServer &turnServer); } -CallManager::CallManager(QSharedPointer<UserSettings> userSettings, QObject *parent) +CallManager::CallManager(QObject *parent) : QObject(parent) , session_(WebRTCSession::instance()) , turnServerTimer_(this) - , settings_(userSettings) { qRegisterMetaType<std::vector<mtx::events::msg::CallCandidates::Candidate>>(); qRegisterMetaType<mtx::events::msg::CallCandidates::Candidate>(); @@ -129,30 +124,29 @@ CallManager::CallManager(QSharedPointer<UserSettings> userSettings, QObject *par } void -CallManager::sendInvite(const QString &roomid) +CallManager::sendInvite(const QString &roomid, bool isVideo) { if (onActiveCall()) return; auto roomInfo = cache::singleRoomInfo(roomid.toStdString()); if (roomInfo.member_count != 2) { - emit ChatPage::instance()->showNotification( - "Voice calls are limited to 1:1 rooms."); + emit ChatPage::instance()->showNotification("Calls are limited to 1:1 rooms."); return; } std::string errorMessage; - if (!session_.init(&errorMessage)) { + if (!session_.havePlugins(false, &errorMessage) || + (isVideo && !session_.havePlugins(true, &errorMessage))) { emit ChatPage::instance()->showNotification(QString::fromStdString(errorMessage)); return; } roomid_ = roomid; - session_.setStunServer(settings_->useStunServer() ? STUN_SERVER : ""); session_.setTurnServers(turnURIs_); - generateCallID(); - nhlog::ui()->debug("WebRTC: call id: {} - creating invite", callid_); + nhlog::ui()->debug( + "WebRTC: call id: {} - creating {} invite", callid_, isVideo ? "video" : "voice"); std::vector<RoomMember> members(cache::getMembers(roomid.toStdString())); const RoomMember &callee = members.front().user_id == utils::localUser() ? members.back() : members.front(); @@ -160,10 +154,12 @@ CallManager::sendInvite(const QString &roomid) callPartyAvatarUrl_ = QString::fromStdString(roomInfo.avatar_url); emit newCallParty(); playRingtone("qrc:/media/media/ringback.ogg", true); - if (!session_.createOffer()) { + if (!session_.createOffer(isVideo)) { emit ChatPage::instance()->showNotification("Problem setting up call."); endCall(); } + if (isVideo) + emit newVideoCallState(); } namespace { @@ -243,7 +239,7 @@ CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent) return; auto roomInfo = cache::singleRoomInfo(callInviteEvent.room_id); - if (onActiveCall() || roomInfo.member_count != 2 || isVideo) { + if (onActiveCall() || roomInfo.member_count != 2) { emit newMessage(QString::fromStdString(callInviteEvent.room_id), CallHangUp{callInviteEvent.content.call_id, 0, @@ -266,11 +262,11 @@ CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent) caller.display_name, QString::fromStdString(roomInfo.name), QString::fromStdString(roomInfo.avatar_url), - settings_, + isVideo, MainWindow::instance()); - connect(dialog, &dialogs::AcceptCall::accept, this, [this, callInviteEvent]() { + connect(dialog, &dialogs::AcceptCall::accept, this, [this, callInviteEvent, isVideo]() { MainWindow::instance()->hideOverlay(); - answerInvite(callInviteEvent.content); + answerInvite(callInviteEvent.content, isVideo); }); connect(dialog, &dialogs::AcceptCall::reject, this, [this]() { MainWindow::instance()->hideOverlay(); @@ -280,19 +276,18 @@ CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent) } void -CallManager::answerInvite(const CallInvite &invite) +CallManager::answerInvite(const CallInvite &invite, bool isVideo) { stopRingtone(); std::string errorMessage; - if (!session_.init(&errorMessage)) { + if (!session_.havePlugins(false, &errorMessage) || + (isVideo && !session_.havePlugins(true, &errorMessage))) { emit ChatPage::instance()->showNotification(QString::fromStdString(errorMessage)); hangUp(); return; } - session_.setStunServer(settings_->useStunServer() ? STUN_SERVER : ""); session_.setTurnServers(turnURIs_); - if (!session_.acceptOffer(invite.sdp)) { emit ChatPage::instance()->showNotification("Problem setting up call."); hangUp(); @@ -300,6 +295,8 @@ CallManager::answerInvite(const CallInvite &invite) } session_.acceptICECandidates(remoteICECandidates_); remoteICECandidates_.clear(); + if (isVideo) + emit newVideoCallState(); } void @@ -385,7 +382,10 @@ CallManager::endCall() { stopRingtone(); clear(); + bool isVideo = session_.isVideo(); session_.end(); + if (isVideo) + emit newVideoCallState(); } void