- scan.rs: recursive walk of Pictures/DCIM (GALLERY_SCAN_DIRS override), image-ext detection, mtime/size capture, no symlink-dir following - db.rs: rusqlite(bundled) store; incremental apply (insert/update/delete) keyed on path with mtime/size change detection; derived columns reset on change; Android DB path in Android/data/<pkg>/files (EXTERNAL_DATA_DIR is unset in this NativeActivity setup) - lib.rs: start_scan() background thread -> invoke_from_event_loop -> VecModel + status line; called from desktop and Android entry points - main.slint: ListView of paths (M1), status line with scan stats - main.rs: fix desktop bin for 1.18.1 (no slint::Result; ComponentHandle) - build.sh: export NDK clang CC_/CXX_/AR_ per target (bundled sqlite) - tests: 5k-file scan < 2s, incremental apply, roundtrip Verified on emulator: 5002 files in 153-226 ms; relaunch 0+ 0~ 0-; touch -> 1~, delete -> 1-.
27 lines
933 B
Markdown
27 lines
933 B
Markdown
# gallery
|
||
|
||
A high-performance image gallery for Android (primary), Linux and macOS —
|
||
Rust + [Slint](https://slint.dev) 1.18.
|
||
|
||
**Status: M1 (metadata scan + DB) done.** See **[HANDOFF.md](HANDOFF.md)** —
|
||
the development hand-off with the full plan: architecture, thumbnail
|
||
pipeline, milestones M1–M7, Slint gotchas, permission flow, and performance
|
||
targets. Next: M2 (thumbnail engine).
|
||
|
||
## Build
|
||
|
||
```bash
|
||
./scripts/build.sh debug # debug x86_64 APK + install on emulator
|
||
./scripts/build.sh # release x86_64 (emulator)
|
||
./scripts/build.sh aarch64 # release aarch64 (device)
|
||
cargo run # desktop (Linux needs libfontconfig1 + pkg-config)
|
||
```
|
||
|
||
Requires: Rust (rustup), `cargo-apk2`, Android SDK + NDK 27 (see HANDOFF.md §3
|
||
for exact paths/env).
|
||
|
||
## License
|
||
|
||
GPL-3.0 (see [LICENSE](LICENSE)). Built on Slint, used under the Slint
|
||
royalty-free license for proprietary apps (see HANDOFF.md §10.4).
|