M5: storage usage, ZIP/TAR/GZ archives with zip-slip guard, thumbnails, viewers + 26 tests

This commit is contained in:
2026-10-14 16:29:08 +02:00
parent 2c86f3dc67
commit 3e39fc9b86
23 changed files with 1302 additions and 35 deletions
+12
View File
@@ -12,6 +12,18 @@ upload needs a **higher `versionCode`** than every previous upload.
### Added
- **M5 — analysis, archives and viewers.** `domain/UsageAnalysis` rolls up recursive folder
sizes and finds the largest files below a folder, which the new storage-usage screen
shows as a size and a share bar per row. `domain/ArchiveEngine` creates ZIP archives and
extracts ZIP, TAR, TAR.GZ, GZ, BZ2 and XZ using `java.util.zip` and Commons Compress —
all pure Java, so the app still ships no native code; RAR and 7z are recognised and
refused with a clear message rather than half-supported. Every archive entry name is
passed through `core/ArchivePath` before it becomes a path, so a crafted `../` entry
cannot write outside the destination. The browser gains Coil thumbnails in the list and
grid, a built-in image viewer and text editor, and compress/extract actions. 26 new JVM
tests (141 total), including a zip-slip archive that is refused while the same archive's
safe entry still extracts.
- **M4 — the browser UI.** The app is now usable end to end. `StorageLocation` (with a
real `StorageProvider` and a fake for tests) decides which backend is in effect;
`BrowserViewModel` owns navigation, sorting, hidden files, list/grid, search, selection