Commit Graph

445 Commits

Author SHA1 Message Date
Sude
b520eb8f2f Speedup cache update
Don't override Globals::globalConfig.sIgnoreDLCCountRegex in Downloader::updateCache()
Changed how getting game details JSON is handled in Downloader::getGameDetailsThread
2023-03-27 22:20:09 +03:00
Sude
3f6b2315eb Fix getting DLC names 2023-03-27 22:09:13 +03:00
Sude
a81d63b375 Fix cookies getting overwritten
Sometimes curl handles in downloader and galaxy api class could overwrite cookies with blank cookies
Fixed this by not setting CURLOPT_COOKIEJAR by default and only using it for curl handles in website class
2023-03-24 16:08:01 +02:00
Sude
20cce5abbb Make --list able to list tags
Removed --list-tags option
Also changed the default option name "no_details" to "games"
2023-03-14 22:24:52 +02:00
Sude
9e49b6fa20 Always use array value when listing game details in JSON format 2023-03-14 09:57:10 +02:00
Sude
c9198d672d Added option to list game details as JSON
Removed --list-details option
Added --list-format to select a format that --list uses

"no_details" is the same as --list previously and the default value
"details" is the same as --list-details was previously
"json" is JSON formatted output
2023-03-13 22:25:33 +02:00
Sude
dcfd368fa0 Be more clear which url to copy & paste during login 2023-03-12 15:57:53 +02:00
Sude
c26e28a564 Refactor login code
Users can now get around reCATPCHA without the downloader being built with GUI enabled by using their browser to login
2023-03-12 15:16:49 +02:00
Sude
78c8f43576 Don't use depracated libcurl options
Use CURLINFO_SPEED_DOWNLOAD_T instead of CURLINFO_SPEED_DOWNLOAD
Use CURLOPT_UPLOAD instead of CURLOPT_PUT
2022-12-28 00:46:29 +02:00
Sude
e5d347d5b2 Add option to set message verbosity level
Replaced --verbose option with --verbosity to better control message verbosity
2022-12-16 13:35:37 +02:00
Gordon
ba4d04e4c8 Extended global flag bSizeOnly into status text generation 2022-11-18 18:17:16 +00:00
Sude
211a0a80b3 Galaxy: Add initial support for ignoring DLCs
Adds support to ignore all DLCs when installing game with --galaxy-install
2022-10-01 20:31:04 +03:00
Sude
626aa681c9 Galaxy: Fix MojoSetup hack for files that have missing XML data
Try to get file size using Content-Length header if XML data is missing
2022-10-01 20:28:03 +03:00
loki-47-6F-64
b778370a52 Fix rare error for logging in 2022-08-09 11:07:08 +02:00
loki-47-6F-64
aba2c3c9c5 Handle default locations 2022-08-08 14:20:52 +02:00
loki-47-6F-64
f8852e9ad5 Add the abillity to delete cloud saves 2022-08-04 23:55:18 +02:00
loki-47-6F-64
6870330eab Add the abillity to force upload/download of cloud saves even if up-to-date 2022-08-04 23:27:04 +02:00
loki-47-6F-64
4ff846e5cd Add a whitelist and blacklist for cloud saves 2022-08-04 23:04:37 +02:00
loki-47-6F-64
5db36f6b7f show shorter path for cloud saves 2022-08-04 20:44:05 +02:00
loki-47-6F-64
0b8a762953 Don't skip incomplete download coud saves 2022-08-04 20:18:14 +02:00
loki-47-6F-64
33ec0434aa Upload local saves to the cloud 2022-08-04 16:57:15 +02:00
loki-47-6F-64
829d263bc7 Show local cloud save files 2022-08-03 14:53:45 +02:00
loki-47-6F-64
c97a828aa7 Download cloud save files 2022-08-02 18:36:31 +02:00
loki-47-6F-64
c4f604aec0 Show cloud save paths 2022-07-31 14:11:32 +02:00
loki-47-6F-64
8e046e977d Rudimentary support for showing location of local saves for cloud saves 2022-07-28 21:11:44 +02:00
Sude
983592d09e Reduce the amount of request to cdn with --galaxy-install
Should fix the issue of getting temporarily blocked by GOG cdn when installing game with lots of small files
2022-02-17 10:30:38 +02:00
Sude
30f698867c Fix getting XML data
GOG changed something and now the server sometimes responds with gzip compressed XML data
Set CURLOPT_ACCEPT_ENCODING to enable decoding of a response when Content-Encoding header is received
Moved zlib decompression from GalaxyAPI::getResponse to GalaxyAPI::getResponseJson and made it automatic when detecting zlib header
2022-02-16 14:50:19 +02:00
Sude
ab3a2019e4 Fix --download-file option not showing progress bar 2021-11-20 12:02:42 +02:00
Sude
695916af4c Add support for tags
Adds basic support for filtering games using tags that the user can set on account page
Add option --list-tags to list all the tags user has assigned
Add option --tag to filter games using the tags
2021-11-09 14:59:42 +02:00
Dmitry Khalanskiy
554de90f46 Add a flag to avoid hash checks 2021-09-12 10:25:37 +03:00
Sude
209d83143e Skip files that are listed by API for information purposes only
For some games the API shows files with "count" and "total_size" of zero meaning that they are not available to download
These are listed on account page for information purpose only (for example to show DLCs included in the installer)
2021-08-13 15:22:48 +03:00
Sude
4e09d6357e Add directory template %gamename_firstletter%
Feature request by "coffeecup" on GOG forums
Useful for sorting big libraries with --subdir-game option
Takes the first letter from %gamename%
If %gamename% begins with a number then 0 (zero) is used instead
2021-08-06 11:46:07 +03:00
Sude
d307d22195 Check for invalid path in GalaxyAPI::fileJsonNodeToGameFileVector
Skip the file if we get invalid path for some reason.
This should help with issue #200 (Crashes when downloading "secure")
2021-08-06 11:25:54 +03:00
Sude
584fef3988 Use duplicate handler for extras
Makes downloader use duplicate handler for extras
This should help to avoid a race condition mentioned in issue #200 (Crashes when downloading "secure") because the downloader no longer tries to download the same file from multiple threads
2021-08-06 11:23:02 +03:00
Sude
eef1d4d15e Make failure to set timestamp not critical
Print warning message about the error but continue instead of dying
2021-04-06 18:16:35 +03:00
Sude
04592d512a Don't change globalConfig.bLogin value in Downloader::isLoggedIn 2021-03-31 15:39:18 +03:00
Sude
36181afb4d Fix return value of Downloader::login
https://github.com/Sude-/lgogdownloader/issues/194
2021-03-30 16:22:52 +03:00
Ismo Toijala
3bc9efef6c Retry download also on CURLE_SSL_CONNECT_ERROR
Sometimes the download fails with CURLE_SSL_CONNECT_ERROR and retrying
is successful.
Sometimes multiple retries are needed, but that is already handled by
the existing code.
2020-12-30 11:36:38 +02:00
Timotej Lazar
649fa40656 Improve recaptcha detection
Recaptcha form can be served from different domains, so look for the
form class instead.
2020-11-29 10:37:44 +01:00
Timotej Lazar
8fe1fc4118 Fix getting redirect URL from curl
The char* set by curl_easy_getinfo may not be valid after the next
curl_easy_perform, so copy it to a std::string instead.
2020-11-28 22:31:54 +01:00
Sude
fe7fad300b Show installer and patch version when listing game details 2020-11-27 21:46:12 +02:00
Sude
26315b23b8 Add retry support to --galaxy-install
Added retry support to --galaxy-install
Changed some retry conditions
Show reason for retry attempts
Added some Curl related helper functions to Util
2020-09-26 22:09:38 +03:00
Sude
17bebfc374 Merge branch 'changelog' of https://github.com/mdhowle/lgogdownloader into master 2020-09-26 21:52:31 +03:00
Matthew Howle
5cef659e98
Adjust wording to be more precise
The variable name "current_changelog" was ambiguous. It could apply to both the newly obtained changelog from GOG and the previously saved changelog on the filesystem.
2020-09-20 00:33:56 -04:00
Matthew Howle
80b5d41eb6 Overwrite changelog only when modified 2020-07-08 19:11:27 -04:00
grepwood@sucs.org
9772e66894 Confirmed working headless operation. 2020-04-17 19:24:28 +02:00
grepwood@sucs.org
6ba2a7d486 When run in non-TTY, attempt to recycle cookies and tokens if they exist. 2020-04-17 14:55:43 +02:00
Sude
4997a45597 Check that product id selection was successful in Downloader::downloadFileWithId
Fixes possible issue where downloader tries to get product info even though it failed to get valid product id beforehand
2020-04-08 09:41:21 +03:00
Sude
d6c226c5d7 Wait between retries if --wait option is used 2020-04-08 09:22:58 +03:00
Sude
42b4d784f1 Better retry condition for downloads 2020-04-08 09:06:39 +03:00
Sude
aa29adf237 Fix return code for Downloader::downloadFileWithId
I accidentally reversed the return code for Downloader::downloadFileWithId when rewriting it to use Galaxy API in a884e8c0a3
This changes the success return code back to 0 like it was previously.
2020-04-07 21:33:04 +03:00
Sude
87d6cd4f69 Show HTTP response code in status message 2020-03-14 15:58:21 +02:00
Sude
985696f6da Automatically select appropriate size unit for total remaining
Makes the status line much more readable
2020-03-14 15:36:27 +02:00
Sude
6522247be9 Fix filenames with ampersand
Fixes issue with filenames containing ampersand.
Also fixes issue with --download-file not assigning proper filename automatically.

