Nutzzz/GLC

Better game library detection where available

Nutzzz opened this issue · 4 comments

Relying on the Windows Uninstall registry is not ideal when game libraries can be used without it (e.g., after reinstalling Windows, you can just point Steam at an existing library).

Now that we're using the Epic .item files, I'm going to work on ingesting Steam .acf files. I'll have to investigate whether other platforms can be treated similarly.

EDIT: It looks like multiple Steam libraries can be found via libraryfolders.vdf

Steam solution committed
#87c5d3b40243be589015455172ea17ab43fa794c
This covers multiple game libraries.

Now working on ingesting Origin .mfst files.

I also just added itch as a new platform (which was a bit painful), but of course it has the same problem and the solution is not obvious... EDIT: It looks like I'll have to go through the SQLite database. :-(

Origin solution and itch implementation committed
#c25249949c5afa2cce346b0b771b007b5bf2cb13

As mentioned in the last comment, doing the itch implementation correctly entailed reading its SQLite database file.

Microsoft.Data.Sqlite was barfing on me so I used System.Data.SQLite, but now there's packaging complexity with the SQLite.Interop.dll files. I'm not sure whether it makes sense to just:

  1. Drop itch altogether?
  2. Use my first attempt (which doesn't find the secondary game library locations, doesn't find HTML5 games, and if more than one .exe file exists, often finds the wrong one)?
  3. Number 2 above, but also grep the log files, which at least gets us the game library locations in my limited testing?
  4. Do it the "right" way with the new SQLite implementation, with the added complexity it introduces for packaging? Then we'd need one of:
    a. Use ILMerge
    b. Make a quick installer
    c. Automatically download the dlls at runtime the first time it needs them; if that fails, tell the user to do it themselves.

EDIT: It looks like we're doing number 4 since we're moving from .json to SQLite anyway; and I just realized Costura.Fody (that is already being used) could be used for this purpose as well.

Moved this issue to upstream Solaire#18