From 17ddfc6fb1dc2ebb9b4ab0bbd3517ef7e1de97da Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Wed, 26 Mar 2025 22:59:28 +1100
Subject: sidebar: media pane
---
src/modules/sidebar/audio.tsx | 8 ++
src/modules/sidebar/index.tsx | 3 +-
src/modules/sidebar/modules/media.tsx | 149 ++++++++++++++++++++++++++++++++++
3 files changed, 159 insertions(+), 1 deletion(-)
create mode 100644 src/modules/sidebar/audio.tsx
create mode 100644 src/modules/sidebar/modules/media.tsx
(limited to 'src/modules')
diff --git a/src/modules/sidebar/audio.tsx b/src/modules/sidebar/audio.tsx
new file mode 100644
index 0000000..2b4c6e9
--- /dev/null
+++ b/src/modules/sidebar/audio.tsx
@@ -0,0 +1,8 @@
+import Media from "./modules/media";
+
+export default () => (
+
+
+
+
+);
diff --git a/src/modules/sidebar/index.tsx b/src/modules/sidebar/index.tsx
index 5b9a3a3..5ae7670 100644
--- a/src/modules/sidebar/index.tsx
+++ b/src/modules/sidebar/index.tsx
@@ -2,6 +2,7 @@ import type { Monitor } from "@/services/monitors";
import { bind, idle, register, Variable } from "astal";
import { App, Astal, Gdk, Gtk, Widget } from "astal/gtk3";
import { sidebar as config } from "config";
+import Audio from "./audio";
import Connectivity from "./connectivity";
import Dashboard from "./dashboard";
import NotifPane from "./notifpane";
@@ -21,7 +22,7 @@ export default class SideBar extends Widget.Window {
visible: false,
});
- const panes = [, , ];
+ const panes = [, , , ];
this.shown = Variable(panes[0].name);
this.add(
diff --git a/src/modules/sidebar/modules/media.tsx b/src/modules/sidebar/modules/media.tsx
new file mode 100644
index 0000000..4392aa7
--- /dev/null
+++ b/src/modules/sidebar/modules/media.tsx
@@ -0,0 +1,149 @@
+import Players from "@/services/players";
+import Slider from "@/widgets/slider";
+import { bind, Variable } from "astal";
+import { Gtk } from "astal/gtk3";
+import AstalMpris from "gi://AstalMpris";
+
+const lengthStr = (length: number) =>
+ `${Math.floor(length / 60)}:${Math.floor(length % 60)
+ .toString()
+ .padStart(2, "0")}`;
+
+const noNull = (s: string | null) => s ?? "-";
+
+const NoMedia = () => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+
+const Player = ({ player }: { player: AstalMpris.Player }) => {
+ const position = Variable.derive([bind(player, "position"), bind(player, "length")], (p, l) => p / l);
+
+ return (
+ position.drop()}>
+ `background-image: url("${a}");`)}
+ >
+ {bind(player, "coverArt").as(a => (a ? : ))}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ player.toggle_fullscreen()}
+ label={bind(player, "fullscreen").as(f => (f ? "" : ""))}
+ />
+ player.shuffle()}
+ label={bind(player, "shuffleStatus").as(s => (s === AstalMpris.Shuffle.ON ? "" : ""))}
+ />
+
+ player.loop()}
+ label={bind(player, "loopStatus").as(l =>
+ l === AstalMpris.Loop.TRACK ? "" : l === AstalMpris.Loop.PLAYLIST ? "" : ""
+ )}
+ />
+ player.raise()}
+ label=""
+ />
+
+
+
+ );
+};
+
+export default () => {
+ const active = Variable(Players.get_default().list[0]?.busName ?? "none");
+
+ return (
+
+
+
+ {bind(Players.get_default(), "list").as(ps => ps.map(p => ))}
+
+
+ );
+};
--
cgit v1.2.3-freya