Otherwise this chain of events can happen:
- You already have a (partial) file downloaded
- You start the download, and HTTP fails
- This resets the download progress to the current size of the file
- The TCP download starts at a very large value (UINT32_MAX - filesize)
It now resets to 0% done when any negative value is being given.
As added bonus, we no longer have to query how much was already
downloaded.
With a thread, we can just run curl_easy_perform() and let CURL
and threads handle the blocking part.
With async solution there are too many things to keep track of,
and it makes "when to update the GUI" tricky. By using a thread
that all gets a lot simpler, as the game-thread and download-thread
run side-by-side.
This is similar to how the WinHttp backend already works.
swedish: 3 changes by joeax910
italian: 1 change by Rivarossi
russian: 1 change by Ln-Wolf
ukrainian: 1 change by serg-bloim
latvian: 7 changes by lexuslatvia
This requires the use of WinHTTP (for Windows) or libcurl (for all
others except Emscripten). Emscripten does not support http(s)
calls currently.
On Linux it requires ca-certificates to be installed, so the HTTPS
certificate can be validated. It is really likely this is installed
on any modern machine, as most connections these days are HTTPS.
(On MacOS and Windows the certificate store is filled by default)
Reminder: in case the http(s):// connection cannot be established,
OpenTTD falls back to a custom TCP-based connection to fetch the
content from the content-service. Emscripten will always do this.
english (au): 2 changes by krysclarke
estonian: 107 changes by RM87
romanian: 2 changes by bnegrut
finnish: 8 changes by hpiirai
dutch: 4 changes by Afoklala
portuguese: 2 changes by azulcosta
polish: 2 changes by pAter-exe
english (us): 2 changes by 2TallTyler
estonian: 110 changes by RM87
czech: 5 changes by jacobczsk
italian: 11 changes by Rivarossi
russian: 2 changes by Ln-Wolf
english (au): 1 change by krysclarke
english (us): 1 change by 2TallTyler
vietnamese: 2 changes by KhoiCanDev
luxembourgish: 5 changes by phreeze83
catalan: 3 changes by J0anJosep
french: 11 changes by ZarTek-Creole, 5 changes by glx22
english (au): 4 changes by krysclarke
swedish: 16 changes by joeax910
english (us): 2 changes by 2TallTyler
chinese (simplified): 2 changes by XiaoJi-Game
hebrew: 3 changes by Boltyansky
romanian: 10 changes by kneekoo
russian: 5 changes by Ln-Wolf
portuguese: 2 changes by azulcosta
polish: 4 changes by pAter-exe
And set the minimum maximum loan to the value of loan interval, so there is
always an amount of money to lend. Compared to being allowed to set max loan
to 0 and never be allowed to lend any money.
This adds the Exxx and Fxxx blocks to the usable range for NewGRF
local strings. TTDPatch uses these ranges for internal strings, but as
we don't support any of them anyway, it is "free" real estate for us.