Commit Graph

9 Commits

Author SHA1 Message Date
Kyle Bolen
ff812a9550 Tighten ExifFilter: exclude Screen Recordings, Videocaptures, Resize folders 2026-07-28 04:25:25 +00:00
Kyle Bolen
af36ae5663 Fix Android photo discovery: dynamically scan all DCIM subdirs
Instead of hardcoding /sdcard/DCIM/Camera, list all subdirectories
under /sdcard/DCIM and /storage/emulated/0/DCIM dynamically. This
handles Samsung, Pixel, OnePlus and other vendors that use different
DCIM subfolder names. Falls back to hardcoded list if discovery finds
nothing.
2026-07-28 04:22:23 +00:00
Kyle Bolen
5b17d28f66 docs: document PTPCamera + AMPDeviceDiscoveryAgent conflict and fix 2026-07-28 03:56:54 +00:00
Kyle Bolen
35b98e1857 Auto-increment folder name if staging folder already exists
StagingPath.uniqueFolderName() checks whether the base folder name is
already taken and appends _2, _3, etc. until a free name is found.
AppState.prepareImport() now uses this so the ImportScreen always
pre-fills a unique folder name.
2026-07-28 03:48:30 +00:00
Kyle Bolen
05897e6d62 Add native macOS folder picker for staging directory
Uses AWT FileDialog with apple.awt.fileDialogForDirectories=true to open
the native macOS folder chooser. Falls back gracefully (dialog cancelled)
with no change to the text field.
2026-07-28 03:47:31 +00:00
Kyle Bolen
105077baba docs: clarify Android USB mode selection (Transferring files, not PTP) 2026-07-28 03:44:19 +00:00
Kyle Bolen
bbc764dbcb Fix Gradle toolchain resolution on macOS/Corretto
Replace jvmToolchain(17) with jvmToolchain(21) + explicit kotlinOptions
jvmTarget=17 + java sourceCompatibility/targetCompatibility. Avoids
toolchain provisioning errors when the JDK is present but not registered
via the Gradle toolchain API.
2026-07-28 03:38:02 +00:00
Kyle Bolen
c4608e9c0e Fix compile errors from initial build
- Main.kt: move ConfigStore/AppState outside application {} scope (remember
  is not valid outside a composable)
- IosConnector: split runGphoto2/runGphoto2InDir to avoid named+positional
  vararg mixing (Kotlin does not allow this)
- ConnectScreen: fix SmartPhone -> Smartphone icon name
- ConnectScreen/BrowseScreen/ImportScreen/SettingsScreen: update deprecated
  Icons.Default.ArrowBack to Icons.AutoMirrored.Filled.ArrowBack
- AndroidConnector: remove unused variable assignment in remoteChecksum
- ExifFilter: replace return@filter labels with private helper function to
  eliminate ambiguous label warnings
2026-07-28 03:09:28 +00:00
Kyle Bolen
145b7bc955 Initial commit: PhotoPhetch v1.0.0
Kotlin/Compose Multiplatform desktop app for importing photos from
phones into PhotoPhile staging directory.

Features:
- Android support via ADB subprocess
- iPhone support via gphoto2 subprocess
- Smart filtering: excludes screenshots, received images, Live Photo MOVs
- HEIC -> JPEG conversion via macOS sips (built-in)
- SHA-256 verification of every copied file
- Safe delete with explicit confirmation
- Staging path convention: _staging/{date}_{device}/
- Config persistence at ~/.photophetch/config.json
2026-07-28 03:04:05 +00:00