This is just when updating the path cache, but it should prevent unusable paths getting in there when they would have worked with actual Wine.
Fixes#5309, or at least prevents it going forward.
Even if it is stale, even whe a specific version is requested, we'll try to satisfy version info request from the cache and hit the API only if this fails.
This commit also breaks out the code to parse out the architecture from the version, and uses this in the runner-version dialog too.
That bit uses Optional[str], which is not ideal, but I haven't figured out a better way here. Just using '' instead is cheating, a None spelled differently.
Pass exceptions for 'error' when possible, provide the parent when available.
Also, go ahead and mark the 'error' parameter as Union[str, BaseException]. It's ugly, but seems like the best option in the short term.
There's also an explicit message_markup parameter to use to override this behavior, allowing custom markup to be used while preserving the 'Copy to Clipboard' functionality.
This is more for #5295.
It doesn't seem to do anything for me; not sure why. Maybe GNOME does not like icons in message boxes anymore, but I can't find documentation for this.
It's very easy to pass the error to get_error_handler(), but we want the type signature to be simple, not Union[TError, Type[TError]], so instead we'll log if you pass the exception and fix it at runtime.
We will raise another exception if you pass some random thing in as well, since the 'attribute __mro__ not found' is just confusing.
This way when you log it there's no markup there, but if it hits the backstop we'll see the link. The game-error handler now delegates to the backstop code too.
FsyncUnsupportedError just uses the slightly longer message by default now, too. util/wine.py no longer needs to use ErrorDialog at all.
It checks when switching to the 'Missing' view, but also on start-up. If you start out on the missing view, that's two checks.
Instead, this will check when switching to the 'missing' view, or it any view if it hasn't updated yet.
This way missing badges can appear on media for installed games even in the service views. We are doing this resolution only for visible games, so we should not hit the PGA database too much, I hope.
This moves some common code up to the GameView base class.
This way you don't actually need to restart Lutris to get the missing status up to date, if you know hte obscure trick.
But you have to do something, it's not just updating all the time.