Skip to content

Implement update artifact selection UX #169

@hakiatalov

Description

@hakiatalov

As a BLIS Lab Administrator,
I want to select a .zip update file from a local path or USB drive via a file picker,
So that I can initiate a sideloaded update without manually moving files.

Description
The Avalonia UI launcher needs a new interaction point. When the user clicks the "Install Local Update" button, the application should invoke the native operating system file picker.

Technical Constraints:

  • Framework: Avalonia UI (using StorageProvider API for cross-platform compatibility).
  • File Filter: The picker must be restricted to .zip files.
  • State Management: The selected file path must be captured and passed to the next stage of the update logic (the staging process).

AC

Scenario 1: Invoke File Picker

  • Given the BLIS Launcher is open on the "Updates" screen
    When the user clicks the "Install Local Update (.zip)" button
    Then a native OS file selection dialog must appear
    And the dialog title should clearly state "Select BLIS Update File".

Scenario 2: File Type Filtering

  • Given the file selection dialog is open
    When the user attempts to browse files
    Then only files with the .zip extension should be selectable (File Filter: *.zip)
    And all other file types should be hidden or greyed out.

Scenario 3: Successful File Selection

  • Given a valid .zip file is selected
    When the user clicks "Open" or "Select"
    Then the dialog should close
    And the launcher should display the name of the selected file in the UI (e.g., "Ready to install: blis_update_v3.8.2.zip")
    And the "Next" or "Install" button should become enabled.

Scenario 4: User Cancellation

  • Given the file selection dialog is open
    When the user clicks "Cancel" or closes the window
    Then the dialog should close without error
    And no changes should be made to the launcher state.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions