Warning, /multimedia/audiotube/src/contents/ui/PlaylistPage.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2021 Jonah BrĂ¼chert <jbb@kaidan.im> 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 import QtQuick 2.15 0006 import QtQuick.Layouts 1.12 0007 import QtQuick.Controls 2.12 as Controls 0008 import org.kde.kirigami 2.12 as Kirigami 0009 0010 import org.kde.ytmusic 1.0 0011 0012 import "components" 0013 0014 Kirigami.ScrollablePage { 0015 id: root 0016 0017 required property string playlistId 0018 0019 title: playlistModel.title 0020 0021 SongMenu { 0022 id: menu 0023 } 0024 DoubleActionButton { 0025 id: action 0026 visible: false 0027 property bool shown 0028 shown: !root.flickable.atYBeginning 0029 onShownChanged: 0030 if(shown){ 0031 visible = true 0032 appear.running = true 0033 } else { 0034 disappear.running = true 0035 } 0036 0037 parent: overlay 0038 x: root.width - width - margin 0039 y: root.height - height - margin 0040 NumberAnimation on y { 0041 id: appear 0042 easing.type: Easing.InCubic 0043 running: false 0044 from: root.height 0045 to: root.height - action.height - action.margin 0046 duration: 100 0047 } 0048 NumberAnimation on y { 0049 id: disappear 0050 easing.type: Easing.OutCubic 0051 running: false 0052 from: root.height - action.height - action.margin 0053 to: root.height 0054 duration: 100 0055 onFinished: action.visible = false 0056 } 0057 rightAction: Kirigami.Action { 0058 icon.name: "media-playlist-shuffle" 0059 text: i18n("Shuffle") 0060 onTriggered: { 0061 applicationWindow().playShufflePlaylist(playlistModel.playlistId) 0062 } 0063 } 0064 leftAction: Kirigami.Action { 0065 icon.name: "media-playback-start" 0066 text: i18n("Play") 0067 onTriggered: { 0068 applicationWindow().playPlaylist(playlistModel.playlistId) 0069 } 0070 } 0071 } 0072 0073 PlaylistImporter { 0074 id: localPlaylistsModel 0075 onImportFinished: { 0076 applicationWindow().showPassiveNotification(i18n("Playlist successfully imported")) 0077 } 0078 } 0079 0080 ListView { 0081 id: songList 0082 footer: Item { height: 60 } 0083 header: ListHeader { 0084 visibleActions: [ 0085 Kirigami.Action { 0086 icon.name: "media-playback-start" 0087 text: i18n("Play") 0088 onTriggered: { 0089 applicationWindow().playPlaylist(playlistModel.playlistId) 0090 } 0091 }, 0092 Kirigami.Action { 0093 icon.name: "media-playlist-shuffle" 0094 text: i18n("Shuffle") 0095 onTriggered: { 0096 applicationWindow().playShufflePlaylist(playlistModel.playlistId) 0097 } 0098 } 0099 ] 0100 overflowActions: [ 0101 Kirigami.Action { 0102 text: i18n("Append to queue") 0103 icon.name: "media-playlist-append" 0104 onTriggered: UserPlaylistModel.appendPlaylist(playlistModel) 0105 }, 0106 Kirigami.Action { 0107 text: i18n("Import Playlist") 0108 icon.name: "document-save" 0109 onTriggered: localPlaylistsModel.importPlaylist(playlistModel.webUrl) 0110 }, 0111 Kirigami.Action { 0112 text: i18n("Open in Browser") 0113 icon.name: "internet-services" 0114 onTriggered: Qt.openUrlExternally(playlistModel.webUrl) 0115 }, 0116 Kirigami.Action { 0117 text: i18n("Share") 0118 icon.name: "emblem-shared-symbolic" 0119 onTriggered:{ 0120 openShareMenu(playlistModel.title, playlistModel.webUrl) 0121 } 0122 } 0123 0124 ] 0125 title: playlistModel.title 0126 imageSourceURL: playlistModel.thumbnailUrl 0127 width: songList.width 0128 subtitle: i18n("Playlist") 0129 0130 } 0131 0132 model: PlaylistModel { 0133 id: playlistModel 0134 0135 playlistId: root.playlistId 0136 } 0137 0138 reuseItems: true 0139 0140 delegate: Controls.ItemDelegate { 0141 id: delegateItem 0142 0143 required property string title 0144 required property string videoId 0145 required property var artists 0146 required property string thumbnailUrl 0147 required property string artistsDisplayString 0148 required property int index 0149 0150 width: parent.width 0151 0152 contentItem: MouseArea { 0153 implicitHeight: content.implicitHeight 0154 acceptedButtons: Qt.LeftButton | Qt.RightButton 0155 onClicked: if (mouse.button === Qt.RightButton) { 0156 menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString) 0157 } else if (mouse.button === Qt.LeftButton) { 0158 play(videoId) 0159 } 0160 RowLayout { 0161 id: content 0162 anchors.fill: parent 0163 0164 RoundedImage { 0165 source: delegateItem.thumbnailUrl 0166 height: 35 0167 width: height 0168 radius: 5 0169 } 0170 0171 ColumnLayout { 0172 Controls.Label { 0173 Layout.fillWidth: true 0174 text: title 0175 elide: Qt.ElideRight 0176 } 0177 0178 Controls.Label { 0179 Layout.fillWidth: true 0180 visible: delegateItem.artistsDisplayString 0181 color: Kirigami.Theme.disabledTextColor 0182 text: delegateItem.artistsDisplayString 0183 elide: Qt.ElideRight 0184 } 0185 } 0186 0187 Controls.ToolButton { 0188 icon.name: "overflow-menu" 0189 text: i18n("More") 0190 display: Controls.AbstractButton.IconOnly 0191 onClicked: menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString) 0192 } 0193 } 0194 } 0195 } 0196 0197 Controls.BusyIndicator { 0198 anchors.centerIn: parent 0199 visible: playlistModel.loading 0200 } 0201 } 0202 }