Warning, /maui/vvave/src/widgets/PlaylistsView/PlaylistsView.qml is written in an unsupported language. File is not indexed.

0001 import QtQuick 2.14
0002 import QtQuick.Controls 2.14
0003 
0004 import org.mauikit.controls 1.3 as Maui
0005 import org.mauikit.filebrowsing 1.3 as FB
0006 
0007 import org.maui.vvave 1.0 as Vvave
0008 
0009 import "../BabeTable"
0010 
0011 import "../../db/Queries.js" as Q
0012 import "../../utils/Player.js" as Player
0013 
0014 StackView
0015 {
0016     id: control
0017 
0018     property string playlistQuery
0019 
0020     readonly property Flickable flickable : currentItem.flickable
0021     readonly property alias playlistList :_playlistPage.list
0022 
0023     Component
0024     {
0025         id: newPlaylistDialogComponent
0026         FB.NewTagDialog {}
0027     }
0028 
0029     initialItem: PlaylistsViewModel
0030     {
0031         id: _playlistPage
0032     }
0033 
0034     Component
0035     {
0036         id: _filterListComponent
0037 
0038         BabeTable
0039         {
0040             id: filterList
0041 
0042             property string currentPlaylist //id
0043 
0044             property bool isPublic: true
0045 
0046             signal removeFromPlaylist(string url)
0047 
0048             coverArtVisible: settings.showArtwork
0049 
0050             list.query: control.playlistQuery
0051             showTitle: false
0052             title: control.currentPlaylist
0053 
0054             holder.emoji: "qrc:/assets/dialog-information.svg"
0055             holder.isMask: true
0056             holder.title : title
0057             holder.body: i18n("Your playlist is empty. Start adding new music to it")
0058 
0059             headBar.visible: true
0060             headBar.farLeftContent: ToolButton
0061             {
0062                 icon.name: "go-previous"
0063                 onClicked: control.pop()
0064             }
0065 
0066             contextMenuItems: MenuItem
0067             {
0068                 text: i18n("Remove from playlist")
0069                 onTriggered:
0070                 {
0071                     control.playlistList.removeTrack(currentPlaylist, listModel.get(filterList.currentIndex).url)
0072                     listModel.list.remove(filterList.currentIndex)
0073                 }
0074             }
0075 
0076             onQueueTrack: (index) => Player.queueTracks([listModel.get(index)], index)
0077             onRowClicked: (index) => Player.quickPlay(filterList.listModel.get(index))
0078             onAppendTrack: (index) => Player.addTrack(filterList.listModel.get(index))
0079 
0080             onPlayAll:
0081             {
0082                 Player.playAllModel(listModel.list)
0083                 control.pop()
0084 
0085                 if(filterList.isPublic)
0086                 {
0087                     root.sync = true
0088                     root.syncPlaylist = currentPlaylist
0089                 }
0090             }
0091 
0092             onAppendAll: Player.appendAllModel(listModel.list)
0093             onShuffleAll: Player.shuffleAllModel(listModel.list)
0094 
0095             Component.onCompleted:
0096             {
0097                 isPublic = false
0098 
0099                 switch(currentPlaylist)
0100                 {
0101                 case "mostPlayed":
0102                     playlistQuery = Q.GET.mostPlayedTracks
0103                     filterList.listModel.sort = "title"
0104                     break;
0105 
0106                 case "randomTracks":
0107                     filterList.listModel.sort = "title"
0108                     playlistQuery = Q.GET.randomTracks_;
0109                     break;
0110 
0111                 case "recentTracks":
0112                     playlistQuery = Q.GET.recentTracks_;
0113                     filterList.listModel.sort = "title"
0114                     break;
0115 
0116                 case "neverPlayed":
0117                     playlistQuery = Q.GET.neverPlayedTracks_;
0118                     filterList.listModel.sort = "title"
0119                     break;
0120 
0121                 case "classicTracks":
0122                     playlistQuery = Q.GET.oldTracks;
0123                     filterList.listModel.sort = "title"
0124                     break;
0125 
0126                 default:
0127                     isPublic = true
0128                     playlistQuery = Q.GET.playlistTracks_.arg(currentPlaylist)
0129                     break;
0130                 }
0131 
0132                 filterList.isPublic = isPublic
0133                 filterList.listModel.clearFilters()
0134             }
0135         }
0136     }
0137 
0138     function populate(playlist, isPublic)
0139     {
0140         control.push(_filterListComponent, {'currentPlaylist': playlist, 'isPublic': isPublic})
0141     }
0142 
0143     function getFilterField() : Item
0144     {
0145         return control.currentItem.getFilterField()
0146     }
0147 
0148     function getGoBackFunc() : Function
0149     {
0150         if (control.depth > 1)
0151             return () => { control.pop() }
0152         else
0153             return null
0154     }
0155 }