aboutsummaryrefslogtreecommitdiffstats
path: root/volume-osd/README.md
AgeCommit message (Collapse)AuthorFilesLines
8 hoursdocs(volume-osd): Signal implements no MPRIS, so it can never appearHEADmasterDanilo M.1-1/+4
Playing an attachment in Signal Desktop claims no org.mpris.MediaPlayer2.* name; the only DBus name it owns is its tray StatusNotifierItem. The track row staying hidden is correct behaviour rather than a filter or detection bug, and there is nothing to add here. Recorded so it does not get retested as an open question. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TvHeJEXJzdfAaCCYqURAWp
8 hoursdocs(volume-osd): Feishin as the reference player, and the plasma filter ↵Danilo M.1-7/+17
confirmed Feishin fills the MPRIS metadata in the way the spec intends: a real mpris:artUrl, xesam:artist, and a clean xesam:title. That makes it the useful case to test against, and it shows the missing cover under Firefox is a browser and Navidrome-web limitation rather than anything this component does wrong. It is also the first player whose art is a remote HTTP URL instead of a local file, so the cover now depends on reaching the Navidrome host. It also settles the open question from the previous commit. Playing from the same server, Feishin publishes only its own bus name and playerctld, with no plasma-browser-integration entry, so that proxy is browser-only and filtering it costs a native player nothing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TvHeJEXJzdfAaCCYqURAWp
8 hoursfix(volume-osd): drop the plasma-browser-integration duplicate tooDanilo M.1-7/+12
playerctld was not the only proxy. plasma-browser-integration republishes a browser tab under its own bus name, so a playing Navidrome tab in Firefox was live on three names at once: firefox.instance_*, the plasma name, and playerctld. Only the first was being filtered, so two entries survived for one track and the transport buttons went to whichever sorted first. Safe to drop because none of the three bus names exists until playback starts, and the browser's own entry was present whenever the plasma one was, measured across two play sessions. An open but silent tab publishes nothing, so there is no row to lose. Also records what Navidrome does not provide: no mpris:artUrl, which is why the row shows no cover and is not a bug on this side, and everything packed into xesam:title with xesam:artist left empty. Neither is worked around, splitting such a title needs guessing where a real dash ends. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TvHeJEXJzdfAaCCYqURAWp
8 hoursdocs(volume-osd): record which players the track row was tested againstDanilo M.1-0/+4
Firefox is the case worth naming: one bus name carrying a player per tab, so it exercises the playerctld duplicate filter in a way audacious, the only thing this had ever been tried with, does not. Signal is still untested. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TvHeJEXJzdfAaCCYqURAWp
26 hoursfix(volume-osd): keep the shell alive when nothing is visibleDanilo M.1-0/+7
Quickshell exits once no window is visible. The OSD is hidden between changes, and with no MPRIS player running there is nothing else to hold it open, so the process loaded cleanly, logged no error and quit. The symptom was a panel that never appeared: not a blank panel, a dead shell. A 1x1 transparent window with an empty mask keeps it running. The mask makes it click-through, so it cannot catch a stray click, and it draws nothing. This window existed earlier and was removed after a process check that was measuring the wrong thing, which made it look unnecessary. The README now says why it is there, so it does not get removed a third time. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
27 hoursfeat(volume-osd): show what is playingDanilo M.1-4/+38
The OSD gains a track row above the volume bar when an MPRIS player is running: album art, title, artist, and prev/play/next. With no player it is the volume OSD it was, at the same size. A track change or a play/pause shows the panel as well, so the row is not something you only see by happening to touch the volume. Hovering freezes the fade so the buttons can be clicked and leaving restarts it, which keeps the passive behaviour intact for anyone not reaching for the mouse. The panel still takes no keyboard focus. playerctld proxies whichever player is active and republishes it under its own bus name, so every player is enumerated twice. Player.qml drops that name rather than deduplicating by identity, and controls the real player, which works whether or not playerctld is running. Album art is loaded with cache off and a per-track suffix on the URL. Audacious extracts embedded art into one temp file in its cache and rewrites that same path for each track, so the URL repeats while the image changes, and a cached Image would keep showing the last cover. Theme gains overlay, used by the art placeholder. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
27 hoursrefactor(theme): read the palette from unified-desktop-themeDanilo M.1-5/+9
Both components had their own copy of the Macchiato colours, and the second copy appeared the moment there was a second component. Editing the palette meant editing it in as many places as there were shells, and they would have drifted. They now read ~/.cache/wal/udt-palette.qml, which udt-accent generates from unified-desktop-theme's palette.rasi. The file is watched, so a palette change reaches a running shell in place, the same way the accent already did. What is left in Theme.qml is a fallback, used before the file has been read and on a machine where unified-desktop-theme is not installed, which is what keeps each directory runnable on its own. The file is parsed rather than imported: a generated QML singleton cannot be imported without a qmldir beside it, and the wal cache has no reason to carry one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7
28 hoursfeat: quickshell repo with volume OSDDanilo M.1-0/+92
Scaffold the repo that will hold quickshell implementations, each in its own directory with its own README, and add the first one. volume-osd shows an on-screen display for output and input volume. It watches PipeWire through Quickshell's native service rather than polling wpctl, so it appears for any volume change, not only for the keybinds: pavucontrol, a per-application slider, or a phone acting as a remote. One widget serves both directions, showing whichever device moved last. Colours follow unified-desktop-theme: Catppuccin Macchiato fixed, with the accent read from the file udt-accent already writes and watched, so it tracks the wallpaper. Lavender is the fallback, which keeps the directory runnable where that file does not exist. The frosting is the compositor's: the panel draws translucent and Hyprland blurs behind it via a layerrule matched on the window's namespace. That avoids a MultiEffect and an offscreen blur pass in QML, and degrades to flat translucent without the rule. Two details are documented in the component README because both were wrong before they were right: PwObjectTracker is required or the volume reads stale, and a node reports its initial volume before `ready` goes true, so the ready check alone suppresses the startup values. An extra guard on top of it ate the user's first keypress instead. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7