New method detects the path more accurately when encountering the currently used url format but in case of unknown url format it fallbacks to the old method.
2020-02-28 11:57:08 +02:00
Sude
d386bdec2e Galaxy: Improve split file support in MojoSetup hack
Read base file paths from "data/noarch/support/split_files".
This should avoid issues with potential name conflicts caused by regex detection.
2020-02-19 21:20:02 +02:00
Sude
8caca0e62a Galaxy: Add split file support to MojoSetup hack 2020-02-19 13:49:06 +02:00
Sude
0a7648d80b Use separate thread count option for info threads
Adds --info-threads option to set number of threads the downloader uses for getting product info
2020-02-17 19:33:15 +02:00
Sude
56a06133d2 Override global config values in Downloader::checkOrphans
Previously orphan checking was limited to user selected language and platform values.
This meant that by default only English language and Windows+Linux was selected.
Overriding the global config values and clearing previously got details before starting the orphan check makes --check-orphans work as intended.
2020-02-17 19:24:04 +02:00
Sude
8f69f44bb1 Check for HTTP response code 416 in Downloader::repairFile 2020-02-17 19:18:14 +02:00
Sude
42c71884a2 Remove old GOG downloader API
Removed all remaining code related to old API.
Removed dead or commented out code that I noticed while checking the code for references to old API.
2019-11-14 18:25:12 +02:00
Sude
a884e8c0a3 Make --download-file option use Galaxy API 2019-11-14 17:52:04 +02:00
Sude
60bd888788 Don't exit when failing to get valid game details json 2019-10-24 11:33:13 +03:00
Sude
30cdd41d90 Make Downloader::getRemoteFileHash use Galaxy API
There was no reason to use the old downloader API for this because we can get the same data using Galaxy API.
This also means that Downloader::downloadFileWithId is now the only function using the old API.
2019-10-24 11:20:52 +03:00
Sude
367c80293a Retry on CURLE_RECV_ERROR 2019-10-24 10:50:55 +03:00
Sude
00df6d6099 Save xml data before skipping complete file
This changes the behavior so that we save XML data before skipping complete file.
Previously we skipped to next file right after determining that the file we were attempting to download was already complete.
This caused issues when user changed XML directory with --xml-directory option after already downloading some files.
The new XML directory would never have XML data for complete files but because we skipped before saving XML data.
2019-09-17 11:06:06 +03:00
Sude
50972aaafe GUI: Remove usage of QDesktopWidget
QDesktopWidget is obsolete and some of its methods don't work correctly.
Remove all code related to QDesktopWidget.
2019-09-04 12:57:29 +03:00
Sude
65961de041 Galaxy: Automatically delete old files when updating or downgrading
Determine id of old build and then compare file list to selected build.
Automatically delete files that have been removed between the builds.
2019-06-07 14:51:05 +03:00
Sude
bcccec416f Galaxy: Add option to delete orphaned files 2019-06-06 20:00:38 +03:00
Sude
86bb528c39 Add regex support to --galaxy-install and --galaxy-show-builds
Check if option value is regex and then ask user to select one product from a list of products matching the regex.
2019-04-22 18:14:53 +03:00
Sude
8540955af8 Reverse previous behavior of GUI login being enabled by default
Adds option --enable-login-gui which is used to enable GUI login when reCAPTCHA is encountered on login form.
This reverses the previous behavior added in ea0ec2a9bd and removes --disable-login-gui option.
It's better to have GUI login disabled by default just in case user is running lgogdownloader through SSH without X forwarding.
Because user has to enable login GUI first there won't be any unexpected behavior.
2019-04-22 18:01:19 +03:00
Sude
deb29802d2 GUI: Add autofill
Make login GUI automatically fill email and password fields
Users no longer need to type email and password again just because normal login method failed due to reCAPTCHA and GUI was launched
2019-04-22 17:39:10 +03:00
Sude
ea0ec2a9bd Add option to disable GUI login
Adds option --disable-login-gui which is used to disable GUI login when reCAPTCHA is encountered on login form.
Useful when downloader is compiled with GUI support but user is using it through SSH without X forwarding.
2019-03-01 23:12:04 +02:00
Sude
a8d9d466c9 Make progress info show estimated total remaining size and time 2019-03-01 14:09:52 +02:00
Sude
1e8ebbfd94 Add GUI login
Use QtWebEngine for getting cookies and authorization code if login form contains recaptcha and downloader is compiled with -DUSE_QT_GUI=ON
2019-03-01 10:05:16 +02:00
nathanel23
f65599e216 Fix for memory corruption/crash related to rhash
This patch fixes issues with some calls to the rhash C library that
cause subtle memory corruptions. There are two main issues that this
patch addresses:

