diff --git a/src/main/resources/scripts/photophetch-ios-helper.py b/src/main/resources/scripts/photophetch-ios-helper.py index 41b70eb..6e83324 100644 --- a/src/main/resources/scripts/photophetch-ios-helper.py +++ b/src/main/resources/scripts/photophetch-ios-helper.py @@ -91,20 +91,25 @@ async def cmd_list_photos(): try: info = await afc.stat(device_path) if not debug_logged: - print(f'DEBUG stat keys: {list(info.keys())}', file=sys.stderr) - print(f'DEBUG stat values: {dict(info)}', file=sys.stderr) + print(f'DEBUG stat: {dict(info)}', file=sys.stderr) debug_logged = True size_bytes = int(info.get('st_size', 0)) - mtime_raw = int(info.get('st_mtime', 0)) - # Determine if nanoseconds (>1e15) or seconds (>1e9) - if mtime_raw > 1_000_000_000_000_000: - mtime_s = mtime_raw / 1_000_000_000 - elif mtime_raw > 1_000_000_000: - mtime_s = float(mtime_raw) + # pymobiledevice3 returns 'datetime' as a tuple: + # (year, month, day, hour, minute, second, microsecond) + dt = info.get('datetime') + if dt is not None: + if hasattr(dt, 'isoformat'): + date_iso = dt.isoformat() + elif isinstance(dt, (list, tuple)) and len(dt) >= 6: + date_iso = datetime(int(dt[0]), int(dt[1]), int(dt[2]), + int(dt[3]), int(dt[4]), int(dt[5])).isoformat() else: - mtime_s = 0.0 - if mtime_s > 0: - date_iso = datetime.fromtimestamp(mtime_s).isoformat() + # Fallback: try st_mtime as integer timestamp + mtime_raw = int(info.get('st_mtime', 0)) + if mtime_raw > 1_000_000_000_000_000: + mtime_raw = mtime_raw // 1_000_000_000 + if mtime_raw > 1_000_000_000: + date_iso = datetime.fromtimestamp(float(mtime_raw)).isoformat() except Exception: pass