mirror of
https://gitlab.linphone.org/BC/public/linphone-desktop.git
synced 2026-01-21 05:38:12 +00:00
fix(SoundPlayer): handle ringer device change
This commit is contained in:
parent
d4e1adca83
commit
ab4efe774d
2 changed files with 41 additions and 12 deletions
|
|
@ -64,8 +64,7 @@ SoundPlayer::SoundPlayer (QObject *parent) : QObject(parent) {
|
|||
|
||||
mHandlers = make_shared<SoundPlayer::Handlers>(this);
|
||||
|
||||
mInternalPlayer = CoreManager::getInstance()->getCore()->createLocalPlayer("", "", nullptr);
|
||||
mInternalPlayer->setListener(mHandlers);
|
||||
buildInternalPlayer();
|
||||
}
|
||||
|
||||
SoundPlayer::~SoundPlayer () {
|
||||
|
|
@ -117,16 +116,7 @@ void SoundPlayer::play () {
|
|||
}
|
||||
|
||||
void SoundPlayer::stop () {
|
||||
if (mPlaybackState == SoundPlayer::StoppedState)
|
||||
return;
|
||||
|
||||
mForceCloseTimer->stop();
|
||||
mPlaybackState = SoundPlayer::StoppedState;
|
||||
|
||||
mInternalPlayer->close();
|
||||
|
||||
emit stopped();
|
||||
emit playbackStateChanged(mPlaybackState);
|
||||
stop(false);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
|
@ -143,6 +133,40 @@ int SoundPlayer::getPosition () const {
|
|||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SoundPlayer::buildInternalPlayer () {
|
||||
CoreManager *coreManager = CoreManager::getInstance();
|
||||
SettingsModel *settingsModel = coreManager->getSettingsModel();
|
||||
|
||||
mInternalPlayer = coreManager->getCore()->createLocalPlayer(
|
||||
::Utils::appStringToCoreString(settingsModel->getRingerDevice()), "", nullptr
|
||||
);
|
||||
mInternalPlayer->setListener(mHandlers);
|
||||
|
||||
QObject::connect(settingsModel, &SettingsModel::ringerDeviceChanged, this, [this] {
|
||||
rebuildInternalPlayer();
|
||||
});
|
||||
}
|
||||
|
||||
void SoundPlayer::rebuildInternalPlayer () {
|
||||
stop(true);
|
||||
buildInternalPlayer();
|
||||
}
|
||||
|
||||
void SoundPlayer::stop (bool force) {
|
||||
if (mPlaybackState == SoundPlayer::StoppedState && !force)
|
||||
return;
|
||||
|
||||
mForceCloseTimer->stop();
|
||||
mPlaybackState = SoundPlayer::StoppedState;
|
||||
|
||||
mInternalPlayer->close();
|
||||
|
||||
emit stopped();
|
||||
emit playbackStateChanged(mPlaybackState);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
void SoundPlayer::handleEof () {
|
||||
mForceCloseMutex.lock();
|
||||
|
||||
|
|
|
|||
|
|
@ -76,6 +76,11 @@ signals:
|
|||
void playbackStateChanged (PlaybackState playbackState);
|
||||
|
||||
private:
|
||||
void buildInternalPlayer ();
|
||||
void rebuildInternalPlayer ();
|
||||
|
||||
void stop (bool force);
|
||||
|
||||
void handleEof ();
|
||||
|
||||
void setError (const QString &message);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue