Files
2026-05-20 10:47:56 +02:00

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]
}
}