Import Discovery Screen - cressie176/Load64 GitHub Wiki

Primary Purpose

Review discovered games, select which to import, and begin the per-game import flow.

Main Screen Design

New games only

Shown when all discovered games are new to the library. No tab bar is shown — the list occupies the full available height.

┌──────────────────────────────────────────────────────────────────────────────┐
│ TOP BAR                                                                      │
│  Import Games > Discover                                     [Next]  [Back]  │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  GAME LIST                                                                   │
│  ┌────────────────────────────────────────────────────────────────────────┐  │
│  │  SELECTION CONTROLS                                                    │  │
│  │  Select All    Select None                                             │  │
│  ├────────────────────────────────────────────────────────────────────────┤  │
│  │      Title                            Publisher                 Year   │  │
│  │  ────────────────────────────────────────────────────────────────────  │  │
│  │  [x] Bubble Bobble                    Firebird                  1987   │  │
│  │  [x] Commando                         Elite Systems             1985   │  │
│  │  [x] Montezuma's Revenge              Parker Brothers           1984   │  │
│  │  [x] The Last Ninja                   System 3                  1987   │  │
│  │  [x] Turrican                         Rainbow Arts              1990   │  │
│  │  [x] Wizball                          Ocean                     1987   │  │
│  │  [x] game-tape2                       —                            —   │  │
│  └────────────────────────────────────────────────────────────────────────┘  │
│                                                                              │
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  42 of 42 selected                                                           │
└──────────────────────────────────────────────────────────────────────────────┘

New and already-imported games — New tab active

Shown when the source contains both new and already-imported games. A tab bar appears at the top of the list. The New tab is active by default.

┌──────────────────────────────────────────────────────────────────────────────┐
│ TOP BAR                                                                      │
│  Import Games > Discover                                     [Next]  [Back]  │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  GAME LIST                                                                   │
│  ┌────────────────────────────────────────────────────────────────────────┐  │
│  │  TAB BAR                                                               │  │
│  │  [ New (42) ]  Already Imported (25)                                   │  │
│  ├────────────────────────────────────────────────────────────────────────┤  │
│  │  SELECTION CONTROLS                                                    │  │
│  │  Select All    Select None                                             │  │
│  ├────────────────────────────────────────────────────────────────────────┤  │
│  │      Title                            Publisher                 Year   │  │
│  │  ────────────────────────────────────────────────────────────────────  │  │
│  │  [x] Bubble Bobble                    Firebird                  1987   │  │
│  │  [x] The Last Ninja                   System 3                  1987   │  │
│  │  [x] Turrican                         Rainbow Arts              1990   │  │
│  │  [x] Wizball                          Ocean                     1987   │  │
│  │   …                                                                    │  │
│  └────────────────────────────────────────────────────────────────────────┘  │
│                                                                              │
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  42 of 67 selected                                                           │
└──────────────────────────────────────────────────────────────────────────────┘

New and already-imported games — Already Imported tab active

┌──────────────────────────────────────────────────────────────────────────────┐
│ TOP BAR                                                                      │
│  Import Games > Discover                                     [Next]  [Back]  │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  GAME LIST                                                                   │
│  ┌────────────────────────────────────────────────────────────────────────┐  │
│  │  TAB BAR                                                               │  │
│  │  New (42)  [ Already Imported (25) ]                                   │  │
│  ├────────────────────────────────────────────────────────────────────────┤  │
│  │  SELECTION CONTROLS                                                    │  │
│  │  Select All    Select None                                             │  │
│  ├────────────────────────────────────────────────────────────────────────┤  │
│  │      Title                            Publisher                 Year   │  │
│  │  ────────────────────────────────────────────────────────────────────  │  │
│  │  [ ] International Soccer             Commodore                 1983   │  │
│  │  [ ] Jet Set Willy                    Software Projects         1984   │  │
│  │  [ ] Paradroid                        Hewson                    1985   │  │
│  │   …                                                                    │  │
│  └────────────────────────────────────────────────────────────────────────┘  │
│                                                                              │
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  42 of 67 selected                                                           │
└──────────────────────────────────────────────────────────────────────────────┘

Already-imported games only

Shown when every discovered game is already in the library. No tab bar is shown. All games are deselected by default; the bottom bar signals that nothing new was found.

┌──────────────────────────────────────────────────────────────────────────────┐
│ TOP BAR                                                                      │
│  Import Games > Discover                                     [Next]  [Back]  │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
│  GAME LIST                                                                   │
│  ┌────────────────────────────────────────────────────────────────────────┐  │
│  │  SELECTION CONTROLS                                                    │  │
│  │  Select All    Select None                                             │  │
│  ├────────────────────────────────────────────────────────────────────────┤  │
│  │      Title                            Publisher                 Year   │  │
│  │  ────────────────────────────────────────────────────────────────────  │  │
│  │  [ ] International Soccer             Commodore                 1983   │  │
│  │  [ ] Jet Set Willy                    Software Projects         1984   │  │
│  │  [ ] Paradroid                        Hewson                    1985   │  │
│  │   …                                                                    │  │
│  └────────────────────────────────────────────────────────────────────────┘  │
│                                                                              │
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  Nothing new to import.                                                      │
└──────────────────────────────────────────────────────────────────────────────┘

