Posted February 18, 2021
high rated
I am working on yet another unofficial gog client. It can be found here: https://github.com/Magnitus-/gogcli
If you are already satisfied with another tool for your backup needs, I encourage you to keep using it (a backup tool is a backup tool).
If you have yet to make a decision or found other tools to be unsuitable for your needs, here are highlights of this one:
- It supports two different storages (more could be added): Filesystem and s3 protocol
- It is user friendly to install (pre-built binaries that can run standalone without any runtime dependencies)
- In addition to providing the usual set of commands to manage your backups, it also provides lower-level commands to interact with the gog api, which might be interesting for scripters
The main drawback the tool has at this point is that it doesn't have a user-friendly mechanism to authenticate. It relies on you copy-pasting values from your browser cookie once you are logged into gog. I plan to eventually address this issue, but it will not be immediate.
Cheers.
Related Projects:
A Windows GUI built on top of gogcli to manage your games with a user interface, implemented by Timboli:
https://github.com/Twombs/GOGcli-GUI
Keep in mind that the above tool by Timboli makes use of gogcli mostly to interact with the GOG.com api and to generate the initial manifest. After that, it goes on its separate way implementation-wise, so there is a significant difference in how the backup files are ultimately managed compared to the "storage" commands of this tool.
Release:
v0.2.0:
- Fixed bugs that occurred when the manifest has more than one game
- Added an optional argument to limit the number of games that are uploaded in a storage or copied from one storage to another (the former allows to upload your games across several iterations instead of all at once, the later allowed me to validate the functionality in a timely manner without constantly pinging the gog api)
- Added a "gogapi storage resume" command to resume storage upload or copy which is pretty much a pre-requisite to go along with the above argument
v0.3.0:
- Added an api command that retrieves checksum and size information on relative download url in addition to the file name (when possible)
- Added checksum and file size inclusion in generated manifest for the files for which gog provides the info
- In addition to the separate "storage validate" command, checksums and file sizes will also be validated against the manifest during file uploads
- Fixed an edge-case bug that would occur if an upload fails and you resume it
v0.4.0:
- All files in a generated manifest will have a verified size info derived from the GOG api and verified size will be computed at the game and manifest level
- When a checksum is not present (which will be the case when doing an initial upload from GOG, but not when copying between storages), zip archives will be verified for correctness
v0.5.0:
- Added "update generate" command to generate an update file (a list of game ids for new games and updated games as indicated by the gog api)
- Added optional json and file output for most gog-api commands
v0.5.1:
- Fixed a problem that would occur when generating large manifest due do http handles not getting properly closed
- Added resiliency against malformed xml coming from gog when getting files metadata
v0.6.0:
- Better title filtering for manifest generation
- Added manifest generation filter to generated manifest
- Added fault tolerance during manifest generation for dangling download files that are listed by the gog api, but no longer downloadable
v0.7.0:
- Fixed observed lingering issues with manifest generation
- Fixed potential problem with long downloads with download handles not closing
- Added command to get a summary of a manifest (useful when your manifest has 1000+ games)
- Added commands to retrieve the manifest and actions files from a storage (mostly a convenience thing)
v0.8.0:
- Fixed a lingering bug where dangling files (ie, empty files that gog needs to cleanup) would still be included in the manifest as incomplete file
- Added a directory argument for the "gog-api download-url-path" command
- Added some unit tests (about ~30% coverage in the manifest package)
- Added a "manifest diff" command (similar to "storage plan", but can be run between two manifest files without having a storage)
- Added optional argument to many commands to tolerate empty checksums if other file parameters like name, size and url match (would previously only support the paranoid approach of assuming the files are different if checksum is empty)
- Added a "manifest update" command to update a manifest from the gog api with an update file
- Added a "manifest search" command to search a manifest with the same search parameters used for manifest creation supported.
v0.9.0:
- Added version command to get the binary's version
- Fixed bug that would cause game file delete not to appear in the debug logs for the filesystem storage
- Fixed a bug that would cause checksums not to be properly computed for files larger than 64MB for the s3 storage
- More unit tests (over 50% coverage for the manifest package)
- Added a "storage update-actions" to update ongoing manifest upload with manifest updates from gog.com
- Added flags to order game downloads for the "storage apply" and "storage resume" commands
- Made game file deletion for all storages more robust by tolerating the game file being absent without terminating in error
v0.10.0:
- Added support for duplicate filenames using a "[]" delimiter
- Added optimisation to compact the same installer listed multiple times in multiple languages into a single entry (with all languages as an array)
- Improved logging structure to support several different log levels (although for now, only debug is really used)
- Added manifest migration command to migrate manifests generated with gogcli version 0.9.0 to the latest format
- Added storage repair command to fix any accidental divergences between the game files and the manifest
v0.11.0:
- Added retrying for most sdk calls (but not downloads)
v0.12.0:
- Added architecture documentation to better understand what the main commands do
- Added support for netscape-style cookie files
v0.13.0:
- Added support for retries when downloading files
- Improved logging: Debug logs are nicer and added what I felt is the right amount of info logs when downloading files
v0.14.0:
- Added download speed measurement for the standalone "gog-api download-url-path" command
v0.15.0:
- Reworked the storage commands in a way I felt was more intuitive (fewer commands). Also fully separated the application of a manifest to the storage from the execution of the underlying actions, allowing users to inspect what will be done before it gets done and opening the door for third-party tools and scripts to do custom modifications
v0.16.0:
- Added command to get a summary on an actions file
- Added a performance indicator to the standalone api command to download a game file
- Made manifest applies safer by default (no game deletion allowed unless specified via a command flag)
v0.17.0:
- Changed storage verification and repair commands to skip md5 checksum verification by default and added a command flag to enable it
- Changed the repair command to support using the manifest directly in the storage and made that the default case as it is the more common use-case.
v0.18.0:
- Added a fix for files with bad xml metadata with an optional flag
v0.19.0:
- Added game slug to manifest files and a migration path to add it to pre-existing manifests
- Made the flag to compensate for bad xml metadata the default
v0.20.0:
- Added progress logs for manifest generation/updates
- Added commands to resume manifest generation/updates
- Added more context information in generated (for manifest generation/update) warning files to indicate the action gogcli took (metadata workaround or skipping the file)
- Added bad metadata workaround to gog-api url-path-info command
- Fixed bug for the storage plan command (must have been broken for several releases)
- Fixed reported Windows newline format bug when reading user-generated cookie file
- Fixed quirk where errors would be writen in the manifest file when manifest generation/update halted with an error
For a list of my more immediate TODOs, see the issues: https://github.com/Magnitus-/gogcli/issues
Legacy TODO list (I'll stilll get around to a lot of the TODOs below, but not sure when):
Planned major improvements:
- Provide separate metadata commands to download games metadata (images, slugs, ideally video links and description as well)
- Provide a web dashboard to give an experience similar to your gog library page when viewing your backup
- Provide a nice login solution without compromising the ideology of the tool (self-contained binary, multi-platform, format that is friendly to manual tweaks for DIYers when certain mechanisms fail)
- Provide a "--id" flag to the "storage repair" command to save time and only repair individual games when it is known that only specific games are inconsistent
Planned minor improvements:
- Change gog-api owned-games command to retrieve all pages at once
- Add a custom duplicate delimiter parameter to be able to specify delimiters other than "[]"
- Add a "--closest-title" flag to the "manifest generate" and "manifest search" commands to return only a single game whose title is the closest match to the specified search term
Uncertain Improvements:
- Support other downloader storage formats via additional storage implementations
- Provide a GUI for most command line commands via a web dashboard
If you are already satisfied with another tool for your backup needs, I encourage you to keep using it (a backup tool is a backup tool).
If you have yet to make a decision or found other tools to be unsuitable for your needs, here are highlights of this one:
- It supports two different storages (more could be added): Filesystem and s3 protocol
- It is user friendly to install (pre-built binaries that can run standalone without any runtime dependencies)
- In addition to providing the usual set of commands to manage your backups, it also provides lower-level commands to interact with the gog api, which might be interesting for scripters
The main drawback the tool has at this point is that it doesn't have a user-friendly mechanism to authenticate. It relies on you copy-pasting values from your browser cookie once you are logged into gog. I plan to eventually address this issue, but it will not be immediate.
Cheers.
Related Projects:
A Windows GUI built on top of gogcli to manage your games with a user interface, implemented by Timboli:
https://github.com/Twombs/GOGcli-GUI
Keep in mind that the above tool by Timboli makes use of gogcli mostly to interact with the GOG.com api and to generate the initial manifest. After that, it goes on its separate way implementation-wise, so there is a significant difference in how the backup files are ultimately managed compared to the "storage" commands of this tool.
Release:
v0.2.0:
- Fixed bugs that occurred when the manifest has more than one game
- Added an optional argument to limit the number of games that are uploaded in a storage or copied from one storage to another (the former allows to upload your games across several iterations instead of all at once, the later allowed me to validate the functionality in a timely manner without constantly pinging the gog api)
- Added a "gogapi storage resume" command to resume storage upload or copy which is pretty much a pre-requisite to go along with the above argument
v0.3.0:
- Added an api command that retrieves checksum and size information on relative download url in addition to the file name (when possible)
- Added checksum and file size inclusion in generated manifest for the files for which gog provides the info
- In addition to the separate "storage validate" command, checksums and file sizes will also be validated against the manifest during file uploads
- Fixed an edge-case bug that would occur if an upload fails and you resume it
v0.4.0:
- All files in a generated manifest will have a verified size info derived from the GOG api and verified size will be computed at the game and manifest level
- When a checksum is not present (which will be the case when doing an initial upload from GOG, but not when copying between storages), zip archives will be verified for correctness
v0.5.0:
- Added "update generate" command to generate an update file (a list of game ids for new games and updated games as indicated by the gog api)
- Added optional json and file output for most gog-api commands
v0.5.1:
- Fixed a problem that would occur when generating large manifest due do http handles not getting properly closed
- Added resiliency against malformed xml coming from gog when getting files metadata
v0.6.0:
- Better title filtering for manifest generation
- Added manifest generation filter to generated manifest
- Added fault tolerance during manifest generation for dangling download files that are listed by the gog api, but no longer downloadable
v0.7.0:
- Fixed observed lingering issues with manifest generation
- Fixed potential problem with long downloads with download handles not closing
- Added command to get a summary of a manifest (useful when your manifest has 1000+ games)
- Added commands to retrieve the manifest and actions files from a storage (mostly a convenience thing)
v0.8.0:
- Fixed a lingering bug where dangling files (ie, empty files that gog needs to cleanup) would still be included in the manifest as incomplete file
- Added a directory argument for the "gog-api download-url-path" command
- Added some unit tests (about ~30% coverage in the manifest package)
- Added a "manifest diff" command (similar to "storage plan", but can be run between two manifest files without having a storage)
- Added optional argument to many commands to tolerate empty checksums if other file parameters like name, size and url match (would previously only support the paranoid approach of assuming the files are different if checksum is empty)
- Added a "manifest update" command to update a manifest from the gog api with an update file
- Added a "manifest search" command to search a manifest with the same search parameters used for manifest creation supported.
v0.9.0:
- Added version command to get the binary's version
- Fixed bug that would cause game file delete not to appear in the debug logs for the filesystem storage
- Fixed a bug that would cause checksums not to be properly computed for files larger than 64MB for the s3 storage
- More unit tests (over 50% coverage for the manifest package)
- Added a "storage update-actions" to update ongoing manifest upload with manifest updates from gog.com
- Added flags to order game downloads for the "storage apply" and "storage resume" commands
- Made game file deletion for all storages more robust by tolerating the game file being absent without terminating in error
v0.10.0:
- Added support for duplicate filenames using a "[]" delimiter
- Added optimisation to compact the same installer listed multiple times in multiple languages into a single entry (with all languages as an array)
- Improved logging structure to support several different log levels (although for now, only debug is really used)
- Added manifest migration command to migrate manifests generated with gogcli version 0.9.0 to the latest format
- Added storage repair command to fix any accidental divergences between the game files and the manifest
v0.11.0:
- Added retrying for most sdk calls (but not downloads)
v0.12.0:
- Added architecture documentation to better understand what the main commands do
- Added support for netscape-style cookie files
v0.13.0:
- Added support for retries when downloading files
- Improved logging: Debug logs are nicer and added what I felt is the right amount of info logs when downloading files
v0.14.0:
- Added download speed measurement for the standalone "gog-api download-url-path" command
v0.15.0:
- Reworked the storage commands in a way I felt was more intuitive (fewer commands). Also fully separated the application of a manifest to the storage from the execution of the underlying actions, allowing users to inspect what will be done before it gets done and opening the door for third-party tools and scripts to do custom modifications
v0.16.0:
- Added command to get a summary on an actions file
- Added a performance indicator to the standalone api command to download a game file
- Made manifest applies safer by default (no game deletion allowed unless specified via a command flag)
v0.17.0:
- Changed storage verification and repair commands to skip md5 checksum verification by default and added a command flag to enable it
- Changed the repair command to support using the manifest directly in the storage and made that the default case as it is the more common use-case.
v0.18.0:
- Added a fix for files with bad xml metadata with an optional flag
v0.19.0:
- Added game slug to manifest files and a migration path to add it to pre-existing manifests
- Made the flag to compensate for bad xml metadata the default
v0.20.0:
- Added progress logs for manifest generation/updates
- Added commands to resume manifest generation/updates
- Added more context information in generated (for manifest generation/update) warning files to indicate the action gogcli took (metadata workaround or skipping the file)
- Added bad metadata workaround to gog-api url-path-info command
- Fixed bug for the storage plan command (must have been broken for several releases)
- Fixed reported Windows newline format bug when reading user-generated cookie file
- Fixed quirk where errors would be writen in the manifest file when manifest generation/update halted with an error
For a list of my more immediate TODOs, see the issues: https://github.com/Magnitus-/gogcli/issues
Legacy TODO list (I'll stilll get around to a lot of the TODOs below, but not sure when):
Planned major improvements:
- Provide separate metadata commands to download games metadata (images, slugs, ideally video links and description as well)
- Provide a web dashboard to give an experience similar to your gog library page when viewing your backup
- Provide a nice login solution without compromising the ideology of the tool (self-contained binary, multi-platform, format that is friendly to manual tweaks for DIYers when certain mechanisms fail)
- Provide a "--id" flag to the "storage repair" command to save time and only repair individual games when it is known that only specific games are inconsistent
Planned minor improvements:
- Change gog-api owned-games command to retrieve all pages at once
- Add a custom duplicate delimiter parameter to be able to specify delimiters other than "[]"
- Add a "--closest-title" flag to the "manifest generate" and "manifest search" commands to return only a single game whose title is the closest match to the specified search term
Uncertain Improvements:
- Support other downloader storage formats via additional storage implementations
- Provide a GUI for most command line commands via a web dashboard
Post edited August 24, 2022 by Magnitus