Warning, /multimedia/audiotube/src/contents/ui/AlbumPage.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 org.kde.kirigami 2.14 as Kirigami
0007 import QtQuick.Controls 2.14 as Controls
0008 import QtQuick.Layouts 1.3
0009 
0010 import org.kde.ytmusic 1.0
0011 
0012 import "components"
0013 
0014 Kirigami.ScrollablePage {
0015     id: root
0016     property string browseId
0017     title: albumModel.title
0018 
0019     DoubleActionButton {
0020         id: action
0021         visible: false
0022         property bool shown
0023         shown: !root.flickable.atYBeginning
0024         onShownChanged:
0025             if(shown){
0026                 visible = true
0027                 appear.running = true
0028             } else {
0029                 disappear.running = true
0030             }
0031 
0032         parent: overlay
0033         x: root.width - width - margin
0034         y: root.height - height - margin
0035         NumberAnimation on y {
0036             id: appear
0037             easing.type: Easing.InCubic
0038             running: false
0039             from: root.height
0040             to: root.height - action.height - action.margin
0041             duration: 100
0042         }
0043         NumberAnimation on y {
0044             id: disappear
0045             easing.type: Easing.OutCubic
0046             running: false
0047             from: root.height - action.height - action.margin
0048             to: root.height
0049             duration: 100
0050             onFinished: action.visible = false
0051         }
0052         rightAction: Kirigami.Action {
0053             icon.name: "media-playlist-shuffle"
0054             onTriggered: applicationWindow().playShufflePlaylist(albumModel.playlistId)
0055             text: "Shuffle"
0056         }
0057         leftAction: Kirigami.Action {
0058             icon.name: "media-playback-start"
0059             onTriggered: applicationWindow().playPlaylist(albumModel.playlistId)
0060             text: "Play"
0061         }
0062     }
0063 
0064     ListView {
0065         id: songList
0066         footer: Item { height: 60 }
0067         header: ListHeader {
0068             visibleActions: [
0069                 Kirigami.Action {
0070                     icon.name: "media-playback-start"
0071                     text: i18n("Play")
0072                     onTriggered: {
0073                         applicationWindow().playPlaylist(albumModel.playlistId)
0074                     }
0075                 },
0076                 Kirigami.Action {
0077                     icon.name: "media-playlist-shuffle"
0078                     text: i18n("Shuffle")
0079                     onTriggered: {
0080                         applicationWindow().playShufflePlaylist(albumModel.playlistId)
0081                     }
0082                 }
0083             ]
0084             overflowActions: [
0085                 Kirigami.Action {
0086                     text: i18n("Append to queue")
0087                     icon.name: "media-playlist-append"
0088                     onTriggered: UserPlaylistModel.appendAlbum(albumModel)
0089                 },
0090                 Kirigami.Action {
0091                     text: i18n("Open in Browser")
0092                     icon.name: "internet-services"
0093                     onTriggered: Qt.openUrlExternally(albumModel.webUrl)
0094                 },
0095                 Kirigami.Action {
0096                     text: i18n("Share")
0097                     icon.name: "emblem-shared-symbolic"
0098                     onTriggered:{
0099                         openShareMenu(albumModel.title, albumModel.webUrl)
0100                     }
0101                 }
0102 
0103             ]
0104             title: albumModel.title
0105             imageSourceURL: albumModel.thumbnailUrl
0106             subtitle: i18n("Album • %1" , albumModel.artists)
0107             width: songList.width
0108         }
0109 
0110 
0111         reuseItems: true
0112 
0113         model: AlbumModel {
0114             id: albumModel
0115 
0116             browseId: root.browseId
0117         }
0118         SongMenu {
0119             id: menu
0120         }
0121         delegate: Controls.ItemDelegate {
0122             id: delegateItem
0123 
0124             required property string title
0125             required property string videoId
0126             required property var artists
0127             required property string thumbnailUrl
0128             required property string artistsDisplayString
0129             required property int index
0130 
0131             width: parent.width
0132 
0133             contentItem: MouseArea {
0134                 implicitHeight: content.implicitHeight
0135                 acceptedButtons: Qt.LeftButton | Qt.RightButton
0136                 onClicked: if (mouse.button === Qt.RightButton) {
0137                                 menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString)
0138                            } else if (mouse.button === Qt.LeftButton) {
0139                                 play(delegateItem.videoId)
0140                            }
0141                 RowLayout {
0142                     id: content
0143                     anchors.fill: parent
0144                     Controls.Label {
0145                         text: (delegateItem.index + 1)
0146                         font.bold: true
0147                         leftPadding: 5
0148                         color: Kirigami.Theme.disabledTextColor
0149                         Layout.preferredWidth: 30
0150                     }
0151 
0152                     Controls.Label {
0153                         Layout.fillWidth: true
0154                         text: delegateItem.title
0155                         elide: Qt.ElideRight
0156                     }
0157 
0158                     Controls.ToolButton {
0159                         icon.name: "overflow-menu"
0160                         text: i18n("More")
0161                         display: Controls.AbstractButton.IconOnly
0162                         onClicked: menu.openForSong(delegateItem.videoId, delegateItem.title, delegateItem.artists, delegateItem.artistsDisplayString)
0163                     }
0164                 }
0165             }
0166         }
0167 
0168         Controls.BusyIndicator {
0169             anchors.centerIn: parent
0170             visible: albumModel.loading
0171         }
0172     }
0173 }