LorenDB / download-steam-games

A script to download and archive all of your Steam games.
GNU General Public License v3.0
64 stars 1 forks source link

Existing Steam install support #3

Open Firehawke opened 8 months ago

Firehawke commented 8 months ago

I'm using a Linux VM to act as a Steam cache for multiple computers and a Steam Deck. It doesn't appear your script can detect installed games that are already installed in a local Steam instance. At least, I couldn't work out which path it should be using within three tries. I assume this is not a supported configuration?

If your script could be used to force Steam to update all existing packages periodically, that would be particularly useful and in line with the goal of archiving what we own. Even better if we can do this while using the script to keep snapshots of specific revisions (e.g. the US release of Street Fighter 30th Anniversary Collection had a 'botched' update that also included the Japanese versions of the games at one point, but they patched that back out quickly) for archival.

LorenDB commented 8 months ago

I assume this is not a supported configuration?

That's correct. I actually wanted to avoid archiving existing Steam installs because they are "corrupted" by save data. Granted, I'd prefer a backup with save data over no backup at all, but I tend to think that a backup should be pristine without save data - if you're really concerned about your saves, you should convert your game install to a tarball every time you play it.

If your script could be used to force Steam to update all existing packages periodically This is what cron is for :)

Even better if we can do this while using the script to keep snapshots of specific revisions (e.g. the US release of Street Fighter 30th Anniversary Collection had a 'botched' update that also included the Japanese versions of the games at one point, but they patched that back out quickly) for archival.

This is actually something I'm considering myself. My main concern is that I personally don't want to store every public revision of a game ever, but I'd be into adding a --keep-both sort of option where a game gets downloaded and tarballed and then its SHA256 is compared to the SHA256 of the previous download. If they differ, you archive both.

Do you have any thoughts on this? Again, I'm building this primarily for myself (to steal a great term, it's annoyance-driven development), so I tend to consider my own personal usecase and archiving wants without considering the true datahoarders :)

LorenDB commented 8 months ago

One option that I rather like would be to create a new subfolder for each run, named with the current time. Every game is downloaded, tarballed, and then compared with the tarball in the previous folder. If they differ, the new tarball is stored in the new folder; otherwise, a link is created to the tarball in the previous folder. This would give a full folder of backups with revisions... oh wait, I may have just reinvented git lfs :D

Of course, it would be ideal to be able to skip downloads entirely if the game has changed; however, I don't think my current code allows for that. I should probably do some research to see if I can remedy that problem.