Feature/streamed install prototype #27

Merged
ddidderr merged 15 commits from feature/streamed-install-prototype into main 2026-06-11 08:52:33 +02:00
Showing only changes of commit c313f7c9ae - Show all commits
+13 -10
View File
@@ -13,22 +13,25 @@ product-ready.
and hands fetched file details to `StreamInstallGame` instead of the normal and hands fetched file details to `StreamInstallGame` instead of the normal
download command. download command.
2. **Replace per-file `unrar p` with a final archive provider** 2. **Done — Replace per-file `unrar p` with a final archive provider**
The prototype provider is intentionally simple: `unrar lt`, then `unrar p` The shared external `unrar` stream provider now runs `unrar lt` once for the
per file. Good for non-solid archives, bad for solid archives. Final shape archive metadata and one sequential `unrar p` pass per archive for payload
should be a one-pass provider with real entry boundaries, likely via libunrar bytes. It frames directories, file starts, file chunks, and file ends from
or a purpose-built wrapper. the technical listing, so CLI and GUI callers use one purpose-built provider
instead of a per-file extraction loop.
3. **Handle solid archives deliberately** 3. **Handle solid archives deliberately**
Add archive inspection that decides: The provider exposes the RAR `solid` flag in `ArchiveBegin`; the remaining
work is to make that flag a tested policy decision instead of an incidental
stream attribute. Add archive inspection that decides:
- non-solid: per-file streaming is fine - non-solid: current one-pass streaming is fine
- solid: one sequential archive pass only - solid: prove and enforce one sequential archive pass only
This is the big architectural fork we discussed, and the prototypes This is the big architectural fork we discussed: keep non-solid and solid
provider is the thing to swap. archive handling explicit in the provider contract and scenario coverage.
4. **Decide the integrity model** 4. **Decide the integrity model**