plac-for-apple-platform

Unofficial Roon client for Apple devices

Commits at bd70db71f48d9fd32c0cfffb2e2f2da0971f8709

  1. e54e5874 core: Label parsing function Roon API returns "[[id|text]]" format strings for title and subtitles on some browse paths. For example, in my environment, "Explore > Qobuz > New Releases > Qobuz grand selection" returns items with subtitle in this format, like "[[969850|Wes Montgomery]]". I don't think we'll get a fix for this--Roon API is abandoned. Each client has to parse and throw IDs and brackets away. Shota FUJI authored at Shota FUJI comitted at
  2. 63589eaa gtk-adwaita: Remove useless function call Also Vala compiler has been emitting a warning that the variable is unused. Shota FUJI authored at Shota FUJI comitted at
  3. cf275126 gtk-adwaita: Fix space between rows react to clicks <https://codeberg.org/pocka/plac/issues/5> The bug was inside GTK4, and there seems no way to workaround from application developer side. I was not happy about aesthetic of the previous cards list, I simply changed the custom rows to regular one. Shota FUJI authored at Shota FUJI comitted at
  4. 26b2df71 core: Fix segfault on opening "Track" page with release builds The "node" inside while loop is a reference to the other thread's stack variable, and there is no mechanism to block a creator function from exiting. Since blocking a creator function could lead to unpleasing UX (images at beginnings load slowly compared to later images,) I simply changed the code to allocate nodes on heap and added RC. Shota FUJI authored at Shota FUJI comitted at
  5. 8a05c1ce Install code formatter for Nix Amount of Nix code is no longer little. Shota FUJI authored at Shota FUJI comitted at
  6. d82b40d0 gtk-adwaita: Configure Nix build/package Shota FUJI authored at Shota FUJI comitted at
  7. b943cd16 gtk-adwaita: About dialog Shota FUJI authored at Shota FUJI comitted at
  8. 5949d43c gtk-adwaita: Fix browse error locks browse UI into disabled state Shota FUJI authored at Shota FUJI comitted at
  9. 90a7baf9 gtk-adwaita: Don't render non-actionable item as actionable Shota FUJI authored at Shota FUJI comitted at
  10. d497c6aa gtk-adwaita: Don't scroll after selecting/closing action menu popover It's annoying. Shota FUJI authored at Shota FUJI comitted at
  11. 1683e5fd gtk-adwaita: Render action list as menu button It was hard-to-grasp albeit not usable. Shota FUJI authored at Shota FUJI comitted at
  12. 70c1f75e core: Cache downloaded images Navigating through library pages (e.g. albums, artists) fetches same images over and over. In order to reduce load to Roon Server, I added stupid simple caching in front of image downloader. This significantly reduces HTTP GET calls on my library, especially "Tracks" page. The caching does almost nothing on Qobuz pages, though. In my testing, Qobuz images takes more time to load and only playlists have lot of duplicated images. Because of those, the existing "reuse ongoing GET request" mechanism eliminates duplicated GETs thus almost all of requests are unique. I don't believe this can be improved—nobody but Qobuz (perhaps Roon too?) can control, optimize, and estimate data appearance pattern on Qobuz pages. This cache implementation does not look great, but it works well. Shota FUJI authored at Shota FUJI comitted at
  13. bcf2497d core: Download image using normal HTTP instead of WebSocket Downloading large number of images through WebSocket easily clogs connection and affects sending of other actions (e.g. playback control) and receiving of events. By using normal HTTP via separate connection, this no longer happens. This patch finally enables me to open "Explore > Library Tracks" page. Shota FUJI authored at Shota FUJI comitted at
  14. a6d963af core: Relax timeouts It was too short. Especially browse APIs frequently timed-out on Qobuz pages. Shota FUJI authored at Shota FUJI comitted at
  15. 9fc84020 core: Limit number of concurrent image downloads To prevent server from choked. Unfortunately, due to high duplication, "Library > Tracks" still timeouts and renders app unresponsive. Shota FUJI authored at Shota FUJI comitted at
  16. b269cbba gtk-adwaita: Browse category sidebar Shota FUJI authored at Shota FUJI comitted at
  17. 7f2d5aeb gtk-adwaita: Seek feature GTK4's slider/range widget is shitty, thus this feature works shitty as well. There are no "drag ended" equivalent signal and drag start emits JUMP scroll type value change signal. Also, setting `false` to `sensitive` resets focus so long jump using keyboard is impossible too. Debouncing or throttling would help a little bit, but won't solve the problem fundamentally. Seek change events sent by server would resets drag operation. Valadoc shows no result for "throttle/debounce" and GTK4 seems to have no function and widget for that. Implementing debounce/throttle function by hand, testing that, and adding additional delay to seek triggered by seek is not acceptable given those won't work when a track is playing. The only way to solve this is implementing custom widget, which means re-implementing slider UI from scratch or carefully patching and workarounding GtkRange's internal implementation. Both are time-consuming, exhausting, negatively effects maintainability, and stupid. GTK4's rendered widget is great. Its API and abstraction are dogshit. Shota FUJI authored at Shota FUJI comitted at
  18. 5c3de821 core: Seek function Shota FUJI authored at Shota FUJI comitted at
  19. 1be9ec56 core: Fix race condition on reconnect Shota FUJI authored at Shota FUJI comitted at
  20. c5b9431d gtk-adwaita: Automatic reconnection on server close *Not tested* Testing against Roon Server is really frustrating task. Shota FUJI authored at Shota FUJI comitted at
  21. 9ed2fe6d core: Reduce chance of timeout for request reuses Shota FUJI authored at Shota FUJI comitted at
  22. 1a88a96c core: Refactor to use constant defined in std Did not notice the constant at the time of writing the logic. Shota FUJI authored at Shota FUJI comitted at
  23. 71e09e36 core: Set timeout for requests Shota FUJI authored at Shota FUJI comitted at
  24. c491d8b6 core: Return result for control request This is required to implement timeout. Shota FUJI authored at Shota FUJI comitted at
  25. f5b7f026 gtk-adwaita: Display browse list subtitle Shota FUJI authored at Shota FUJI comitted at
  26. 8116f858 core: Do not send duplicated request for image downloads Previously there were multiple requests made to the same image_key and options pair. This is problematic on opening "Library > Tracks", because the page has a lot of same images. Shota FUJI authored at Shota FUJI comitted at
  27. 11f43c3c gtk-adwaita: Add a11y label to browse back button Shota FUJI authored at Shota FUJI comitted at
  28. 65f4d25e gtk-adwaita: Add a11y label for seekbar Shota FUJI authored at Shota FUJI comitted at
  29. 00ba47fb gtk-adwaita: Display current seek position as a tooltip Shota FUJI authored at Shota FUJI comitted at
  30. 94edd150 gtk-adwaita: Remove browse items' angle icon from AT It's just for presentation. To be honest, I have no idea what to label it. "Arrow indicating next navigation"? Shota FUJI authored at Shota FUJI comitted at