/*SPDX-FileCopyrightText: 2013 Sebastian KΓΌgler <sebas@kde.org>SPDX-FileCopyrightText: 2014 Martin GrΓ€Γlin <mgraesslin@kde.org>SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de>SPDX-FileCopyrightText: 2017 Roman Gilg <subdiff@gmail.com>SPDX-FileCopyrightText: 2020 Nate Graham <nate@kde.org>SPDX-License-Identifier: LGPL-2.0-or-later*/import QtQuick 2.15import QtQuick.Layouts 1.15import org.kde.plasma.core 2.0 as PlasmaCoreimport org.kde.plasma.components 3.0 as PlasmaComponents3import org.kde.plasma.extras 2.0 as PlasmaExtrasRowLayout {enabled: !!playerData.CanControlreadonly property string mprisSourceName: mpris2Source.sourceNameForLauncherUrl(launcherUrl, appPid)readonly property var playerData: mprisSourceName != "" ? mpris2Source.data[mprisSourceName] : 0readonly property bool playing: !!(playerData.PlaybackStatus === "Playing")readonly property var currentMetadata: !!playerData ? playerData.Metadata : ""readonly property string track: {const xesamTitle = currentMetadata["xesam:title"]if (xesamTitle) {return xesamTitle;}// if no track title is given, print out the file nameconst xesamUrl = currentMetadata["xesam:url"] ? currentMetadata["xesam:url"].toString() : ""if (!xesamUrl) {return "";}const lastSlashPos = xesamUrl.lastIndexOf('/')if (lastSlashPos < 0) {return "";}const lastUrlPart = xesamUrl.substring(lastSlashPos + 1)return decodeURIComponent(lastUrlPart) || "";}readonly property string artist: currentMetadata["xesam:artist"] || ""readonly property string albumArt: currentMetadata["mpris:artUrl"] || ""ColumnLayout {Layout.fillWidth: trueLayout.topMargin: PlasmaCore.Units.smallSpacingLayout.bottomMargin: PlasmaCore.Units.smallSpacingLayout.rightMargin: isWin ? PlasmaCore.Units.smallSpacing : PlasmaCore.Units.largeSpacingspacing: 0ScrollableTextWrapper {id: songTextWrapperLayout.fillWidth: trueLayout.preferredHeight: songText.heightimplicitWidth: songText.implicitWidthPlasmaComponents3.Label {id: songTextparent: songTextWrapperwidth: parent.widthheight: undefinedlineHeight: 1maximumLineCount: artistText.visible? 1 : 2wrapMode: Text.NoWrapelide: parent.state ? Text.ElideNone : Text.ElideRighttext: tracktextFormat: Text.PlainText}}ScrollableTextWrapper {id: artistTextWrapperLayout.fillWidth: trueLayout.preferredHeight: artistText.heightimplicitWidth: artistText.implicitWidthvisible: artistText.text !== ""PlasmaExtras.DescriptiveLabel {id: artistTextparent: artistTextWrapperwidth: parent.widthheight: undefinedwrapMode: Text.NoWraplineHeight: 1elide: parent.state ? Text.ElideNone : Text.ElideRighttext: artistfont: PlasmaCore.Theme.smallestFonttextFormat: Text.PlainText}}}PlasmaComponents3.ToolButton {enabled: !!playerData.CanGoPreviousicon.name: LayoutMirroring.enabled ? "media-skip-forward" : "media-skip-backward"onClicked: mpris2Source.goPrevious(mprisSourceName)}PlasmaComponents3.ToolButton {enabled: playing ? !!playerData.CanPause : !!playerData.CanPlayicon.name: playing ? "media-playback-pause" : "media-playback-start"onClicked: {if (!playing) {mpris2Source.play(mprisSourceName);} else {mpris2Source.pause(mprisSourceName);}}}PlasmaComponents3.ToolButton {enabled: !!playerData.CanGoNexticon.name: LayoutMirroring.enabled ? "media-skip-backward" : "media-skip-forward"onClicked: mpris2Source.goNext(mprisSourceName)}}