1) The library init function is called multiple times in various places
within in the Util class. This is not necessary and may cause issues
if the initialization is repeated simultaneously in multiple threads.
Therefore the call was moved to the beginning of the main() function.

2) There is not enough space in the output buffers to store the
terminating NUL character of the hex-formatted hashes. The print
function from the rhash library writes a regular C string to
the output buffer and expects enough space to include the end
marker.

Depending on the memory layout generated by the compiler, this results
in one byte of the stack to be overwritten, which might lead to random
issues that are hard to find. On AArch64 (ARM) with GCC 6.3 the call to
the rhash_print() function happens to destroy the lower byte of the
frame pointer and causes a crash due to an invalid free() operation some
time after the Util::createXML function returned.
2019-01-06 01:06:23 +01:00
Sude
9bd416e3b0 Add support for retry and wait to Galaxy API and downloader API 2018-12-22 11:35:17 +02:00
Sude
df628b2a59 Add option to include hidden products
Adds option --include-hidden-products that allows user to list and download products that have been set hidden in account page.
2018-12-20 13:10:27 +02:00
Sude
f559c6c014 Fix unclosed file handle in Util::createXML
File handle for input file was not closed in case of errors.
Added fclose() to all error cases.
2018-12-20 11:10:42 +02:00
Sude
8683fe0a4e Galaxy: Fix segfault when getting download url fails 2018-09-30 20:05:06 +03:00
Sude
ab84d6f827 Galaxy: Add option to set CDN priority
--galaxy-cdn-priority option allows to set priorities for content delivery networks
2018-09-12 20:07:59 +03:00
Sude
8e55b81ca1 Galaxy: Extend subdir option to work with MojoSetup hack
Extends subdir option introduced in 1b3b04b28c to work with Downloader::galaxyInstallGame_MojoSetupHack
2018-09-12 16:02:34 +03:00
Sude
1b3b04b28c Galaxy: Add option to set subdirectory for installation
New option --subdir-galaxy-install allows user to set installation subdirectory when using --galaxy-install
2018-09-12 15:18:54 +03:00
Sude
6f44277d4c Galaxy: Small optimization to galaxyAPI::getFilteredDepotItemsVectorFromJson
Check if product id exists once instead of checking it again for each item
2018-09-05 18:21:35 +03:00
Sude
35b178e674 Galaxy: Add support for downloading dependencies
Adds support for downloading dependencies for a game
Added --galaxy-no-dependencies option to disable downloading dependencies during --galaxy-install
2018-09-05 17:41:43 +03:00
Sude
9804215de8 Add missing include 2018-08-01 11:40:58 +03:00
Sude
8e9c094929 Replace --update-check option and remove --game aliases
Replace --update-check option with --updated and --notifications options
--updated restricts downloader to operate only on games that have update flag set in account page
--notifications shows the number of new forum replies, updates games, unread chat messages and pending friend requests
--clear-update-flags clears update notification flags for all games

