Files
mtgc/.gitignore
Garrett Mills d3154738d2 Add Android support via Tauri
The Rust core was already portable (caller-provided db paths, rustls rather
than openssl) and the shell already had the mobile entry point, so this is
mostly toolchain, provisioning, and platform-gating.

Toolchain:
- scripts/android-setup.sh installs what Android Studio doesn't: SDK
  cmdline-tools, a pinned stable NDK, and the Rust Android targets. The NDK is
  pinned rather than "latest" because sdkmanager's newest is often a beta
  (30.0.15729638 is r30-beta2) -- not something to compile SQLite with. Prefers
  Android Studio's bundled JDK 21, since Gradle rejects newer JDKs.
- Track src-tauri/gen/android (excluding build output): AndroidManifest.xml is
  hand-edited and Android permissions have no tauri.conf.json equivalent.
- vite: serve on TAURI_DEV_HOST so a device/emulator can reach the dev server.

Card data: downloading streams ~740MB to build a ~73MB db, which is rough on a
phone. Add import_reference_db to adopt a desktop-built file instead, validated
by db::inspect_reference_db first so picking the wrong file is a clean error
rather than a broken install. Installs via copy-then-rename so an interrupted
copy can't leave a partial db.

Ingest hardening (helps desktop too):
- Give ureq connect/read timeouts. Cancellation is only polled per parsed
  record, so a stalled socket previously hung forever with no way to cancel.
- Drop the remove_file before rename; POSIX rename already replaces atomically,
  and the delete-first window could leave no reference.db at all if the process
  was killed -- much likelier on Android.

UI: hide Open/New Library on mobile (scoped storage has no arbitrary-path
equivalent, and SQLite can't open a content:// URI), reported via a cfg!(mobile)
flag on Status rather than user-agent sniffing. Use 100dvh so the soft keyboard
doesn't break the shell.

Verified: 70/70 core tests, desktop build clean, and the aarch64 APK builds
(bundled SQLite C and ring both cross-compile under NDK 28). Not yet run on a
device.
2026-08-02 13:16:34 -05:00

31 lines
634 B
Plaintext

# Rust / Cargo
/target
**/*.rs.bk
# Node / frontend
node_modules/
/dist/
# Tauri generated. `gen/android` is deliberately tracked: it holds the Gradle
# project and AndroidManifest.xml, which we hand-edit (permissions have no
# tauri.conf.json equivalent) and must not lose to a re-init.
/src-tauri/gen/*
!/src-tauri/gen/android
/src-tauri/gen/android/.gradle/
/src-tauri/gen/android/build/
/src-tauri/gen/android/app/build/
/src-tauri/gen/android/local.properties
# Local databases (reference.db is rebuildable; library.db is your synced data)
*.db
*.sqlite
*.db-shm
*.db-wal
# OS / editor
.DS_Store
Thumbs.db
.idea/
*.swp
*.swo