Commits at 8b211b3a58e577c0b7460327ba94e54ec7998807
e0f94d58gtk-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
9de7aad5gtk-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
2fa47b61gtk-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
b6093bebcore: 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
3e838e95gtk-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
412d59f0gtk-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
9b107f4agtk-adwaita: Workaround for Roon API returns "[[id|text]]" labels
Shota FUJI
authored at
Shota FUJI
comitted at
e54e5874core: 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
63589eaagtk-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
cf275126gtk-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
26b2df71core: 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
8a05c1ceInstall code formatter for Nix
Amount of Nix code is no longer little.
Shota FUJI
authored at
Shota FUJI
comitted at
5949d43cgtk-adwaita: Fix browse error locks browse UI into disabled state
Shota FUJI
authored at
Shota FUJI
comitted at
90a7baf9gtk-adwaita: Don't render non-actionable item as actionable
Shota FUJI
authored at
Shota FUJI
comitted at
d497c6aagtk-adwaita: Don't scroll after selecting/closing action menu popover
It's annoying.
Shota FUJI
authored at
Shota FUJI
comitted at
1683e5fdgtk-adwaita: Render action list as menu button
It was hard-to-grasp albeit not usable.
Shota FUJI
authored at
Shota FUJI
comitted at
70c1f75ecore: 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
bcf2497dcore: 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
a6d963afcore: Relax timeouts
It was too short. Especially browse APIs frequently timed-out on Qobuz
pages.
Shota FUJI
authored at
Shota FUJI
comitted at
9fc84020core: 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
7f2d5aebgtk-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
c5b9431dgtk-adwaita: Automatic reconnection on server close
*Not tested*
Testing against Roon Server is really frustrating task.
Shota FUJI
authored at
Shota FUJI
comitted at