plac-for-apple-platform

Unofficial Roon client for Apple devices

Commits at 12dfcdb969e5c386f69189c2b4abc81f671a3d60

  1. 12dfcdb9 core: Fix potential race condition Extremely rare, though (I saw only once.) Shota FUJI authored at Shota FUJI comitted at
  2. 03235177 core: Output request ID on control request send log "/control" endpoint suffers response loss as well as "/change_volume" endpoint. Request ID helps debugging this, because it's visible on data payload in Wireshark. Shota FUJI authored at Shota FUJI comitted at
  3. 05a6f716 gtk-adwaita: Volume controls While "it works," user experience is not great. For some reason, response for "/change_volume" got lost even though my machine sees a TCP packet. I also see this at "/control" endpoint too. However, "/seek" endpoint, which is called more frequently, does not encounter this. Most likely application problem given my experience on low-level programming, but it could be packet issue (Roon Server) or transport layer issue (websocket.zig or Linux?) I don't know, really. Shota FUJI authored at Shota FUJI comitted at
  4. 0a075ca6 core: Volume change functions Shota FUJI authored at Shota FUJI comitted at
  5. 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
  6. 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
  7. 0765fbd8 gtk-adwaita: Display zone outputs Shota FUJI authored at Shota FUJI comitted at
  8. d3f5d542 core: Expose zone outputs through C API Shota FUJI authored at Shota FUJI comitted at
  9. c69b6d06 core: Parse outputs in zone Shota FUJI authored at Shota FUJI comitted at
  10. 117a5ffa gtk-adwaita: Fix "Zone" dropdown button stretched vertically Shota FUJI authored at Shota FUJI comitted at
  11. 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
  12. 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
  13. 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
  14. 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
  15. 14bf5e0a gtk-adwaita: Simplify settings binding for label parsing Shota FUJI authored at Shota FUJI comitted at
  16. 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
  17. 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
  18. d64de6c8 gtk-adwaita: Loading and error state for Artwork widget Shota FUJI authored at Shota FUJI comitted at
  19. 9b107f4a gtk-adwaita: Workaround for Roon API returns "[[id|text]]" labels Shota FUJI authored at Shota FUJI comitted at
  20. 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
  21. 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
  22. 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
  23. 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
  24. 8a05c1ce Install code formatter for Nix Amount of Nix code is no longer little. Shota FUJI authored at Shota FUJI comitted at
  25. d82b40d0 gtk-adwaita: Configure Nix build/package Shota FUJI authored at Shota FUJI comitted at
  26. b943cd16 gtk-adwaita: About dialog Shota FUJI authored at Shota FUJI comitted at
  27. 5949d43c gtk-adwaita: Fix browse error locks browse UI into disabled state Shota FUJI authored at Shota FUJI comitted at
  28. 90a7baf9 gtk-adwaita: Don't render non-actionable item as actionable Shota FUJI authored at Shota FUJI comitted at
  29. d497c6aa gtk-adwaita: Don't scroll after selecting/closing action menu popover It's annoying. Shota FUJI authored at Shota FUJI comitted at
  30. 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