lame

User Flows

This document explains the major user-visible flows in the app.

Connect And Browse

  1. The app launches and starts browsing for camera-class devices.
  2. A connected iPhone appears in the sidebar.
  3. The user selects the device, or the app auto-selects the first one.
  4. The manager opens a device session.
  5. Once the device is ready, the app builds a list of media files.
  6. The grid shows those files.
  7. Visible cells request thumbnails as they appear.
  1. The user types in the toolbar search field.
  2. MediaGridView filters the current media list by filename.
  3. The grid immediately updates to show matching items only.
  4. Select All operates on visible results, not hidden ones.

Sort

  1. The user chooses a sort field.
  2. The user can reverse the direction with the arrow button.
  3. The grid recomputes the display order from the current visible set.

Filter By Size Or Date

  1. The user opens the filter popover.
  2. The user chooses either Size or Date mode.
  3. The user enters a valid range.
  4. The filter becomes active only when the input is valid.
  5. The grid recomputes the visible file list.
  6. The toolbar shows that a filter is active.

Selection

The selection system follows common desktop conventions.

Delete

  1. The user selects one or more items.
  2. The user presses the delete action.
  3. The app asks for confirmation.
  4. The manager requests deletion from the device.
  5. Successful deletions are removed from local state.
  6. Partial failures produce an error message but still remove successful items.

Device Disconnect

  1. The user disconnects the iPhone while the app is open.
  2. ImageCaptureCore reports device removal.
  3. The manager clears selection-related device state.
  4. Thumbnail tasks are canceled.
  5. The grid disappears and the empty state returns.
  6. The app shows a device disconnected message.

Failure Handling

The app has explicit handling for these scenarios:

These failures are translated into user-facing strings through AppError.