plac-for-apple-platform

Unofficial Roon client for Apple devices

Commits at f3aaca6792d4f2041cd4cde704b1b60805e10672

  1. 0a075ca6 core: Volume change functions Shota FUJI authored at Shota FUJI comitted at
  2. ba20af71 gtk-adwaita: Connect to server directly via IP address and port UDP multicast/broadcast is unreliable, especially in my environment where Roon server (or the machine hosting it) randomly stops responding to discovery query. Direct connection is really instant and I believe this would improve normal UX too. Shota FUJI authored at Shota FUJI comitted at
  3. 4b536649 core: Function to discovery server by IP address Roon Server or my server machine reject replying to UDP multicast/broadcast after several attempts. This functionality can be a good way to avoid UDP multicast and broadcast issues. Shota FUJI authored at Shota FUJI comitted at
  4. 0765fbd8 gtk-adwaita: Display zone outputs Shota FUJI authored at Shota FUJI comitted at
  5. d3f5d542 core: Expose zone outputs through C API Shota FUJI authored at Shota FUJI comitted at
  6. c69b6d06 core: Parse outputs in zone Shota FUJI authored at Shota FUJI comitted at
  7. 117a5ffa gtk-adwaita: Fix "Zone" dropdown button stretched vertically Shota FUJI authored at Shota FUJI comitted at
  8. e0f94d58 gtk-adwaita: Fix duplicated requests sent after reconnection <https://codeberg.org/pocka/plac/issues/13> Establishing a new connection registers a new callback to various signals without disconnecting stale ones, thus 1+(number of reconnections) requests have been made. Shota FUJI authored at Shota FUJI comitted at
  9. 9de7aad5 gtk-adwaita: Make playback toolbar layout tidier It has been unorgnaized and scattered due to unaligned elements and chaotic spacings. Shota FUJI authored at Shota FUJI comitted at
  10. 2fa47b61 gtk-adwaita: Fix playback toolbar size changes depends on track text If a track A contains non-Ascii text in title/subtitle and a track B does not, changing A to B or vice-versa causes height change for playback toolbar. This is because GTK.Label does not implement correct line-height handling, as it seems to simply calculate the height using the first font family and ignoring fallback fonts. Due to the lack of proper API on GTK (propbably also on Pango,) I opted to hard-code maximum size on each Gtk.Label. <https://codeberg.org/pocka/plac/issues/9> Shota FUJI authored at Shota FUJI comitted at
  11. b6093beb core: Fix random crash on opening a page having images This patch fixes random crash caused by race condition (use after free and unexplainable memory errors such as malloc in glib,) by properly guarding accesses to image download queue. Inside `while` loop reading the downloads queue, it read without lock and that caused reading of freed memory (`d == undefined`), thus operations like `d.data.arc.ref()` and `allocator.destroy(d)` to be invalid. Because the race condition occurs on downloads queue, opening browse page with massive items (200~) has been crashed the app frequently compared to small number of items (~50). Also, longer the image takes to load, more likely the crash to happens. So streaming service's browse page is more prone to crash than local library. With this change, I don't see random crash on Qobuz pages anymore. In addition, for some mysterious reason, images load faster than before. Definetely previous implementation did something wrong, as adding a lock does not make things faster but slower... <https://codeberg.org/pocka/plac/issues/15> Shota FUJI authored at Shota FUJI comitted at
  12. 14bf5e0a gtk-adwaita: Simplify settings binding for label parsing Shota FUJI authored at Shota FUJI comitted at
  13. 3e838e95 gtk-adwaita: Buttons to seek forward/backwards by 10 seconds Seekbar is not comfortable to use. Why 10 seconds, not 5 seconds? Because Adwaita has icons for 10 seconds but 5 seconds. Shota FUJI authored at Shota FUJI comitted at
  14. 412d59f0 gtk-adwaita: Fix cannot drag seekbar <https://codeberg.org/pocka/plac/issues/14> This is still not optimal, though. Ideally changes should debounce or throttle to reduce the number of request. But this works without crashing. Shota FUJI authored at Shota FUJI comitted at
  15. d64de6c8 gtk-adwaita: Loading and error state for Artwork widget Shota FUJI authored at Shota FUJI comitted at
  16. 9b107f4a gtk-adwaita: Workaround for Roon API returns "[[id|text]]" labels Shota FUJI authored at Shota FUJI comitted at
  17. 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
  18. 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
  19. 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
  20. 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
  21. 8a05c1ce Install code formatter for Nix Amount of Nix code is no longer little. Shota FUJI authored at Shota FUJI comitted at
  22. d82b40d0 gtk-adwaita: Configure Nix build/package Shota FUJI authored at Shota FUJI comitted at
  23. b943cd16 gtk-adwaita: About dialog Shota FUJI authored at Shota FUJI comitted at
  24. 5949d43c gtk-adwaita: Fix browse error locks browse UI into disabled state Shota FUJI authored at Shota FUJI comitted at
  25. 90a7baf9 gtk-adwaita: Don't render non-actionable item as actionable Shota FUJI authored at Shota FUJI comitted at
  26. d497c6aa gtk-adwaita: Don't scroll after selecting/closing action menu popover It's annoying. Shota FUJI authored at Shota FUJI comitted at
  27. 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
  28. 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
  29. 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
  30. 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