fix(SoundPlayer): handle ringer device change

This commit is contained in:
Wescoeur 2017-06-16 00:10:17 +02:00
parent d4e1adca83
commit ab4efe774d
2 changed files with 41 additions and 12 deletions

View file

@ -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();

View file

@ -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);