From eeb775d203c810fb624621899b19a6917647a1e4 Mon Sep 17 00:00:00 2001 From: retrozinndev Date: Wed, 18 Jun 2025 21:52:41 -0300 Subject: [PATCH] :boom: fix: media copy link button not copying link there are some issues with astalmpris.player.metadata, so I started using playerctl cli instead --- ags/widget/bar/Media.ts | 15 +++++++++++---- ags/widget/center-window/BigMedia.ts | 14 ++++++++++---- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ags/widget/bar/Media.ts b/ags/widget/bar/Media.ts index 9e65583..a2487cb 100644 --- a/ags/widget/bar/Media.ts +++ b/ags/widget/bar/Media.ts @@ -1,9 +1,10 @@ -import { bind } from "astal"; +import { bind, exec } from "astal"; import { Gtk, Widget } from "astal/gtk3"; import AstalMpris from "gi://AstalMpris"; import { getSymbolicIcon } from "../../scripts/apps"; import { Separator, SeparatorProps } from "../Separator"; import { Windows } from "../../windows"; +import { Clipboard } from "../../scripts/clipboard"; export function Media(): Gtk.Widget { const connections: Array = []; @@ -24,9 +25,15 @@ export function Media(): Gtk.Widget { icon: "edit-paste-symbolic" } as Widget.IconProps), tooltipText: "Copy link to Clipboard", - visible: bind(players[0], "metadata").as((metadata) => - metadata["xesam:url"]?.get_string()[0] != null), - onClick: () => console.log(players[0].metadata["xesam:url"]?.get_string()[0]!) + // AstalMpris.Player.metadata works only sometimes, so I'm not using it + visible: bind(players[0], "metadata").as(Boolean), + onClick: async () => { + const link = exec(`playerctl --player=${ + players[0].busName.replace(/^org\.mpris\.MediaPlayer2\./i, "") + } metadata xesam:url`); + + link && Clipboard.getDefault().copyAsync(link); + } } as Widget.ButtonProps), new Widget.Button({ className: "previous", diff --git a/ags/widget/center-window/BigMedia.ts b/ags/widget/center-window/BigMedia.ts index 34ce7d3..d283975 100644 --- a/ags/widget/center-window/BigMedia.ts +++ b/ags/widget/center-window/BigMedia.ts @@ -1,6 +1,7 @@ -import { AstalIO, bind, Binding, execAsync, GLib, timeout } from "astal"; +import { AstalIO, bind, Binding, exec, timeout } from "astal"; import { Gtk, Widget } from "astal/gtk3"; import AstalMpris from "gi://AstalMpris"; +import { Clipboard } from "../../scripts/clipboard"; export function BigMedia(): Gtk.Widget { @@ -101,9 +102,14 @@ export function BigMedia(): Gtk.Widget { icon: "edit-paste-symbolic" } as Widget.IconProps), tooltipText: "Copy link to Clipboard", - visible: bind(players[0], "metadata").as((_meta: GLib.HashTable) => - players[0].get_meta("xesam:url") === null), - onClick: () => execAsync(`sh -c "wl-copy \\"$(playerctl metadata 'xesam:url')\\""`) + visible: bind(players[0], "metadata").as(Boolean), + onClick: async () => { + const link = exec(`playerctl --player=${ + players[0].busName.replace(/^org\.mpris\.MediaPlayer2\./i, "") + } metadata xesam:url`); + + link && Clipboard.getDefault().copyAsync(link); + } } as Widget.ButtonProps), new Widget.Button({ className: "shuffle",