@@ -59,11 +59,14 @@ MediaPlayer::MediaPlayer(QObject* parent)
5959 m_timer.setInterval(100);
6060 connect(&m_timer, SIGNAL(timeout()), SLOT(timerEvent()));
6161
62− connect(MediaPlayerDataController::instance(), &MediaPlayerDataController::sourceRemoved,
63− this, [this](const QUrl&) {
64− disconnect(0, &MediaDataSource::durationChanged, this, &MediaPlayer::durationChanged);
65− disconnect(0, &MediaDataSource::seekableChanged, this, &MediaPlayer::seekableChanged);
66− disconnect(0, &MediaDataSource::availabilityChanged, this, &MediaPlayer::availabilityChanged);
62+ connect(MediaPlayerDataController::instance(), &MediaPlayerDataController::sourceAboutToBeRemoved,
63+ this, [this](const QUrl& source) {
64+ MediaDataSource* dataSource = MediaPlayerDataController::instance()->dataForSource(source);
65+ if (!dataSource) return;
66+
67+ disconnect(dataSource, &MediaDataSource::durationChanged, this, &MediaPlayer::durationChanged);
68+ disconnect(dataSource, &MediaDataSource::seekableChanged, this, &MediaPlayer::seekableChanged);
69+ disconnect(dataSource, &MediaDataSource::availabilityChanged, this, &MediaPlayer::availabilityChanged);
6770 });
6871
6972 connect(MediaPlayerDataController::instance(), &MediaPlayerDataController::sourceAdded,
@@ -271,8 +274,8 @@ void MediaPlayerDataController::unregisterDataSource(MediaDataSource *dataSource
271274{
272275 QList<QUrl> keys = m_dataSources.keys(dataSource);
273276 Q_FOREACH(const QUrl& key, keys) {
277+ Q_EMIT sourceAboutToBeRemoved(key);
274278 m_dataSources.remove(key);
275− Q_EMIT sourceRemoved(key);
276279 }
277280}
278281