Analysis
So here’s what’s happening. All you’re gonna see here is just me opening DevTools and analyzing display_ui.js
.
So you have this crossfadeFeatureImage
function. That has this nested blobUrlPromise.then
callback, and then a nested doFinnaly
which is the problem. The main point is doFinnaly
does a swap again, but that happens sometime later, after the Promsie returned by blurArtistArt
is resolved.
Now very importantly the then-callback closes on the back
variable from the outer scope, but not the front
one. Which means that when blobUrlPromise
callback runs, the front
div will be reevaluated, but not the back. Or more concretely, if we happen to do a swap, then another in a very short time, before blobUrlPromise
resolves (this is most often the case if you go back to a previous track), the back
variable will actually hold the now-front div (we’re after the swap). But front
is running the jquery selector again, meaning that will also hold a reference to the very same div. You can see this in the screenshot, both variables have div.front
.
Now if you swap a variable with itself, it’ll lose it’s class attribute, due to how that function is implemented, pretty self-explanatory:
Leading to the end result, where one of the divs don’t have a class attribute, this makes the other one stuck there permanently as any future swaps will not find .front
.
Solution
Just put both variables in the closure. Or neither. Doesn’t matter, it’s the same 2 divs anyway. So either add this line, or drop the other one, too.
Ask
As you can tell from my opening post, while I’m generally a happy Roon customer, I’m very much skeptical about the level of support here, as so far I opened 2 requests, this one was ignored outright, the other one (playback failing) was investigated and confirmed, yet ignored again for more than half a year now.
I here gave you an exact solution for 100% free, that you literally just have to commit, QA, and publish. I really hope this will actually get through and get into a version sooner rather than later. Thank you!
Legal stuff
I allocate any intellectual property, including but not limited to any copyrights, regarding the above, including my explanation and code, to the public domain, free of charge, as-is, without a warranty of any kind.