💥 fix(clipboard): issues with special characters on Clipboard.copyAsync()

This commit is contained in:
retrozinndev
2025-08-18 18:44:46 -03:00
parent db73023ac9
commit 49ded11c51
5 changed files with 54 additions and 38 deletions
+5 -17
View File
@@ -1,10 +1,10 @@
import { Accessor, createBinding, createConnection, onCleanup, With } from "ags";
import { createBinding, onCleanup, With } from "ags";
import { Gtk } from "ags/gtk4";
import { Separator } from "../Separator";
import { Windows } from "../../windows";
import { Clipboard } from "../../modules/clipboard";
import { decoder, getPlayerIconFromBusName, variableToBoolean } from "../../modules/utils";
import { player, setPlayer } from "../../modules/media";
import { getPlayerIconFromBusName, variableToBoolean } from "../../modules/utils";
import { accessMediaUrl, player, setPlayer } from "../../modules/media";
import GObject from "ags/gobject";
import AstalMpris from "gi://AstalMpris";
@@ -105,9 +105,9 @@ export const Media = () => {
<With value={player(pl => pl.available)}>
{(available: boolean) => available && <Gtk.Box class={"media-controls button-row"}>
<Gtk.Button class={"link"} iconName={"edit-paste-symbolic"}
visible={variableToBoolean(getMediaUrl(player.get()))}
visible={variableToBoolean(accessMediaUrl(player.get()))}
tooltipText={"Copy link to Clipboard"} onClicked={() => {
const url = getMediaUrl(player.get()).get();
const url = accessMediaUrl(player.get()).get();
url && Clipboard.getDefault().copyAsync(url);
}}
/>
@@ -133,15 +133,3 @@ export const Media = () => {
</Gtk.Revealer>
</Gtk.Box>
}
export function getMediaUrl(player: AstalMpris.Player): Accessor<string|undefined> {
return createConnection(player.get_meta("xesam:url"),
[player, "notify::metadata", () => player.get_meta("xesam:url")]
).as(url => {
const byteString = url?.get_data_as_bytes();
return byteString ?
decoder.decode(byteString.toArray())
: undefined;
})
}
+3 -3
View File
@@ -1,7 +1,7 @@
import { timeout } from "ags/time";
import { Astal, Gtk } from "ags/gtk4";
import { Clipboard } from "../../modules/clipboard";
import { getMediaUrl } from "../bar/Media";
import { accessMediaUrl } from "../../modules/media";
import { player, setPlayer } from "../../modules/media";
import { createBinding, For } from "ags";
import { pathToURI, variableToBoolean } from "../../modules/utils";
@@ -126,9 +126,9 @@ class PlayerWidget extends Gtk.Box {
<Gtk.Box class={"controls button-row"} $type="center">
<Gtk.Button class={"link"} iconName={"edit-paste-symbolic"}
tooltipText={"Copy link to clipboard"}
visible={variableToBoolean(getMediaUrl(player))}
visible={variableToBoolean(accessMediaUrl(player))}
onClicked={() => {
const url = getMediaUrl(player).get();
const url = accessMediaUrl(player).get();
url && Clipboard.getDefault().copyAsync(url);
}}
/>