diff --git a/autotests/mediaplaylisttest.h b/autotests/mediaplaylisttest.h --- a/autotests/mediaplaylisttest.h +++ b/autotests/mediaplaylisttest.h @@ -67,7 +67,7 @@ void testHasHeaderYetAnotherMoveLikeQml(); - void enqueueClearAndEnqueue(); + void enqueueReplaceAndPlay(); void crashOnEnqueue(); @@ -77,11 +77,11 @@ void testSavePersistentState(); - void testClearAndEnqueueArtist(); + void testReplaceAndPlayArtist(); - void testClearAndEnqueueTrackId(); + void testReplaceAndPlayTrackId(); - void testClearAndEnqueueTrackData(); + void testReplaceAndPlayTrackData(); void testSetData(); diff --git a/autotests/mediaplaylisttest.cpp b/autotests/mediaplaylisttest.cpp --- a/autotests/mediaplaylisttest.cpp +++ b/autotests/mediaplaylisttest.cpp @@ -2658,7 +2658,7 @@ QCOMPARE(myPlayList.data(myPlayList.index(3, 0), MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); } -void MediaPlayListTest::enqueueClearAndEnqueue() +void MediaPlayListTest::enqueueReplaceAndPlay() { MediaPlayList myPlayList; ModelTest testModel(&myPlayList); @@ -2812,7 +2812,7 @@ QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::TrackNumberRole).toInt(), 1); QCOMPARE(myPlayList.data(myPlayList.index(1, 0), MediaPlayList::DiscNumberRole).toInt(), 1); - myPlayList.clearAndEnqueue(myDatabaseContent.albumFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"))); + myPlayList.replaceAndPlay(myDatabaseContent.albumFromTitleAndArtist(QStringLiteral("album1"), QStringLiteral("Various Artists"))); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -3888,7 +3888,7 @@ QCOMPARE(myPlayListRead.data(myPlayListRead.index(2, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumHeader).toBool(), true); } -void MediaPlayListTest::testClearAndEnqueueArtist() +void MediaPlayListTest::testReplaceAndPlayArtist() { MediaPlayList myPlayList; ModelTest testModel(&myPlayList); @@ -3962,7 +3962,7 @@ QCOMPARE(newTrackByFileNameInListSpy.count(), 0); QCOMPARE(newArtistInListSpy.count(), 0); - myPlayList.clearAndEnqueue(QStringLiteral("artist3")); + myPlayList.replaceAndPlay(QStringLiteral("artist3")); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -4010,7 +4010,7 @@ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::HasAlbumHeader).toBool(), true); QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumHeader).toBool(), false); - myPlayList.clearAndEnqueue(QStringLiteral("artist4")); + myPlayList.replaceAndPlay(QStringLiteral("artist4")); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -4059,7 +4059,7 @@ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumHeader).toBool(), false); } -void MediaPlayListTest::testClearAndEnqueueTrackId() +void MediaPlayListTest::testReplaceAndPlayTrackId() { MediaPlayList myPlayList; ModelTest testModel(&myPlayList); @@ -4138,7 +4138,7 @@ QCOMPARE(firstTrackId != 0, true); - myPlayList.clearAndEnqueue(firstTrackId); + myPlayList.replaceAndPlay(firstTrackId); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -4191,7 +4191,7 @@ QCOMPARE(secondTrackId != 0, true); - myPlayList.clearAndEnqueue(secondTrackId); + myPlayList.replaceAndPlay(secondTrackId); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -4240,7 +4240,7 @@ QCOMPARE(myPlayList.data(myPlayList.index(0, 0), MediaPlayList::ColumnsRoles::IsSingleDiscAlbumHeader).toBool(), false); } -void MediaPlayListTest::testClearAndEnqueueTrackData() +void MediaPlayListTest::testReplaceAndPlayTrackData() { MediaPlayList myPlayList; ModelTest testModel(&myPlayList); @@ -4323,7 +4323,7 @@ QCOMPARE(firstTrack.isValid(), true); - myPlayList.clearAndEnqueue(firstTrack); + myPlayList.replaceAndPlay(firstTrack); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -4364,7 +4364,7 @@ QCOMPARE(secondTrack.isValid(), true); - myPlayList.clearAndEnqueue(secondTrack); + myPlayList.replaceAndPlay(secondTrack); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -4734,7 +4734,7 @@ QCOMPARE(newTrackByFileNameInListSpy.count(), 0); QCOMPARE(newArtistInListSpy.count(), 0); - myPlayList.clearAndEnqueue(QStringLiteral("artist1")); + myPlayList.replaceAndPlay(QStringLiteral("artist1")); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); @@ -4926,7 +4926,7 @@ QCOMPARE(newTrackByFileNameInListSpy.count(), 0); QCOMPARE(newArtistInListSpy.count(), 0); - myPlayList.clearAndEnqueue(QStringLiteral("artist1")); + myPlayList.replaceAndPlay(QStringLiteral("artist1")); QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(rowsAboutToBeMovedSpy.count(), 0); diff --git a/autotests/trackslistenertest.cpp b/autotests/trackslistenertest.cpp --- a/autotests/trackslistenertest.cpp +++ b/autotests/trackslistenertest.cpp @@ -170,7 +170,7 @@ QCOMPARE(trackHasBeenRemovedSpy.count(), 0); QCOMPARE(albumAddedSpy.count(), 0); - myPlayList.clearAndEnqueue(QStringLiteral("artist1")); + myPlayList.replaceAndPlay(QStringLiteral("artist1")); QCOMPARE(trackHasChangedSpy.count(), 0); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); @@ -298,7 +298,7 @@ QCOMPARE(trackId != 0, true); - myPlayList.clearAndEnqueue(trackId); + myPlayList.replaceAndPlay(trackId); QCOMPARE(trackHasChangedSpy.count(), 1); QCOMPARE(trackHasBeenRemovedSpy.count(), 0); diff --git a/src/main.cpp b/src/main.cpp --- a/src/main.cpp +++ b/src/main.cpp @@ -237,16 +237,24 @@ MusicListenersManager myMusicManager; myMusicManager.setElisaApplication(&myApp); + MediaPlayList mediaPlayList; + mediaPlayList.setMusicListenersManager(&myMusicManager); + QObject::connect(&myApp, &ElisaApplication::enqueue, &mediaPlayList, &MediaPlayList::enqueueAndPlay); AllAlbumsProxyModel allAlbumsProxyModel; allAlbumsProxyModel.setSourceModel(myMusicManager.allAlbumsModel()); + allAlbumsProxyModel.setMediaPlayList(&mediaPlayList); AllArtistsProxyModel allArtistsProxyModel; allArtistsProxyModel.setSourceModel(myMusicManager.allArtistsModel()); + allArtistsProxyModel.setMediaPlayList(&mediaPlayList); AllTracksProxyModel allTracksProxyModel; allTracksProxyModel.setSourceModel(myMusicManager.allTracksModel()); + allTracksProxyModel.setMediaPlayList(&mediaPlayList); SingleArtistProxyModel singleArtistProxyModel; singleArtistProxyModel.setSourceModel(myMusicManager.allAlbumsModel()); + singleArtistProxyModel.setMediaPlayList(&mediaPlayList); SingleAlbumProxyModel singleAlbumProxyModel; singleAlbumProxyModel.setSourceModel(myMusicManager.albumModel()); + singleAlbumProxyModel.setMediaPlayList(&mediaPlayList); QQmlApplicationEngine engine; engine.addImportPath(QStringLiteral("qrc:/imports")); @@ -261,6 +269,7 @@ engine.rootContext()->setContextObject(new KLocalizedContext(&engine)); engine.rootContext()->setContextProperty(QStringLiteral("elisa"), &myApp); engine.rootContext()->setContextProperty(QStringLiteral("allListeners"), &myMusicManager); + engine.rootContext()->setContextProperty(QStringLiteral("mediaPlayList"), &mediaPlayList); engine.rootContext()->setContextProperty(QStringLiteral("allAlbumsProxyModel"), &allAlbumsProxyModel); engine.rootContext()->setContextProperty(QStringLiteral("allArtistsProxyModel"), &allArtistsProxyModel); engine.rootContext()->setContextProperty(QStringLiteral("allTracksProxyModel"), &allTracksProxyModel); diff --git a/src/mediaplaylist.h b/src/mediaplaylist.h --- a/src/mediaplaylist.h +++ b/src/mediaplaylist.h @@ -182,6 +182,8 @@ void playListLoadFailed(); + void ensurePlay(); + public Q_SLOTS: void setPersistentState(const QVariantMap &persistentState); @@ -226,17 +228,19 @@ void enqueue(const QStringList &files); - void clearAndEnqueue(qulonglong newTrackId); + void enqueueAndPlay(const QStringList &files); + + void replaceAndPlay(qulonglong newTrackId); - void clearAndEnqueue(const MusicAudioTrack &newTrack); + void replaceAndPlay(const MusicAudioTrack &newTrack); - void clearAndEnqueue(const MusicAlbum &album); + void replaceAndPlay(const MusicAlbum &album); - void clearAndEnqueue(const MusicArtist &artist); + void replaceAndPlay(const MusicArtist &artist); - void clearAndEnqueue(const QString &artistName); + void replaceAndPlay(const QString &artistName); - void clearAndEnqueue(const QUrl &fileName); + void replaceAndPlay(const QUrl &fileName); void trackInError(QUrl sourceInError, QMediaPlayer::Error playerError); diff --git a/src/mediaplaylist.cpp b/src/mediaplaylist.cpp --- a/src/mediaplaylist.cpp +++ b/src/mediaplaylist.cpp @@ -59,6 +59,7 @@ { connect(&d->mLoadPlaylist, &QMediaPlaylist::loaded, this, &MediaPlayList::loadPlayListLoaded); connect(&d->mLoadPlaylist, &QMediaPlaylist::loadFailed, this, &MediaPlayList::loadPlayListLoadFailed); + seedRandomGenerator(QTime::currentTime().msec()); } MediaPlayList::~MediaPlayList() @@ -617,39 +618,56 @@ } } -void MediaPlayList::clearAndEnqueue(qulonglong newTrackId) +void MediaPlayList::enqueueAndPlay(const QStringList &files) +{ + if (files.size() > 0) { + int previousTrackNumber = tracksCount(); + enqueue(files); + switchTo(previousTrackNumber); + Q_EMIT ensurePlay(); + } +} + +void MediaPlayList::replaceAndPlay(qulonglong newTrackId) { clearPlayList(); enqueue(MediaPlayListEntry(newTrackId)); + Q_EMIT ensurePlay(); } -void MediaPlayList::clearAndEnqueue(const MusicAudioTrack &newTrack) +void MediaPlayList::replaceAndPlay(const MusicAudioTrack &newTrack) { clearPlayList(); enqueue(newTrack); + Q_EMIT ensurePlay(); } -void MediaPlayList::clearAndEnqueue(const MusicAlbum &album) +void MediaPlayList::replaceAndPlay(const MusicAlbum &album) { clearPlayList(); enqueue(album); + Q_EMIT ensurePlay(); } -void MediaPlayList::clearAndEnqueue(const MusicArtist &artist) +void MediaPlayList::replaceAndPlay(const MusicArtist &artist) { - clearAndEnqueue(artist.name()); + clearPlayList(); + enqueue(artist.name()); + Q_EMIT ensurePlay(); } -void MediaPlayList::clearAndEnqueue(const QString &artistName) +void MediaPlayList::replaceAndPlay(const QString &artistName) { clearPlayList(); enqueue(artistName); + Q_EMIT ensurePlay(); } -void MediaPlayList::clearAndEnqueue(const QUrl &fileName) +void MediaPlayList::replaceAndPlay(const QUrl &fileName) { clearPlayList(); enqueue(fileName); + Q_EMIT ensurePlay(); } void MediaPlayList::clearPlayList() diff --git a/src/models/abstractmediaproxymodel.h b/src/models/abstractmediaproxymodel.h --- a/src/models/abstractmediaproxymodel.h +++ b/src/models/abstractmediaproxymodel.h @@ -25,7 +25,6 @@ #include #include "mediaplaylist.h" -#include "manageaudioplayer.h" class MediaPlayList; @@ -44,10 +43,11 @@ WRITE setFilterRating NOTIFY filterRatingChanged) - Q_PROPERTY(ManageAudioPlayer* audioControl - READ audioControl - WRITE setAudioControl - NOTIFY audioControlChanged) + Q_PROPERTY(MediaPlayList* mediaPlayList + READ mediaPlayList + WRITE setMediaPlayList + NOTIFY mediaPlayListChanged) + public: @@ -61,28 +61,24 @@ MediaPlayList *mediaPlayList() const; - ManageAudioPlayer *audioControl() const; - public Q_SLOTS: void setMediaPlayList(MediaPlayList *playList); - void setAudioControl(ManageAudioPlayer *audioControl); - void setFilterText(const QString &filterText); void setFilterRating(int filterRating); virtual void enqueueToPlayList() = 0; + void replaceAndPlayOfPlayList(); + Q_SIGNALS: void filterTextChanged(const QString &filterText); void filterRatingChanged(int filterRating); - void audioControlChanged(ManageAudioPlayer *audioControl); - void mediaPlayListChanged(MediaPlayList *mediaPlayList); protected: @@ -97,8 +93,6 @@ MediaPlayList* mMediaPlayList; - ManageAudioPlayer* mAudioControl; - }; #endif // ABSTRACTMEDIAPROXYMODEL_H diff --git a/src/models/abstractmediaproxymodel.cpp b/src/models/abstractmediaproxymodel.cpp --- a/src/models/abstractmediaproxymodel.cpp +++ b/src/models/abstractmediaproxymodel.cpp @@ -67,27 +67,22 @@ Q_EMIT filterRatingChanged(filterRating); } - MediaPlayList *AbstractMediaProxyModel::mediaPlayList() const { return mMediaPlayList; } -ManageAudioPlayer *AbstractMediaProxyModel::audioControl() const -{ - return mAudioControl; -} - void AbstractMediaProxyModel::setMediaPlayList(MediaPlayList *playList) { mMediaPlayList = playList; Q_EMIT mediaPlayListChanged(mMediaPlayList); } -void AbstractMediaProxyModel::setAudioControl(ManageAudioPlayer *audioControl) +void AbstractMediaProxyModel::replaceAndPlayOfPlayList() { - mAudioControl = audioControl; - Q_EMIT audioControlChanged(mAudioControl); + this->mediaPlayList()->clearPlayList(); + this->enqueueToPlayList(); + Q_EMIT this->mediaPlayList()->ensurePlay(); } #include "moc_abstractmediaproxymodel.cpp" diff --git a/src/qml/ElisaMainWindow.qml b/src/qml/ElisaMainWindow.qml --- a/src/qml/ElisaMainWindow.qml +++ b/src/qml/ElisaMainWindow.qml @@ -93,10 +93,6 @@ property bool playControlItemMuted : false } - property string globalBrowseFlag: 'BrowseDirectChildren' - property string globalFilter: '*' - property string globalSortCriteria: '' - Connections { target: Qt.application onAboutToQuit: @@ -106,8 +102,8 @@ persistentSettings.width = mainWindow.width; persistentSettings.height = mainWindow.height; - persistentSettings.playListState = playListModelItem.persistentState; - persistentSettings.playListControlerState = playListModelItem.persistentState; + persistentSettings.playListState = mediaPlayList.persistentState; + persistentSettings.playListControlerState = mediaPlayList.persistentState; persistentSettings.audioPlayerState = manageAudioPlayer.persistentState persistentSettings.playControlItemVolume = headerBar.playerControl.volume @@ -118,8 +114,8 @@ PlatformIntegration { id: platformInterface - playListModel: playListModelItem - playListControler: playListModelItem + playListModel: mediaPlayList + playListControler: mediaPlayList audioPlayerManager: manageAudioPlayer headerBarManager: myHeaderBarManager manageMediaPlayerControl: myPlayControlManager @@ -158,58 +154,25 @@ } } - MediaPlayList { - id: playListModelItem - - persistentState: persistentSettings.playListState - musicListenersManager: allListeners - - onPlayListFinished: manageAudioPlayer.playListFinished() - - Component.onCompleted: - { - var d = new Date(); - var n = d.getMilliseconds(); - seedRandomGenerator(n); - - playFiles(elisa.arguments) - allAlbumsProxyModel.setMediaPlayList(playListModelItem) - allArtistsProxyModel.setMediaPlayList(playListModelItem) - allTracksProxyModel.setMediaPlayList(playListModelItem) - singleAlbumProxyModel.setMediaPlayList(playListModelItem) - singleArtistProxyModel.setMediaPlayList(playListModelItem) - } - - onPlayListLoadFailed: - { + Connections { + target: mediaPlayList + onPlayListLoadFailed: { messageNotification.showNotification(i18nc("message of passive notification when playlist load failed", "Load of playlist failed"), 3000) } - - function playFiles(listFiles) - { - if (listFiles.length > 0) { - var previousTrackNumber = tracksCount - enqueue(listFiles) - switchTo(previousTrackNumber) - manageAudioPlayer.ensurePlay() - } - } + onEnsurePlay: manageAudioPlayer.ensurePlay() + onPlayListFinished: manageAudioPlayer.playListFinished() } - Connections { - target: elisa - - onEnqueue: - { - playListModelItem.playFiles(files) - } + Component.onCompleted: { + mediaPlayList.persistentState = persistentSettings.playListState + mediaPlayList.enqueueAndPlay(elisa.arguments) } ManageHeaderBar { id: myHeaderBarManager - playListModel: playListModelItem - currentTrack: playListModelItem.currentTrack + playListModel: mediaPlayList + currentTrack: mediaPlayList.currentTrack artistRole: MediaPlayList.ArtistRole titleRole: MediaPlayList.TitleRole @@ -221,8 +184,8 @@ ManageAudioPlayer { id: manageAudioPlayer - currentTrack: playListModelItem.currentTrack - playListModel: playListModelItem + currentTrack: mediaPlayList.currentTrack + playListModel: mediaPlayList urlRole: MediaPlayList.ResourceRole isPlayingRole: MediaPlayList.IsPlayingRole titleRole: MediaPlayList.TitleRole @@ -241,30 +204,22 @@ onPlayerPlay: audioPlayer.play() onPlayerPause: audioPlayer.pause() onPlayerStop: audioPlayer.stop() - onSkipNextTrack: playListModelItem.skipNextTrack() + onSkipNextTrack: mediaPlayList.skipNextTrack() onSeek: audioPlayer.seek(position) onSourceInError: { - playListModelItem.trackInError(source, playerError) + mediaPlayList.trackInError(source, playerError) allListeners.playBackError(source, playerError) } onDisplayTrackError: messageNotification.showNotification(i18n("Error when playing %1", "" + fileName), 3000) - - Component.onCompleted: { - allAlbumsProxyModel.setAudioControl(manageAudioPlayer) - allArtistsProxyModel.setAudioControl(manageAudioPlayer) - allTracksProxyModel.setAudioControl(manageAudioPlayer) - singleAlbumProxyModel.setAudioControl(manageAudioPlayer) - singleArtistProxyModel.setAudioControl(manageAudioPlayer) - } } ManageMediaPlayerControl { id: myPlayControlManager - playListModel: playListModelItem - currentTrack: playListModelItem.currentTrack + playListModel: mediaPlayList + currentTrack: mediaPlayList.currentTrack } PassiveNotification { @@ -316,8 +271,8 @@ playerControl.onPlay: manageAudioPlayer.playPause() playerControl.onPause: manageAudioPlayer.playPause() - playerControl.onPlayPrevious: playListModelItem.skipPreviousTrack() - playerControl.onPlayNext: playListModelItem.skipNextTrack() + playerControl.onPlayPrevious: mediaPlayList.skipPreviousTrack() + playerControl.onPlayNext: mediaPlayList.skipNextTrack() ToolButton { id: menuButton @@ -459,21 +414,13 @@ firstPage: GridBrowserView { id: allAlbumsView - tempMediaPlayList: playListModelItem - tempMediaControl: manageAudioPlayer - focus: true - model: allAlbumsProxyModel + contentModel: allAlbumsProxyModel image: elisaTheme.albumIcon mainTitle: i18nc("Title of the view of all albums", "Albums") - onEnqueue: playListModelItem.enqueue(data) - onReplaceAndPlay: { - playListModelItem.clearAndEnqueue(data) - manageAudioPlayer.ensurePlay() - } onOpen: { singleAlbumProxyModel.sourceModel.loadAlbumData(databaseId) localAlbums.stackView.push(albumView, { @@ -504,22 +451,15 @@ firstPage: GridBrowserView { id: allArtistsView focus: true - tempMediaPlayList: playListModelItem - tempMediaControl: manageAudioPlayer showRating: false delegateDisplaySecondaryText: false - model: allArtistsProxyModel + contentModel: allArtistsProxyModel image: elisaTheme.artistIcon mainTitle: i18nc("Title of the view of all artists", "Artists") - onEnqueue: playListModelItem.enqueue(data) - onReplaceAndPlay: { - playListModelItem.clearAndEnqueue(data) - manageAudioPlayer.ensurePlay() - } onOpen: { singleArtistProxyModel.setArtistFilterText(innerMainTitle) localArtists.stackView.push(innerAlbumView, { @@ -550,17 +490,9 @@ firstPage: MediaAllTracksView { focus: true - tempMediaPlayList: playListModelItem - tempMediaControl: manageAudioPlayer stackView: localTracks.stackView - model: allTracksProxyModel - - onEnqueue: playListModelItem.enqueue(data) - onReplaceAndPlay: { - playListModelItem.clearAndEnqueue(data) - manageAudioPlayer.ensurePlay() - } + contentModel: allTracksProxyModel } visible: opacity > 0 @@ -597,11 +529,10 @@ MediaPlayListView { id: playList - playListModel: playListModelItem - playListControler: playListModelItem + playListModel: mediaPlayList - randomPlayChecked: playListModelItem.randomPlay - repeatPlayChecked: playListModelItem.repeatPlay + randomPlayChecked: mediaPlayList.randomPlay + repeatPlayChecked: mediaPlayList.repeatPlay Layout.fillHeight: true Layout.leftMargin: elisaTheme.layoutHorizontalMargin @@ -613,8 +544,8 @@ Component.onCompleted: { - playListModelItem.randomPlay = Qt.binding(function() { return playList.randomPlayChecked }) - playListModelItem.repeatPlay = Qt.binding(function() { return playList.repeatPlayChecked }) + mediaPlayList.randomPlay = Qt.binding(function() { return playList.randomPlayChecked }) + mediaPlayList.repeatPlay = Qt.binding(function() { return playList.repeatPlayChecked }) myPlayControlManager.randomOrContinuePlay = Qt.binding(function() { return playList.randomPlayChecked || playList.repeatPlayChecked }) } @@ -880,17 +811,10 @@ GridBrowserView { property var stackView - tempMediaPlayList: playListModelItem - tempMediaControl: manageAudioPlayer - model: singleArtistProxyModel + contentModel: singleArtistProxyModel isSubPage: true - onEnqueue: playListModelItem.enqueue(data) - onReplaceAndPlay: { - playListModelItem.clearAndEnqueue(data) - manageAudioPlayer.ensurePlay() - } onOpen: { singleAlbumProxyModel.sourceModel.loadAlbumData(databaseId) @@ -910,17 +834,8 @@ MediaAlbumView { property var stackView - tempMediaPlayList: playListModelItem - tempMediaControl: manageAudioPlayer - model: singleAlbumProxyModel - - onEnqueue: playListModelItem.enqueue(data) - - onReplaceAndPlay: { - playListModelItem.clearAndEnqueue(data) - manageAudioPlayer.ensurePlay() - } + contentModel: singleAlbumProxyModel onShowArtist: { listViews.currentIndex = 2 diff --git a/src/qml/GridBrowserView.qml b/src/qml/GridBrowserView.qml --- a/src/qml/GridBrowserView.qml +++ b/src/qml/GridBrowserView.qml @@ -34,15 +34,10 @@ property string mainTitle property string secondaryTitle property url image - property alias model: contentDirectoryView.model + property alias contentModel: contentDirectoryView.model property bool showRating: true property bool delegateDisplaySecondaryText: true - property var tempMediaPlayList - property var tempMediaControl - - signal enqueue(var data) - signal replaceAndPlay(var data) signal open(var innerMainTitle, var innerSecondaryTitle, var innerImage, var databaseId) signal goBack() @@ -74,24 +69,20 @@ Layout.fillWidth: true Binding { - target: model + target: contentModel property: 'filterText' value: navigationBar.filterText } Binding { - target: model + target: contentModel property: 'filterRating' value: navigationBar.filterRating } - onEnqueue: model.enqueueToPlayList(tempMediaPlayList) + onEnqueue: contentModel.enqueueToPlayList() - onReplaceAndPlay: { - tempMediaPlayList.clearPlayList() - model.enqueueToPlayList(tempMediaPlayList) - tempMediaControl.ensurePlay() - } + onReplaceAndPlay:contentModel.replaceAndPlayOfPlayList() onGoBack: gridView.goBack() } @@ -134,8 +125,8 @@ containerData: model.containerData delegateDisplaySecondaryText: gridView.delegateDisplaySecondaryText - onEnqueue: gridView.enqueue(data) - onReplaceAndPlay: gridView.replaceAndPlay(data) + onEnqueue: contentModel.mediaPlayList.enqueue(data) + onReplaceAndPlay: contentModel.mediaPlayList.replaceAndPlay(data) onOpen: gridView.open(model.display, model.secondaryText, model.imageUrl, model.databaseId) onSelected: { forceActiveFocus() diff --git a/src/qml/MediaAlbumView.qml b/src/qml/MediaAlbumView.qml --- a/src/qml/MediaAlbumView.qml +++ b/src/qml/MediaAlbumView.qml @@ -32,19 +32,15 @@ property var artistName property var albumArtUrl property bool isSingleDiscAlbum - property alias model: contentDirectoryView.model - - property var tempMediaPlayList - property var tempMediaControl + property var albumId + property alias contentModel: contentDirectoryView.model signal showArtist(var name) - signal enqueue(var data) - signal replaceAndPlay(var data) signal goBack(); function loadAlbumData(id) { - contentDirectoryView.model.sourceModel.loadAlbumData(id) + contentModel.sourceModel.loadAlbumData(id) } SystemPalette { @@ -75,29 +71,25 @@ image: (topListing.albumArtUrl ? topListing.albumArtUrl : elisaTheme.defaultAlbumImage) allowArtistNavigation: true - onEnqueue: model.enqueueToPlayList(tempMediaPlayList) - - onReplaceAndPlay: { - tempMediaPlayList.clearPlayList() - model.enqueueToPlayList(tempMediaPlayList) - tempMediaControl.ensurePlay() - } - Binding { - target: contentDirectoryView.model + target: contentModel property: 'filterText' value: navigationBar.filterText } Binding { - target: contentDirectoryView.model + target: contentModel property: 'filterRating' value: navigationBar.filterRating } onGoBack: topListing.goBack() onShowArtist: topListing.showArtist(topListing.model.sourceModel.author) + + onEnqueue: contentModel.enqueueToPlayList() + + onReplaceAndPlay: contentModel.replaceAndPlayOfPlayList() } ScrollView { @@ -167,9 +159,9 @@ else '' - mediaTrack.onEnqueue: topListing.enqueue(data) + mediaTrack.onEnqueue: contentModel.mediaPlayList.enqueue(data) - mediaTrack.onReplaceAndPlay: topListing.replaceAndPlay(data) + mediaTrack.onReplaceAndPlay: contentModel.mediaPlayList.replaceAndPlay(data) mediaTrack.onClicked: contentDirectoryView.currentIndex = index } diff --git a/src/qml/MediaAllTracksView.qml b/src/qml/MediaAllTracksView.qml --- a/src/qml/MediaAllTracksView.qml +++ b/src/qml/MediaAllTracksView.qml @@ -31,13 +31,7 @@ id: rootElement property var stackView - property alias model: contentDirectoryView.model - - property var tempMediaPlayList - property var tempMediaControl - - signal enqueue(var data) - signal replaceAndPlay(var data) + property alias contentModel: contentDirectoryView.model SystemPalette { id: myPalette @@ -67,24 +61,20 @@ Layout.fillWidth: true Binding { - target: model + target: contentModel property: 'filterText' value: navigationBar.filterText } Binding { - target: model + target: contentModel property: 'filterRating' value: navigationBar.filterRating } - onEnqueue: model.enqueueToPlayList(tempMediaPlayList) + onEnqueue: contentModel.enqueueToPlayList() - onReplaceAndPlay: { - tempMediaPlayList.clearPlayList() - model.enqueueToPlayList(tempMediaPlayList) - tempMediaControl.ensurePlay() - } + onReplaceAndPlay: contentModel.replaceAndPlayOfPlayList() } Rectangle { @@ -166,8 +156,8 @@ else true - onEnqueue: rootElement.enqueue(data) - onReplaceAndPlay: rootElement.replaceAndPlay(data) + onEnqueue: contentModel.mediaPlayList.enqueue(data) + onReplaceAndPlay: contentModel.mediaPlayList.replaceAndPlay(data) onClicked: contentDirectoryView.currentIndex = index } diff --git a/src/qml/MediaPlayListView.qml b/src/qml/MediaPlayListView.qml --- a/src/qml/MediaPlayListView.qml +++ b/src/qml/MediaPlayListView.qml @@ -29,7 +29,6 @@ FocusScope { property StackView parentStackView property MediaPlayList playListModel - property var playListControler property alias randomPlayChecked: shuffleOption.checked property alias repeatPlayChecked: repeatOption.checked @@ -56,8 +55,8 @@ iconName: 'media-show-active-track-amarok' enabled: playListModelDelegate.items.count > 0 onTriggered: { - playListView.positionViewAtIndex(playListControler.currentTrackRow, ListView.Contain) - playListView.currentIndex = playListControler.currentTrackRow + playListView.positionViewAtIndex(playListModel.currentTrackRow, ListView.Contain) + playListView.currentIndex = playListModel.currentTrackRow playListView.currentItem.forceActiveFocus() } } @@ -337,7 +336,7 @@ onRemoveFromPlaylist: topItem.playListModel.removeRows(trackIndex, 1) - onSwitchToTrack: topItem.playListControler.switchTo(trackIndex) + onSwitchToTrack: topItem.playListModel.switchTo(trackIndex) } draggedItemParent: topItem @@ -349,7 +348,7 @@ onDoubleClicked: { if (model.isValid) { - topItem.playListControler.switchTo(model.index) + topItem.playListModel.switchTo(model.index) topItem.startPlayback() } }