💥 fix: media copy link button not copying link
there are some issues with astalmpris.player.metadata, so I started using playerctl cli instead
This commit is contained in:
+11
-4
@@ -1,9 +1,10 @@
|
|||||||
import { bind } from "astal";
|
import { bind, exec } from "astal";
|
||||||
import { Gtk, Widget } from "astal/gtk3";
|
import { Gtk, Widget } from "astal/gtk3";
|
||||||
import AstalMpris from "gi://AstalMpris";
|
import AstalMpris from "gi://AstalMpris";
|
||||||
import { getSymbolicIcon } from "../../scripts/apps";
|
import { getSymbolicIcon } from "../../scripts/apps";
|
||||||
import { Separator, SeparatorProps } from "../Separator";
|
import { Separator, SeparatorProps } from "../Separator";
|
||||||
import { Windows } from "../../windows";
|
import { Windows } from "../../windows";
|
||||||
|
import { Clipboard } from "../../scripts/clipboard";
|
||||||
|
|
||||||
export function Media(): Gtk.Widget {
|
export function Media(): Gtk.Widget {
|
||||||
const connections: Array<number> = [];
|
const connections: Array<number> = [];
|
||||||
@@ -24,9 +25,15 @@ export function Media(): Gtk.Widget {
|
|||||||
icon: "edit-paste-symbolic"
|
icon: "edit-paste-symbolic"
|
||||||
} as Widget.IconProps),
|
} as Widget.IconProps),
|
||||||
tooltipText: "Copy link to Clipboard",
|
tooltipText: "Copy link to Clipboard",
|
||||||
visible: bind(players[0], "metadata").as((metadata) =>
|
// AstalMpris.Player.metadata works only sometimes, so I'm not using it
|
||||||
metadata["xesam:url"]?.get_string()[0] != null),
|
visible: bind(players[0], "metadata").as(Boolean),
|
||||||
onClick: () => console.log(players[0].metadata["xesam:url"]?.get_string()[0]!)
|
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),
|
} as Widget.ButtonProps),
|
||||||
new Widget.Button({
|
new Widget.Button({
|
||||||
className: "previous",
|
className: "previous",
|
||||||
|
|||||||
@@ -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 { Gtk, Widget } from "astal/gtk3";
|
||||||
import AstalMpris from "gi://AstalMpris";
|
import AstalMpris from "gi://AstalMpris";
|
||||||
|
import { Clipboard } from "../../scripts/clipboard";
|
||||||
|
|
||||||
|
|
||||||
export function BigMedia(): Gtk.Widget {
|
export function BigMedia(): Gtk.Widget {
|
||||||
@@ -101,9 +102,14 @@ export function BigMedia(): Gtk.Widget {
|
|||||||
icon: "edit-paste-symbolic"
|
icon: "edit-paste-symbolic"
|
||||||
} as Widget.IconProps),
|
} as Widget.IconProps),
|
||||||
tooltipText: "Copy link to Clipboard",
|
tooltipText: "Copy link to Clipboard",
|
||||||
visible: bind(players[0], "metadata").as((_meta: GLib.HashTable) =>
|
visible: bind(players[0], "metadata").as(Boolean),
|
||||||
players[0].get_meta("xesam:url") === null),
|
onClick: async () => {
|
||||||
onClick: () => execAsync(`sh -c "wl-copy \\"$(playerctl metadata 'xesam:url')\\""`)
|
const link = exec(`playerctl --player=${
|
||||||
|
players[0].busName.replace(/^org\.mpris\.MediaPlayer2\./i, "")
|
||||||
|
} metadata xesam:url`);
|
||||||
|
|
||||||
|
link && Clipboard.getDefault().copyAsync(link);
|
||||||
|
}
|
||||||
} as Widget.ButtonProps),
|
} as Widget.ButtonProps),
|
||||||
new Widget.Button({
|
new Widget.Button({
|
||||||
className: "shuffle",
|
className: "shuffle",
|
||||||
|
|||||||
Reference in New Issue
Block a user