[Next] is shown but disabled until the user selects at least one game.

Nothing to import

Shown when no ROM files were found at the source path.

┌──────────────────────────────────────────────────────────────────────────────┐
│ TOP BAR                                                                      │
│  Import Games > Discover                                             [Back]  │
├──────────────────────────────────────────────────────────────────────────────┤
│                                                                              │
├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  Nothing to import.                                                          │
└──────────────────────────────────────────────────────────────────────────────┘

[Next] is not shown.

TOP BAR

Focusable: [Next] and [Back] CTAs (games found); [Back] CTA only (nothing to import)
Interactive: [Next] and [Back] CTAs (games found); [Back] CTA only (nothing to import)
Purpose: Identify the current screen and provide the import action

[Back] CTA

Returns to the Import Games screen.

[Next] CTA

Shown whenever at least one game was discovered (including the already-imported-only state). Disabled until at least one game is selected.

Begins the sequential per-game import flow, starting with the first selected game on the Import Candidate screen. New games are processed before already-imported games. Within each group, games are processed in alphabetical order. Deselected games are skipped entirely. When all selected games have been imported, returns to the Import Games screen.

GAME LIST

Type: Multi-selection vertical list with optional tab bar
Focusable: Yes (primary focus region)
Interactive: Yes
Order: Alphabetically by title within each tab
Purpose: Show all discovered games and allow the user to choose which to import

The game list has three vertically stacked sub-zones: TAB BAR (when present), SELECTION CONTROLS, and the scrollable game rows. Up/Down navigates between zones; within the game rows, Up/Down moves between rows.

The tab bar appears only when there are both new and already-imported games. When only one category is present, the tab bar is omitted.

TAB BAR

Only shown when both new and already-imported games are present.

Controller Keyboard Behaviour
D-Pad Up Up No effect (top of list)
D-Pad Down Down Move focus to Selection Controls
D-Pad Left Left Switch to New tab
D-Pad Right Right Switch to Already Imported tab

The active tab is visually distinguished. The inactive tab label is shown without decoration. Switching tabs does not affect selections — games remain selected or deselected regardless of which tab is visible.

SELECTION CONTROLS

Select All and Select None appear in their own zone between the tab bar (or top of the list) and the game rows. They are scoped to the currently visible tab.

Controller Keyboard Behaviour
D-Pad Up Up Move focus to Tab Bar (if present)
D-Pad Down Down Move focus to first game row
D-Pad Left Left Focus Select All
D-Pad Right Right Focus Select None
A / Select Enter Activate focused control

Game rows

Each row shows:

  • A checkbox indicator: [x] (selected) or [ ] (deselected)
  • Title — for recognised games, from the LoadC64 Catalogue; for unrecognised games, derived from the filename (see Import Candidate screen)
  • Publisher — from the LoadC64 Catalogue, or if unrecognised
  • Year — from the LoadC64 Catalogue, or if unrecognised
Controller Keyboard Behaviour
D-Pad Up Up Move up one row; from row 0, move to Selection Controls
D-Pad Down Down Move down one row
D-Pad Left Left No effect
D-Pad Right Right No effect
A / Select Enter Toggle selection of focused row

The list scrolls vertically. There is no pagination.

BOTTOM BAR

Focusable: No
Interactive: No
Purpose: Display the current selection count or a status message

The selection count covers both tabs combined:

├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  42 of 67 selected                                                           │
└──────────────────────────────────────────────────────────────────────────────┘

When all discovered games are already imported (none new):

├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  Nothing new to import.                                                      │
└──────────────────────────────────────────────────────────────────────────────┘

When no ROM files were found:

├──────────────────────────────────────────────────────────────────────────────┤
│ BOTTOM BAR                                                                   │
│  Nothing to import.                                                          │
└──────────────────────────────────────────────────────────────────────────────┘

Behaviour

  • New games are pre-selected on arrival; already-imported games are deselected.
  • When both new and already-imported games are present, the New tab is active by default.
  • The tab bar is not shown when only one category of game is present.
  • Select All and Select None are scoped to the currently visible tab.
  • The selection count in the bottom bar reflects the total across both tabs and updates immediately when the user toggles a row or uses a selection control.
  • If an already-imported game is selected and imported, the existing library record is updated (upserted) rather than duplicated. The ROMSet ID is the stable key used to identify the existing record.
  • Returning from a cancelled per-game import resumes from the next unprocessed selected game.
  • When all selected games have been imported or skipped, returns to the Import Games screen.
⚠️ **GitHub.com Fallback** ⚠️