Warning, /plasma/plasma-workspace/applets/mediacontroller/package/contents/ui/main.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2013 Sebastian Kügler <sebas@kde.org>
0003     SPDX-FileCopyrightText: 2014 Kai Uwe Broulik <kde@privat.broulik.de>
0004     SPDX-FileCopyrightText: 2020 Ismael Asensio <isma.af@gmail.com>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 import QtQuick
0010 import QtQuick.Layouts
0011 import org.kde.plasma.plasmoid 2.0
0012 import org.kde.plasma.core as PlasmaCore
0013 import org.kde.plasma.private.mediacontroller 1.0
0014 import org.kde.plasma.private.mpris as Mpris
0015 import org.kde.kirigami 2 as Kirigami
0016 
0017 PlasmoidItem {
0018     id: root
0019 
0020     switchWidth: Kirigami.Units.gridUnit * 14
0021     switchHeight: Kirigami.Units.gridUnit * 10
0022 
0023     readonly property int volumePercentStep: config.volumeStep
0024 
0025     // BEGIN model properties
0026     readonly property string track: mpris2Model.currentPlayer?.track ?? ""
0027     readonly property string artist: mpris2Model.currentPlayer?.artist ?? ""
0028     readonly property string album: mpris2Model.currentPlayer?.album ?? ""
0029     readonly property string albumArt: mpris2Model.currentPlayer?.artUrl ?? ""
0030     readonly property string identity: mpris2Model.currentPlayer?.identity ?? ""
0031     readonly property bool canControl: mpris2Model.currentPlayer?.canControl ?? false
0032     readonly property bool canGoPrevious: mpris2Model.currentPlayer?.canGoPrevious ?? false
0033     readonly property bool canGoNext: mpris2Model.currentPlayer?.canGoNext ?? false
0034     readonly property bool canPlay: mpris2Model.currentPlayer?.canPlay ?? false
0035     readonly property bool canPause: mpris2Model.currentPlayer?.canPause ?? false
0036     readonly property bool canStop: mpris2Model.currentPlayer?.canStop ?? false
0037     readonly property int playbackStatus: mpris2Model.currentPlayer?.playbackStatus ?? 0
0038     readonly property bool isPlaying: root.playbackStatus === Mpris.PlaybackStatus.Playing
0039     readonly property bool canRaise: mpris2Model.currentPlayer?.canRaise ?? false
0040     readonly property bool canQuit: mpris2Model.currentPlayer?.canQuit ?? false
0041     readonly property int shuffle: mpris2Model.currentPlayer?.shuffle ?? 0
0042     readonly property int loopStatus: mpris2Model.currentPlayer?.loopStatus ?? 0
0043     // END model properties
0044 
0045     Plasmoid.icon: switch (root.playbackStatus) {
0046     case Mpris.PlaybackStatus.Playing:
0047         return "media-playback-playing-symbolic";
0048     case Mpris.PlaybackStatus.Paused:
0049         return "media-playback-paused-symbolic";
0050     default:
0051         return "media-playback-stopped-symbolic";
0052     }
0053     Plasmoid.status: PlasmaCore.Types.PassiveStatus
0054     toolTipMainText: root.playbackStatus > Mpris.PlaybackStatus.Stopped ? root.track : i18n("No media playing")
0055     toolTipSubText: switch (root.playbackStatus) {
0056     case Mpris.PlaybackStatus.Playing:
0057         return root.artist ? i18nc("@info:tooltip %1 is a musical artist and %2 is an app name", "by %1 (%2)\nMiddle-click to pause\nScroll to adjust volume", root.artist, root.identity)
0058             : i18nc("@info:tooltip %1 is an app name", "%1\nMiddle-click to pause\nScroll to adjust volume", root.identity)
0059     case Mpris.PlaybackStatus.Paused:
0060         return root.artist ? i18nc("@info:tooltip %1 is a musical artist and %2 is an app name", "by %1 (paused, %2)\nMiddle-click to play\nScroll to adjust volume", root.artist, root.identity)
0061             : i18nc("@info:tooltip %1 is an app name", "Paused (%1)\nMiddle-click to play\nScroll to adjust volume", root.identity)
0062     default:
0063         return "";
0064     }
0065     toolTipTextFormat: Text.PlainText
0066 
0067     compactRepresentation: CompactRepresentation {}
0068     fullRepresentation: ExpandedRepresentation {}
0069 
0070     // HACK Some players like Amarok take quite a while to load the next track
0071     // this avoids having the plasmoid jump between popup and panel
0072     onPlaybackStatusChanged: {
0073         if (root.playbackStatus > Mpris.PlaybackStatus.Stopped) {
0074             Plasmoid.status = PlasmaCore.Types.ActiveStatus
0075         } else {
0076             updatePlasmoidStatusTimer.restart()
0077         }
0078     }
0079 
0080     onExpandedChanged: {
0081         if (root.expanded) {
0082             mpris2Model.currentPlayer?.updatePosition();
0083         }
0084     }
0085 
0086     Timer {
0087         id: updatePlasmoidStatusTimer
0088         interval: Kirigami.Units.humanMoment
0089         onTriggered: {
0090             if (root.playbackStatus > Mpris.PlaybackStatus.Stopped) {
0091                 Plasmoid.status = PlasmaCore.Types.ActiveStatus
0092             } else {
0093                 Plasmoid.status = PlasmaCore.Types.PassiveStatus
0094             }
0095         }
0096     }
0097 
0098     GlobalConfig {
0099         id: config
0100     }
0101 
0102     Plasmoid.contextualActions: [
0103         PlasmaCore.Action {
0104             text: i18nc("Open player window or bring it to the front if already open", "Open")
0105             icon.name: "go-up-symbolic"
0106             priority: PlasmaCore.Action.LowPriority
0107             visible: root.canRaise
0108             onTriggered: raise()
0109         },
0110         PlasmaCore.Action {
0111             text: i18nc("Play previous track", "Previous Track")
0112             icon.name: Qt.application.layoutDirection === Qt.RightToLeft ? "media-skip-forward" : "media-skip-backward"
0113             priority: PlasmaCore.Action.LowPriority
0114             visible: root.canControl
0115             enabled: root.canGoPrevious
0116             onTriggered: previous()
0117         },
0118         PlasmaCore.Action {
0119             text: i18nc("Pause playback", "Pause")
0120             icon.name: "media-playback-pause"
0121             priority: PlasmaCore.Action.LowPriority
0122             visible: root.isPlaying && root.canPause
0123             enabled: visible
0124             onTriggered: pause()
0125         },
0126         PlasmaCore.Action {
0127             text: i18nc("Start playback", "Play")
0128             icon.name: "media-playback-start"
0129             priority: PlasmaCore.Action.LowPriority
0130             visible: root.canControl && !root.isPlaying
0131             enabled: root.canPlay
0132             onTriggered: play()
0133         },
0134         PlasmaCore.Action {
0135             text: i18nc("Play next track", "Next Track")
0136             icon.name: Qt.application.layoutDirection === Qt.RightToLeft ? "media-skip-backward" : "media-skip-forward"
0137             priority: PlasmaCore.Action.LowPriority
0138             visible: root.canControl
0139             enabled: root.canGoNext
0140             onTriggered: next()
0141         },
0142         PlasmaCore.Action {
0143             text: i18nc("Stop playback", "Stop")
0144             icon.name: "media-playback-stop"
0145             priority: PlasmaCore.Action.LowPriority
0146             visible: root.canControl
0147             enabled: root.canStop
0148             onTriggered: stop()
0149         },
0150         PlasmaCore.Action {
0151             isSeparator: true
0152             priority: PlasmaCore.Action.LowPriority
0153             visible: root.canQuit
0154         },
0155         PlasmaCore.Action {
0156             text: i18nc("Quit player", "Quit")
0157             icon.name: "application-exit"
0158             priority: PlasmaCore.Action.LowPriority
0159             visible: root.canQuit
0160             onTriggered: quit()
0161         }
0162     ]
0163 
0164     function previous() {
0165         mpris2Model.currentPlayer.Previous();
0166     }
0167     function next() {
0168         mpris2Model.currentPlayer.Next();
0169     }
0170     function play() {
0171         mpris2Model.currentPlayer.Play();
0172     }
0173     function pause() {
0174         mpris2Model.currentPlayer.Pause();
0175     }
0176     function togglePlaying() {
0177         mpris2Model.currentPlayer.PlayPause();
0178     }
0179     function stop() {
0180         mpris2Model.currentPlayer.Stop();
0181     }
0182     function quit() {
0183         mpris2Model.currentPlayer.Quit();
0184     }
0185     function raise() {
0186         mpris2Model.currentPlayer.Raise();
0187     }
0188 
0189     Mpris.Mpris2Model {
0190         id: mpris2Model
0191     }
0192 
0193     Component.onCompleted: {
0194         Plasmoid.removeInternalAction("configure");
0195     }
0196 }