Commit graph

9491 commits

Author SHA1 Message Date
Daniel Johnson 40c49b0f19 The Lutris service can get its game installers on a thread too! 2024-01-13 12:18:00 -08:00
Daniel Johnson c51ed54f89 Move calls to obtain installers from the service onto AsyncCall. 2024-01-13 12:18:00 -08:00
Daniel Johnson 2b9358e7f2 Use AsyncCall to obtain updates and DLC.
Round-tripping to the GOG servers can take a little while.
2024-01-13 12:18:00 -08:00
Daniel Johnson 2b8703346a Check for the appid before loading extras.
You can have a GOG game off the Lutris website that does not download from GOG - you provide the installer file. "Alient Shooter" is one of these.

In this case, we have no appid and can get no extras, and we should not try to get them.
2024-01-13 08:45:34 -05:00
Daniel Johnson f56f4dd0e4 Work around the 'double files' bug.
If you click Continue fas enough, you can trigger the prepare_game_files() method to run twice, on two threads concurrently. This results in doubled up files and a duplicate files page in the navigation stack.

This is hard to fix simply or without UI ugliness, so this commit tolerates it.

It adjusts prepare_game_files() to be thread-safer (!) by committing its changes only at the end. The GIL should make this atomic, probably, so the last preparation wins instead of being combined with the other.

The navigation stack will now refuse to add a duplicate page; it still exits the old and re-enters but does not put the second entry in the history, so you'll go back further when you click the Back button.

That should hide the problem with minimal code churn and risk.
2024-01-13 06:04:55 -05:00
Daniel Johnson 0c1c8955d0 Even uglier unsafe signal fix
I'm not really sure that this code actually runs - there's dead code here for sure, and I can't prove we can ever match an existing game with an api-provided service installer.

Buuut if it does run it can crash us. We can't emi 'game-updated' on a thread, it absolutely hits GTK.

This commit moves the signal to the main thread and adds some error handling to avoid a NoneType error here too.

Super ugly this. Asyncio could do some much better!
2024-01-13 05:40:02 -05:00
Daniel Johnson 4ec0aeb9ee Fix move-game crash
Now here's a place where asyncio would clearly have helped.

But, the problem is that the move-game logic runs on a thread and changes the game. It saves the game and *that* fires the 'game-updated' signal. Various bits of the UI handle this to update the UI.

But GTK is not thread-safe at all, and updating the UI from a thread will sometimes crash it.

This commit suppresses the signal, and then manually fires it after the moe completes on the main thread in the AsyncCall callback.
2024-01-13 05:26:47 -05:00
Daniel Johnson bf169bc0ef Do not move a game that can't be moved; abort before making any changes instead.
However, we handle the exception here and show a warning dialog about this. The user can choose to just set the location without moving or updating anything - they'll have to fix things up themselves.

Should help with #5223
2024-01-12 19:44:27 -05:00
Daniel Johnson 6f283f21a4 Filter out products that are not installable from the extras list for GOG.
DLCs you do not own are listed by the GOG api but are _not_ installable, and we will get 404s trying to download the extras for them.

So let's not offer them at all.
2024-01-12 17:05:01 -05:00
Daniel Johnson 30b62ab94a Move steam game playtime transfer code down to the steam service.
It makes GOG crash, and probably other services too!
2024-01-12 17:01:37 -05:00
Daniel Johnson 0cca6e1bd5 If the GOG API won't provide download links, we'll skip those files. 2024-01-11 20:00:20 -05:00
Mathieu Comandon 2052ad4d6c Remove messages about 'checking credentials' which are most unhelpful 2024-01-11 15:40:48 -08:00
Daniel Johnson a3e36e1650 Enable download of DLC extras from GOG.
This is a bit painful; to do this we extract the downlink information when we pull the extras, and put that in the extras dict.

Then, InstallerWindow keeps the dict rather than just the ID from it; it passes the entire thing back into the service so that the GOG service can obtain the download subdict and it goes from there.

There are minimal changes for itch.io, the only other service with extras. The new code here just strips the IDs out and proceeds as before.
2024-01-11 15:33:32 -08:00
Mathieu Comandon 37d81a1cd6 Add some entries to the Changelog 2024-01-11 03:05:56 -08:00
Daniel Johnson 460904bb44 Add a visible warning about using Virtual Desktops with Proton or GE versions of Wine.
It's better to let users know this feature isn't going to be used. I'd use 'condition' here, but it does not support dynamic updates baed on config settings like the version.

This isn't perfect - a system provided Wine might not be detected at this point. But I think it is likely to be sufficient; the actual check against the Wine exe path remains anyway.

The rather gruff 'not supported' warning remains in any case.
2024-01-11 04:47:23 -05:00
Daniel Johnson 2c4fd23ed7 Update get_formatted_playtime() to use the same localized strings as parse_playtime()
This way the parse/format roundtrip will not be broken by translators getting creative, or forgetting some of the strings.

