mirror of
https://github.com/Crosstalk-Solutions/project-nomad.git
synced 2026-10-17 05:14:19 +02:00
doResumableDownload already implements resume - stats the .tmp, sends a Range header, handles a server that ignores it. The code was unreachable for ZIMs because every dispatch site passed forceNew: true, which skips the partial-file check and opens the stream with 'w' instead of 'a', so an interrupted 12.5 GB Wikipedia download truncated and restarted at byte 0. Maps already do this correctly (map_service.ts:681, "so retries resume partial downloads"); ZIMs never got the same treatment. Worse in combination with attempts: 10 - every retry also restarted from zero, so a flaky connection re-downloaded the whole file up to ten times. Drop forceNew from the content-download dispatch sites (it already defaults to false) and add the guard that enabling resume requires: a .tmp larger than the file now on the server cannot be a prefix of it, because openZIM re-publishes builds under the same name. Resuming would request a range past the end, 416 on every attempt, and never delete the .tmp - so the download could never recover on its own. Verified on a test appliance: a 470 MB partial survived a container restart and continued rather than truncating, and a planted oversized .tmp was discarded with the file then downloading to its exact size. Refs #1201 |
||
|---|---|---|
| .. | ||
| app | ||
| bin | ||
| commands | ||
| config | ||
| constants | ||
| database | ||
| docs | ||
| inertia | ||
| providers | ||
| public | ||
| resources | ||
| scripts | ||
| start | ||
| tests | ||
| types | ||
| util | ||
| views | ||
| .editorconfig | ||
| .env.example | ||
| ace.js | ||
| adonisrc.ts | ||
| eslint.config.js | ||
| package-lock.json | ||
| package.json | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vite.config.ts | ||