Skip to content

Add fully automated/headless installation to the fomod-installer module #18466

@IDCs

Description

@IDCs

Problem

The current FOMOD installer always invokes UI delegates (startDialog, updateState, endDialog) even when a complete fomodChoices preset is provided for automated installation. This creates unnecessary complexity and IPC overhead when installing mods as part of a collection where user interaction is not needed.

Current behavior:

  1. Client calls Install with fomodChoices parameter
  2. Installer calls m_Delegates.ui.StartDialog()
  3. Installer waits for user to trigger select and cont callbacks
  4. Each callback triggers IPC round-trip to client
  5. Vortex automates the UI callbacks based on the fomodChoices preset but is extremely error prone
  6. If the UI callbacks fail for some reason, the user will be prompted to make the selections manually and block the flow.
  7. If the fomodChoices predicates are not met upon mod installation - there's a chance for the mod to "install" with no files present! (collections should not care for any mod pre-requisites, they're supposed to install the mod as is on the curator's machine)

Why this is a problem:

  • Unnecessary IPC overhead - multiple round-trips for callbacks that do nothing
  • Complex client code - must implement stub UI delegates even for headless scenarios
  • Unreliable fomod installations - see 7 above.

Current Workaround

The fomodChoices preset (line 625 in Server.cs) only suggests which options to select - it doesn't bypass the UI flow.

Potential Solutions

  • Add Headless Execution - whenever a preset is set, drop the IPC round-trip calls to the client and just use the provided options to generate the instructions in one go.

Benefits:

  • 90% reduction in IPC calls - One request, one response
  • Faster installation - No waiting for multiple roundtrips
  • More reliable - Fewer socket operations = fewer failure points
  • Enables phase removal - No longer need to deploy for file detection

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions