mirror of
https://github.com/spalencsar/bearwave.git
synced 2026-07-06 22:24:17 +02:00
107 lines
3.4 KiB
QML
107 lines
3.4 KiB
QML
import QtQuick 2.15
|
|
import QtQuick.Layouts 1.15
|
|
import org.kde.plasma.plasmoid 2.0
|
|
import org.kde.plasma.components as PlasmaComponents
|
|
import org.kde.plasma.plasma5support as Plasma5Support
|
|
|
|
PlasmoidItem {
|
|
id: root
|
|
|
|
property string sourceName: "org.mpris.MediaPlayer2.bearwave"
|
|
property bool available: mprisSource.data[sourceName] !== undefined
|
|
property string playbackStatus: available ? (mprisSource.data[sourceName]["PlaybackStatus"] || "Stopped") : "Stopped"
|
|
property var metadata: available ? (mprisSource.data[sourceName]["Metadata"] || ({})) : ({})
|
|
property string titleText: metadata["xesam:title"] || "BearWave"
|
|
property string artistText: (metadata["xesam:artist"] && metadata["xesam:artist"].length > 0) ? metadata["xesam:artist"][0] : ""
|
|
|
|
preferredRepresentation: compactRepresentation
|
|
|
|
function callMpris(methodName) {
|
|
if (!available) {
|
|
return
|
|
}
|
|
const service = mprisSource.serviceForSource(sourceName)
|
|
const operation = service.operationDescription(methodName)
|
|
if (operation === undefined) {
|
|
return
|
|
}
|
|
service.startOperationCall(operation)
|
|
}
|
|
|
|
compactRepresentation: Item {
|
|
implicitWidth: 220
|
|
implicitHeight: 28
|
|
|
|
PlasmaComponents.Button {
|
|
anchors.fill: parent
|
|
text: available
|
|
? (artistText.length > 0 ? (artistText + " - " + titleText) : titleText)
|
|
: "BearWave nicht aktiv"
|
|
onClicked: root.expanded = true
|
|
}
|
|
}
|
|
|
|
fullRepresentation: Item {
|
|
implicitWidth: 320
|
|
implicitHeight: 170
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.margins: 10
|
|
spacing: 8
|
|
|
|
PlasmaComponents.Label {
|
|
Layout.fillWidth: true
|
|
text: available ? titleText : "BearWave nicht aktiv"
|
|
elide: Text.ElideRight
|
|
font.bold: true
|
|
}
|
|
|
|
PlasmaComponents.Label {
|
|
Layout.fillWidth: true
|
|
text: artistText.length > 0 ? artistText : (available ? "Live-Radio" : "Bitte BearWave starten")
|
|
elide: Text.ElideRight
|
|
opacity: 0.8
|
|
}
|
|
|
|
PlasmaComponents.Label {
|
|
Layout.fillWidth: true
|
|
text: "Status: " + playbackStatus
|
|
opacity: 0.8
|
|
}
|
|
|
|
RowLayout {
|
|
Layout.fillWidth: true
|
|
spacing: 6
|
|
|
|
PlasmaComponents.Button {
|
|
text: "⏮"
|
|
enabled: available
|
|
onClicked: callMpris("Previous")
|
|
}
|
|
PlasmaComponents.Button {
|
|
text: playbackStatus === "Playing" ? "⏸" : "▶"
|
|
enabled: available
|
|
onClicked: callMpris("PlayPause")
|
|
}
|
|
PlasmaComponents.Button {
|
|
text: "⏹"
|
|
enabled: available
|
|
onClicked: callMpris("Stop")
|
|
}
|
|
PlasmaComponents.Button {
|
|
text: "⏭"
|
|
enabled: available
|
|
onClicked: callMpris("Next")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Plasma5Support.DataSource {
|
|
id: mprisSource
|
|
engine: "mpris2"
|
|
connectedSources: [sourceName]
|
|
}
|
|
}
|