Compare commits
No commits in common. "191222aa317a2229c20d509135999dac67a4eda4" and "dddbb8298447f9da2acf8bf39a4289719525970e" have entirely different histories.
191222aa31
...
dddbb82984
4 changed files with 94 additions and 112 deletions
|
|
@ -8,76 +8,73 @@ import QtQuick
|
|||
import QtQuick.Layouts
|
||||
import Quickshell.Services.Mpris
|
||||
|
||||
Loader {
|
||||
ColumnLayout {
|
||||
id: root
|
||||
|
||||
required property MprisPlayer player
|
||||
|
||||
active: player != null
|
||||
spacing: 12
|
||||
|
||||
sourceComponent: ColumnLayout {
|
||||
spacing: 12
|
||||
implicitWidth: 800
|
||||
implicitWidth: 800
|
||||
|
||||
StyledText {
|
||||
id: text
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: `${root.player.trackTitle} - ${root.player.trackArtist}`
|
||||
font.pixelSize: Dimensions.mpris.fontSize
|
||||
}
|
||||
StyledText {
|
||||
id: text
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: `${root.player.trackTitle} - ${root.player.trackArtist}`
|
||||
font.pixelSize: Dimensions.mpris.fontSize
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
StyledIconButton {
|
||||
id: backButton
|
||||
text: Icons.skipBack
|
||||
onClicked: {
|
||||
root.player.previous();
|
||||
}
|
||||
}
|
||||
StyledIconButton {
|
||||
id: playPauseButton
|
||||
text: root.player.isPlaying ? Icons.pause : Icons.play
|
||||
onClicked: {
|
||||
root.player.isPlaying = !root.player.isPlaying;
|
||||
}
|
||||
}
|
||||
StyledIconButton {
|
||||
id: forwardButton
|
||||
text: Icons.skipForward
|
||||
onClicked: {
|
||||
root.player.next();
|
||||
}
|
||||
RowLayout {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
StyledIconButton {
|
||||
id: backButton
|
||||
text: Icons.skipBack
|
||||
onClicked: {
|
||||
root.player.previous();
|
||||
}
|
||||
}
|
||||
|
||||
StyledText {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: {
|
||||
function formatTime(num) {
|
||||
return Math.floor(num).toString().padStart(2, "0");
|
||||
}
|
||||
return `${formatTime(root.player.position / 60)}:${formatTime(root.player.position % 60)} - ${formatTime(root.player.length / 60)}:${formatTime(root.player.length % 60)}`;
|
||||
StyledIconButton {
|
||||
id: playPauseButton
|
||||
text: root.player.isPlaying ? Icons.pause : Icons.play
|
||||
onClicked: {
|
||||
root.player.isPlaying = !root.player.isPlaying;
|
||||
}
|
||||
font.pixelSize: Dimensions.mpris.fontSize
|
||||
}
|
||||
|
||||
StyledSlider {
|
||||
from: 0
|
||||
to: root.player.length ?? 0
|
||||
value: root.player.position
|
||||
implicitHeight: 6
|
||||
Layout.fillWidth: true
|
||||
onMoved: {
|
||||
root.player.position = value;
|
||||
}
|
||||
|
||||
Timer {
|
||||
running: root.player.isPlaying
|
||||
interval: 1000
|
||||
repeat: true
|
||||
onTriggered: root.player.positionChanged()
|
||||
StyledIconButton {
|
||||
id: forwardButton
|
||||
text: Icons.skipForward
|
||||
onClicked: {
|
||||
root.player.next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StyledText {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
text: {
|
||||
function formatTime(num) {
|
||||
return Math.floor(num).toString().padStart(2, "0");
|
||||
}
|
||||
return `${formatTime(root.player.position / 60)}:${formatTime(root.player.position % 60)} - ${formatTime(root.player.length / 60)}:${formatTime(root.player.length % 60)}`;
|
||||
}
|
||||
font.pixelSize: Dimensions.mpris.fontSize
|
||||
}
|
||||
|
||||
StyledSlider {
|
||||
from: 0
|
||||
to: root.player.length ?? 0
|
||||
value: root.player.position
|
||||
implicitHeight: 6
|
||||
Layout.fillWidth: true
|
||||
onMoved: {
|
||||
root.player.position = value;
|
||||
}
|
||||
|
||||
Timer {
|
||||
running: root.player.isPlaying
|
||||
interval: 1000
|
||||
repeat: true
|
||||
onTriggered: root.player.positionChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,52 +0,0 @@
|
|||
import qs.components
|
||||
import qs.constants
|
||||
import qs.services
|
||||
import qs.widgets
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
RowLayout {
|
||||
spacing: 8
|
||||
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
StyledIconButton {
|
||||
id: previousPlayerButton
|
||||
|
||||
visible: Mpris.players.length > 1
|
||||
text: Icons.chevronLeft
|
||||
|
||||
onClicked: {
|
||||
Mpris.previousPlayer();
|
||||
}
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: {
|
||||
if (!Mpris.active) {
|
||||
return "inactive";
|
||||
}
|
||||
const player = Mpris.active;
|
||||
const displayName = player.identity ?? player.desktopEntry ?? player.dbusName ?? "unknown";
|
||||
if (displayName.toLowerCase().includes('tidal')) {
|
||||
return "Tidal";
|
||||
}
|
||||
if (displayName.toLowerCase().includes('zen')) {
|
||||
return "Zen";
|
||||
}
|
||||
return displayName;
|
||||
}
|
||||
font.pixelSize: 20
|
||||
}
|
||||
|
||||
StyledIconButton {
|
||||
id: nextPlayerButton
|
||||
|
||||
visible: Mpris.players.length > 1
|
||||
text: Icons.chevronRight
|
||||
|
||||
onClicked: {
|
||||
Mpris.nextPlayer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
pragma ComponentBehavior: Bound
|
||||
|
||||
import qs.components
|
||||
import qs.constants
|
||||
import qs.services
|
||||
import qs.widgets
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
|
||||
|
|
@ -14,9 +16,44 @@ StyledDrawer {
|
|||
margin: 32
|
||||
ColumnLayout {
|
||||
spacing: 8
|
||||
RowLayout {
|
||||
spacing: 8
|
||||
|
||||
MprisPlayerSelector {
|
||||
Layout.alignment: Qt.AlignHCenter
|
||||
|
||||
StyledIconButton {
|
||||
id: previousPlayerButton
|
||||
|
||||
visible: Mpris.players.length > 1
|
||||
text: Icons.chevronLeft
|
||||
|
||||
onClicked: {
|
||||
Mpris.previousPlayer();
|
||||
}
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: {
|
||||
if (Mpris.active?.identity) {
|
||||
const words = Mpris.active?.identity.split("-");
|
||||
const capitalized = words.map(val => String(val).charAt(0).toUpperCase() + String(val).slice(1));
|
||||
return capitalized.join(" ");
|
||||
}
|
||||
return Mpris.active?.desktopEntry ?? Mpris.active?.dbusName ?? "unknown";
|
||||
}
|
||||
font.pixelSize: 20
|
||||
}
|
||||
|
||||
StyledButton {
|
||||
id: nextPlayerButton
|
||||
visible: Mpris.players.length > 1
|
||||
|
||||
text: Icons.chevronRight
|
||||
|
||||
onClicked: {
|
||||
Mpris.nextPlayer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MprisController {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Singleton {
|
|||
id: root
|
||||
|
||||
property list<MprisPlayer> players: Mpris.players.values
|
||||
property MprisPlayer active: players[properties.currentIndex] ?? null
|
||||
property MprisPlayer active: players[properties.currentIndex]
|
||||
|
||||
PersistentProperties {
|
||||
id: properties
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue