plac-for-apple-platform

Unofficial Roon client for Apple devices

Commits at 5f8579cc4bd05d42fc83556879315249afe0610d

  1. 1dd7aab4 macos: Change non-modified variable to immutable Addressed a Xcode warning. Shota FUJI authored at Shota FUJI comitted at
  2. afb2d6b4 macos: Merge server discovery and main window The former is (most of the case) shown once. The reason I changed the payload of ".found" case is, without that, the only reference will be "ConnectedView" and every updates to the View would release then re-create a connection. Shota FUJI authored at Shota FUJI comitted at
  3. d53ccec3 macos: Save connected server ID and reconnect on launch The current UX is not complete, as there is no way to disconnect. Considering the usecase of connecting to more than one Roon server is rare, the discovery window should be integrated into the main window. Then it can conditionally render server discovery or connected view without going to discovery view first. Shota FUJI authored at Shota FUJI comitted at
  4. 37c16ed0 core: Allow clients to set custom extension ID/name/version It has been pain to manage authorization tokens in Roon settings page. Shota FUJI authored at Shota FUJI comitted at
  5. dfc4cec0 macos: Display loading UI during extension authorization It has been unclear what it's doing and what a user should do. Shota FUJI authored at Shota FUJI comitted at
  6. 2bb754a9 macos: Polish PlaybackBar It was bit odd. Shota FUJI authored at Shota FUJI comitted at
  7. 8b8802c2 macos: Display now playing texts (title and artist, mostly) Shota FUJI authored at Shota FUJI comitted at
  8. 9e6bf7bf macos: Fix more than one element in array crashes application I don't know how I got to that iteration code, but the `UnsafePointer<T>.successor` is NOT a method to iterate over an array. <https://codeberg.org/pocka/plac/issues/17> Shota FUJI authored at Shota FUJI comitted at
  9. c972d09c macos: Fix app crash when server scan found nothing Shota FUJI authored at Shota FUJI comitted at
  10. 065d06d6 core: Print debug log on macOS build Ideally, integrating OSLog is the best. However, it's time-consuming and a lot of work needs to be done. This is good for now. Shota FUJI authored at Shota FUJI comitted at
  11. 790bc7fc macos: Fix crash on network error at server discovery Shota FUJI authored at Shota FUJI comitted at
  12. 8fdfb08d gtk-adwaita: Remove "develop build" style from window Even though there is some missing features (search and disconnect menu option,) it's usable for my day-to-day usage. Now all concurrency and memory bugs are fixed, this is the best timing to remove WIP label. Shota FUJI authored at Shota FUJI comitted at
  13. 5ed1b013 core: Give WS read and event handlers dedicated threads <https://codeberg.org/pocka/plac/issues/16> Parsing and handling incoming message in the same thread that reads WebSocket message from socket sometime drops WebSocket message, due to the thread being busy. This redesign solves that by separating reading and parsing/handling using dedicated threads. Although volume change operation now feels little bit sluggish, no more dropped response. Every operation is working correctly. Shota FUJI authored at Shota FUJI comitted at
  14. 12dfcdb9 core: Fix potential race condition Extremely rare, though (I saw only once.) Shota FUJI authored at Shota FUJI comitted at
  15. 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
  16. 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
  17. 0a075ca6 core: Volume change functions Shota FUJI authored at Shota FUJI comitted at
  18. 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
  19. 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
  20. 0765fbd8 gtk-adwaita: Display zone outputs Shota FUJI authored at Shota FUJI comitted at
  21. d3f5d542 core: Expose zone outputs through C API Shota FUJI authored at Shota FUJI comitted at
  22. c69b6d06 core: Parse outputs in zone Shota FUJI authored at Shota FUJI comitted at
  23. 117a5ffa gtk-adwaita: Fix "Zone" dropdown button stretched vertically Shota FUJI authored at Shota FUJI comitted at
  24. 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
  25. 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
  26. 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
  27. 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
  28. 14bf5e0a gtk-adwaita: Simplify settings binding for label parsing Shota FUJI authored at Shota FUJI comitted at
  29. 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
  30. 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