From 65906d785ce5f17ae1f258ee9ec9b05f156c2eba Mon Sep 17 00:00:00 2001 From: Julien Wadel Date: Sun, 22 Mar 2020 21:57:48 +0100 Subject: [PATCH] - Reorder destroy objects - Fix signal attach to avoid cyclic connections - Add destructor on Settings Model - Add Presence Fix --- src/components/contacts/ContactsListModel.cpp | 1 - src/components/core/CoreManager.cpp | 2 ++ src/components/settings/SettingsModel.cpp | 15 ++++++++++----- src/components/settings/SettingsModel.hpp | 1 + src/components/sound-player/SoundPlayer.cpp | 13 +++++++------ src/utils/MediastreamerUtils.cpp | 18 +++++++++++------- 6 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/components/contacts/ContactsListModel.cpp b/src/components/contacts/ContactsListModel.cpp index a4808a0a8..146117961 100644 --- a/src/components/contacts/ContactsListModel.cpp +++ b/src/components/contacts/ContactsListModel.cpp @@ -33,7 +33,6 @@ using namespace std; ContactsListModel::ContactsListModel (QObject *parent) : QAbstractListModel(parent) { mLinphoneFriends = CoreManager::getInstance()->getCore()->getFriendsLists().front(); - // Clean friends. { list> toRemove; diff --git a/src/components/core/CoreManager.cpp b/src/components/core/CoreManager.cpp index bacf0389a..8ce99d21d 100644 --- a/src/components/core/CoreManager.cpp +++ b/src/components/core/CoreManager.cpp @@ -282,6 +282,8 @@ void CoreManager::createLinphoneCore (const QString &configPath) { setDatabasesPaths(); setOtherPaths(); + + mCore->enableFriendListSubscription(true); } void CoreManager::migrate () { diff --git a/src/components/settings/SettingsModel.cpp b/src/components/settings/SettingsModel.cpp index 12e419b55..e287287ac 100644 --- a/src/components/settings/SettingsModel.cpp +++ b/src/components/settings/SettingsModel.cpp @@ -51,11 +51,17 @@ SettingsModel::SettingsModel (QObject *parent) : QObject(parent) { this, &SettingsModel::handleCallStateChanged); configureRlsUri(); } - +SettingsModel::~SettingsModel() +{ + if(mSimpleCaptureGraph ) + { + delete mSimpleCaptureGraph; + mSimpleCaptureGraph = nullptr; + } +} void SettingsModel::settingsWindowClosing(void) { onSettingsTabChanged(-1); } - //Provides tabbar per-tab setup/teardown mecanism for specific settings views void SettingsModel::onSettingsTabChanged(int idx) { int prevIdx = mCurrentSettingsTab; @@ -160,15 +166,14 @@ void SettingsModel::createCaptureGraph() { } if (!mSimpleCaptureGraph) { mSimpleCaptureGraph = - new MediastreamerUtils::SimpleCaptureGraph(Utils::appStringToCoreString(getCaptureDevice()), - Utils::appStringToCoreString(getPlaybackDevice())); + new MediastreamerUtils::SimpleCaptureGraph(getCaptureDevice().toStdString(), getPlaybackDevice().toStdString()); } mSimpleCaptureGraph->start(); emit captureGraphRunningChanged(getCaptureGraphRunning()); } //Force a call on the 'detect' method of all audio filters, updating new or removed devices -void SettingsModel::accessAudioSettings() { +void SettingsModel::accessAudioSettings() { CoreManager::getInstance()->getCore()->reloadSoundDevices(); emit captureDevicesChanged(getCaptureDevices()); emit playbackDevicesChanged(getPlaybackDevices()); diff --git a/src/components/settings/SettingsModel.hpp b/src/components/settings/SettingsModel.hpp index 5720786b0..49a4540e2 100644 --- a/src/components/settings/SettingsModel.hpp +++ b/src/components/settings/SettingsModel.hpp @@ -190,6 +190,7 @@ public: SettingsModel (QObject *parent = Q_NULLPTR); + virtual ~SettingsModel (); // =========================================================================== // METHODS. diff --git a/src/components/sound-player/SoundPlayer.cpp b/src/components/sound-player/SoundPlayer.cpp index 1ce479606..7d5d933bc 100644 --- a/src/components/sound-player/SoundPlayer.cpp +++ b/src/components/sound-player/SoundPlayer.cpp @@ -58,13 +58,18 @@ private: // ----------------------------------------------------------------------------- SoundPlayer::SoundPlayer (QObject *parent) : QObject(parent) { + CoreManager *coreManager = CoreManager::getInstance(); + SettingsModel *settingsModel = coreManager->getSettingsModel(); mForceCloseTimer = new QTimer(this); mForceCloseTimer->setInterval(ForceCloseTimerInterval); QObject::connect(mForceCloseTimer, &QTimer::timeout, this, &SoundPlayer::handleEof); - mHandlers = make_shared(this); + mHandlers = make_shared(this); + QObject::connect(settingsModel, &SettingsModel::ringerDeviceChanged, this, [this] { + rebuildInternalPlayer(); + }); buildInternalPlayer(); } @@ -142,10 +147,6 @@ void SoundPlayer::buildInternalPlayer () { Utils::appStringToCoreString(settingsModel->getRingerDevice()), "", nullptr ); mInternalPlayer->addListener(mHandlers); - - QObject::connect(settingsModel, &SettingsModel::ringerDeviceChanged, this, [this] { - rebuildInternalPlayer(); - }); } void SoundPlayer::rebuildInternalPlayer () { @@ -159,9 +160,9 @@ void SoundPlayer::stop (bool force) { mForceCloseTimer->stop(); mPlaybackState = SoundPlayer::StoppedState; - mInternalPlayer->close(); + emit stopped(); emit playbackStateChanged(mPlaybackState); } diff --git a/src/utils/MediastreamerUtils.cpp b/src/utils/MediastreamerUtils.cpp index 8c0ef16ca..4f530da2e 100644 --- a/src/utils/MediastreamerUtils.cpp +++ b/src/utils/MediastreamerUtils.cpp @@ -45,9 +45,11 @@ SimpleCaptureGraph::~SimpleCaptureGraph() } void SimpleCaptureGraph::init() { + if (!audioCapture) { audioCapture = ms_snd_card_create_reader(captureCard); } + if (!audioSink) { audioSink = ms_snd_card_create_writer(playbackCard); } @@ -67,6 +69,7 @@ void SimpleCaptureGraph::init() { ms_filter_call_method(playbackVolumeFilter, static_cast(MS_VOLUME_SET_GAIN), &muteGain); ticker = ms_ticker_new(); + running = false; } @@ -89,14 +92,15 @@ void SimpleCaptureGraph::destroy() { stop(); } ms_ticker_destroy(ticker); - ms_filter_unlink(audioCapture, 0, captureVolumeFilter, 0); - ms_filter_unlink(captureVolumeFilter, 0, playbackVolumeFilter, 0); - ms_filter_unlink(playbackVolumeFilter, 0, audioSink, 0); - ms_free(audioCapture); - ms_free(captureVolumeFilter); - ms_free(audioSink); - ms_free(playbackVolumeFilter); + ms_filter_unlink(playbackVolumeFilter, 0, audioSink, 0); + ms_filter_unlink(captureVolumeFilter, 0, playbackVolumeFilter, 0); + ms_filter_unlink(audioCapture, 0, captureVolumeFilter, 0); + + ms_filter_destroy(playbackVolumeFilter); + ms_filter_destroy(captureVolumeFilter); + ms_filter_destroy(audioSink); + ms_filter_destroy(audioCapture); } float SimpleCaptureGraph::getCaptureGain() {