import { createBinding, With } from "ags"; import { Gtk } from "ags/gtk4"; import { Separator } from "../../../widget/Separator"; import { Windows } from "../../../windows"; import { Clipboard } from "../../../modules/clipboard"; import { getPlayerIconFromBusName, secureBaseBinding, variableToBoolean } from "../../../modules/utils"; import { tr } from "../../../i18n/intl"; import { default as Player } from "../../../modules/media"; import AstalMpris from "gi://AstalMpris"; import Pango from "gi://Pango?version=1.0"; export const Media = () => p.available)}> { self.set_flags(Gtk.EventControllerScrollFlags.VERTICAL) }} onScroll={(_, __, dy) => { if(AstalMpris.get_default().players.length === 1 && Player.getDefault().player.busName === AstalMpris.get_default().players[0].busName) return true; const players = AstalMpris.get_default().players; for(let i = 0; i < players.length; i++) { const pl = players[i]; if(pl.busName !== Player.getDefault().player.busName) continue; if(dy > 0 && players[i-1]) { Player.getDefault().player = players[i-1]; break; } if(dy < 0 && players[i+1]) { Player.getDefault().player = players[i+1]; break; } } return true; }} /> Windows.getDefault().toggle("center-window")} /> { const revealer = self.get_widget()!.get_last_child() as Gtk.Revealer; revealer.set_reveal_child(true); }} onLeave={(self) => { const revealer = self.get_widget()!.get_last_child() as Gtk.Revealer; revealer.set_reveal_child(false); }} /> p.available)}> p.available)}> {(available: boolean) => available && (createBinding( Player.getDefault(), "player" ), "busName", "org.MediaPlayer2.folder-music-symbolic").as( getPlayerIconFromBusName )} /> (createBinding( Player.getDefault(), "player" ), "title", "").as(title => title ?? tr("media.no_title"))} maxWidthChars={20} ellipsize={Pango.EllipsizeMode.END} /> (createBinding( Player.getDefault(), "player" ), "artist", "").as(artist => artist ?? tr("media.no_artist"))} maxWidthChars={18} ellipsize={Pango.EllipsizeMode.END} /> } p.available)}> {(available: boolean) => available && { const url = Player.getMediaUrl(Player.getDefault().player); url && Clipboard.getDefault().copyAsync(url); }} /> Player.getDefault().player.canGoPrevious && Player.getDefault().player.previous() } /> ( createBinding(Player.getDefault(), "player"), "playbackStatus", AstalMpris.PlaybackStatus.PAUSED ).as(status => status === AstalMpris.PlaybackStatus.PAUSED ? "media-playback-start-symbolic" : "media-playback-pause-symbolic" )} tooltipText={secureBaseBinding( createBinding(Player.getDefault(), "player"), "playbackStatus", AstalMpris.PlaybackStatus.PAUSED ).as(status => status === AstalMpris.PlaybackStatus.PAUSED ? tr("media.play") : tr("media.pause") )} onClicked={() => Player.getDefault().player.play_pause()} /> Player.getDefault().player.canGoNext && Player.getDefault().player.next()} /> } as Gtk.Box;