@@ -59,11 +59,14 @@ MediaPlayer::MediaPlayer(QObject* parent)
59 m_timer.setInterval(100);
59 m_timer.setInterval(100);
60 connect(&m_timer, SIGNAL(timeout()), SLOT(timerEvent()));
60 connect(&m_timer, SIGNAL(timeout()), SLOT(timerEvent()));
62− connect(MediaPlayerDataController::instance(), &MediaPlayerDataController::sourceRemoved,
62+ connect(MediaPlayerDataController::instance(), &MediaPlayerDataController::sourceAboutToBeRemoved,
63− this, [this](const QUrl&) {
63+ this, [this](const QUrl& source) {
64+ MediaDataSource* dataSource = MediaPlayerDataController::instance()->dataForSource(source);
65+ if (!dataSource) return;
64− disconnect(0, &MediaDataSource::durationChanged, this, &MediaPlayer::durationChanged);
67+ disconnect(dataSource, &MediaDataSource::durationChanged, this, &MediaPlayer::durationChanged);
65− disconnect(0, &MediaDataSource::seekableChanged, this, &MediaPlayer::seekableChanged);
68+ disconnect(dataSource, &MediaDataSource::seekableChanged, this, &MediaPlayer::seekableChanged);
66− disconnect(0, &MediaDataSource::availabilityChanged, this, &MediaPlayer::availabilityChanged);
69+ disconnect(dataSource, &MediaDataSource::availabilityChanged, this, &MediaPlayer::availabilityChanged);
69 connect(MediaPlayerDataController::instance(), &MediaPlayerDataController::sourceAdded,
72 connect(MediaPlayerDataController::instance(), &MediaPlayerDataController::sourceAdded,
@@ -271,8 +274,8 @@ void MediaPlayerDataController::unregisterDataSource(MediaDataSource *dataSource
272 QList<QUrl> keys = m_dataSources.keys(dataSource);
275 QList<QUrl> keys = m_dataSources.keys(dataSource);
273 Q_FOREACH(const QUrl& key, keys) {
276 Q_FOREACH(const QUrl& key, keys) {
277+ Q_EMIT sourceAboutToBeRemoved(key);
274 m_dataSources.remove(key);
278 m_dataSources.remove(key);
275− Q_EMIT sourceRemoved(key);