From 8c037f83c5c3b770e85f10e0b07cec280883cc58 Mon Sep 17 00:00:00 2001 From: trilene Date: Thu, 12 Nov 2020 19:55:35 -0500 Subject: Make incoming call ringtone a user setting --- src/CallManager.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/CallManager.cpp') 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::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 &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); } -- cgit 1.5.1