summary refs log tree commit diff
path: root/src/CallManager.cpp
diff options
context:
space:
mode:
authorDeepBlueV7.X <nicolas.werner@hotmail.de>2020-11-13 18:15:35 +0100
committerGitHub <noreply@github.com>2020-11-13 18:15:35 +0100
commit4d9d049f2ab8fd02fd28e55043e68f49ba2817ff (patch)
treec1166b8f3515179e45bf827e9e71757c96637660 /src/CallManager.cpp
parentMerge pull request #314 from MayeulC/smoothie-2 (diff)
parentclang-format (diff)
downloadnheko-4d9d049f2ab8fd02fd28e55043e68f49ba2817ff.tar.xz
Merge pull request #325 from trilene/webrtc-video
Make incoming call ringtone a user setting
Diffstat (limited to 'src/CallManager.cpp')
-rw-r--r--src/CallManager.cpp32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/CallManager.cpp b/src/CallManager.cpp

index ac0636e0..89cfeaf9 100644 --- a/src/CallManager.cpp +++ b/src/CallManager.cpp
@@ -98,7 +98,7 @@ CallManager::CallManager(QObject *parent) connect(&session_, &WebRTCSession::stateChanged, this, [this](webrtc::State state) { switch (state) { case webrtc::State::DISCONNECTED: - playRingtone("qrc:/media/media/callend.ogg", false); + playRingtone(QUrl("qrc:/media/media/callend.ogg"), false); clear(); break; case webrtc::State::ICEFAILED: { @@ -121,6 +121,24 @@ CallManager::CallManager(QObject *parent) if (status == QMediaPlayer::LoadedMedia) player_.play(); }); + + connect(&player_, + QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error), + [this](QMediaPlayer::Error error) { + stopRingtone(); + switch (error) { + case QMediaPlayer::FormatError: + case QMediaPlayer::ResourceError: + nhlog::ui()->error("WebRTC: valid ringtone file not found"); + break; + case QMediaPlayer::AccessDeniedError: + nhlog::ui()->error("WebRTC: access to ringtone file denied"); + break; + default: + nhlog::ui()->error("WebRTC: unable to play ringtone"); + break; + } + }); } void @@ -153,7 +171,7 @@ CallManager::sendInvite(const QString &roomid, bool isVideo) callPartyName_ = callee.display_name.isEmpty() ? callee.user_id : callee.display_name; callPartyAvatarUrl_ = QString::fromStdString(roomInfo.avatar_url); emit newCallParty(); - playRingtone("qrc:/media/media/ringback.ogg", true); + playRingtone(QUrl("qrc:/media/media/ringback.ogg"), true); if (!session_.createOffer(isVideo)) { emit ChatPage::instance()->showNotification("Problem setting up call."); endCall(); @@ -247,7 +265,11 @@ CallManager::handleEvent(const RoomEvent<CallInvite> &callInviteEvent) return; } - playRingtone("qrc:/media/media/ring.ogg", true); + const QString &ringtone = ChatPage::instance()->userSettings()->ringtone(); + if (ringtone != "Mute") + playRingtone(ringtone == "Default" ? QUrl("qrc:/media/media/ring.ogg") + : QUrl::fromLocalFile(ringtone), + true); roomid_ = QString::fromStdString(callInviteEvent.room_id); callid_ = callInviteEvent.content.call_id; remoteICECandidates_.clear(); @@ -409,13 +431,13 @@ CallManager::retrieveTurnServer() } void -CallManager::playRingtone(const QString &ringtone, bool repeat) +CallManager::playRingtone(const QUrl &ringtone, bool repeat) { static QMediaPlaylist playlist; playlist.clear(); playlist.setPlaybackMode(repeat ? QMediaPlaylist::CurrentItemInLoop : QMediaPlaylist::CurrentItemOnce); - playlist.addMedia(QUrl(ringtone)); + playlist.addMedia(ringtone); player_.setVolume(100); player_.setPlaylist(&playlist); }