This does mean we'll lose the translations for playtimes in the next release. I'd hand-fix this, but @strcore has told me not to do this.
2024-01-11 04:25:24 -05:00
Daniel Johnson 647a4b0494 Simplify find_hours logic. Normalizing does not achieve anything now. 2024-01-11 04:17:05 -05:00
Mathieu Comandon e4cc1d3eaf Disable Wine virtual desktop when used with Wine-GE or Proton 2024-01-10 19:04:49 -08:00
Mathieu Comandon 8c0951fbd3 Sync Steam games playtime to Lutris 2024-01-10 18:47:00 -08:00
Mathieu Comandon a663f8006e Accept more formats in the playtime edit widget, add tests 2024-01-10 18:26:41 -08:00
Daniel Johnson 659bc241da Fix incorrect or inconsistent slug generation.
Only scummvm uses "lutris_slug" but it is provided for Gog too - with stale data.
2024-01-10 19:39:43 -05:00
Daniel Johnson 0e96bed1f7 Also move the SIGTERM and winekill stuff onto a worker thread. 2024-01-09 17:35:16 -05:00
Daniel Johnson 183d80a2d3 Actually SIGKILL processes at the end of force-stop on the worker thread, not the main thread. 2024-01-09 17:26:17 -05:00
Daniel Johnson 9f2888172a
Update changelog
Oops! Media are not going to the trash. That's still in an outstanding PR.
2024-01-09 10:13:59 -05:00
Daniel Johnson 04be24351c Duplicate @strcore's prophylactic code for the special lutris.py game service game lookup code too. 2024-01-09 04:33:32 -05:00
Mathieu Comandon af8d00c029 Unmurder the caching feature 2024-01-08 22:40:16 -08:00
Mathieu Comandon 81b756e3d9 Remove deprecated scaler option in Dosbox 2024-01-08 22:09:49 -08:00
Mathieu Comandon 10c0aacfe2 Allow AntimicroX to work from Flatpak 2024-01-08 21:51:59 -08:00
Mathieu Comandon 3f45d1f524 Only get service game if the game's service match 2024-01-08 21:33:47 -08:00
Mathieu Comandon 67b8189a9f Do not launch the Steam client with mangohud 2024-01-08 20:50:52 -08:00
Mathieu Comandon 4932b5ca0a Disable autodetect button on Flatpak 2024-01-08 20:03:03 -08:00
Daniel Johnson ea7c87881f Don't grab the Vulkan API version pre-emptively; it's cached anyway. 2024-01-08 16:41:27 -05:00
Daniel Johnson f07883d0f2 Merge remote-tracking branch 'origin/master' 2024-01-08 04:37:22 -05:00
Daniel Johnson eb5120be23 Toot toot! Add more stuff to the change log.
Much of it is actually not my stuff but @strcore's.
2024-01-08 04:37:12 -05:00
Mathieu Comandon 238b20da83 Avoid crash if lsblk output can't be read 2024-01-08 01:19:50 -08:00
Mathieu Comandon 73863761e0 Replace Twitter link with Mastodon 2024-01-07 20:34:46 -08:00
Mathieu Comandon a892d08f63 Update CONTRIBUTING and INSTALL 2024-01-07 20:33:04 -08:00
Mathieu Comandon b3d52d35e5 Initial changelog for 0.5.15 2024-01-07 19:20:29 -08:00
Mathieu Comandon 00f72b0fb4 Emit a view-updated signal instead of reconstructing the store directly in redraw_view 2024-01-07 18:00:20 -08:00
Mathieu Comandon f055e65ce0 Check for service_id presence 2024-01-07 17:27:47 -08:00
Daniel Johnson a903b67180 Download missing Lutris media when installing games during service refresh.
This extends sync_media() so it can download for a specific set of games, so we can download only the installed games, not games you had already.

Resolves #4545
2024-01-07 14:40:32 -05:00
Daniel Johnson 8cabab49c7 Disable the 'Show Hidden Games' checkbox when in a service view - we do not implement it there. 2024-01-07 10:33:39 -05:00
Daniel Johnson 0b9dfecb0c Reduce the number of special case checks for the service id 'lutris'. 2024-01-07 10:26:59 -05:00
Daniel Johnson 5ebebf41a6 Fix crash when hiding a game from the Lutris view specifically. 2024-01-07 10:07:07 -05:00
Daniel Johnson 858786decd Whoops; the 'appid' equivalent for the lutris service is the slug, of course. 2024-01-07 09:34:04 -05:00
Daniel Johnson 553db0fb46 Modify the 'installed' property on StoreItem to use the cached installed game data to check for installation.
Saves a database query to do this.
2024-01-07 09:23:13 -05:00
Daniel Johnson 5c26ebb90e Do not fall back to the installed game if the actual game_data has the key, even if it has a blank value. 2024-01-07 09:10:20 -05:00
Daniel Johnson 43489fb071 When loading the game list into the view, use single SQL query to load the installed games.
We generally need them all, and pounding the database over and over for each game *even if it has no installed game counterpart* we cause nasty concurrency issues when reloading the service at the same time.

Instead, we load them and all preload the StoreItem - even if there's no installed game, if the StoreItem knows this, there's no need to fetch that data for that game.
2024-01-07 08:41:23 -05:00
Daniel Johnson acfc74117a Consolidate the end-of-cycle checks for the launch animation. 2024-01-06 13:49:36 -05:00
Daniel Johnson 8b0819fa41 Add some handling so that if we do not understand /proc/driver/nvidia/version we just fall back to glxinfo instead. 2024-01-06 07:29:22 -05:00