Remove aliases for --game option
"free" could no longer be used as originally intended and "all" was unnecessary because leaving regex empty has the same effect
2018-07-21 23:59:08 +03:00
Sude
3b733fcb4b Galaxy: Set timestamp for downloaded file 2018-05-29 11:23:51 +03:00
Sude
dd5714690c Galaxy: Use regex for language detection in --galaxy-install
Some builds use different language codes.
It looks like all of them are in format Language-Country/Region.
Added these new codes to regex in GlobalConstants::LANGUAGES.
Use regular expression to detect the language instead of language code.
2018-05-29 09:56:38 +03:00
Sude
463a9c386e Galaxy: Add hack for installing Linux games
Try to use Linux installers as replacement for Galaxy repository.
Linux installers use MojoSetup which means that the installers are Zip files that have bash script and installer binary prepended.
We can get zip file entries from zip central directory and then split the game installer to chunks based on those file entries.
Therefore we can download individual files from the installer.
2018-05-29 08:56:29 +03:00
Sude
7373d357aa Fix -Wcatch-value for GCC 8 2018-05-14 12:29:51 +03:00
Sude
8ca7722853 Skip complete files instead of trying to resume 2018-05-14 12:22:05 +03:00
Sude
ef1a344610 Remove cover download support 2018-05-14 11:12:10 +03:00
Sude
d0177031e6 Use std::string instead of JSONCPP_STRING 2018-02-15 19:42:10 +02:00
Sude
553c6dce1c Galaxy: Add support for generation 1 builds to --galaxy-show-builds 2018-02-12 19:03:56 +02:00
Sude
40cbb5fccb Galaxy: Show generation in --galaxy-show-builds output 2018-02-12 18:51:05 +02:00
Sude
e9ac6d072f Galaxy: Make --galaxy-install multithreaded 2018-02-12 18:46:17 +02:00
Sude
b384dfd0c1 Remove unused variable 2018-01-11 10:00:11 +02:00
Hans Philipp Annen
5bf6a9ed97 Remove usage of obsolete Json::StyledStreamWriter class. 2017-12-20 18:17:36 +01:00
Hans Philipp Annen
76d8548fc9 Remove usage of obolete Json::Reader class. 2017-12-20 18:12:59 +01:00
Sude
90dcaf0106 Add options to set low speed timeout values for libcurl 2017-11-08 15:20:03 +02:00