Skip to content

feat(install): offer one-click sync engine installation from the app - #219

Merged
gnacho merged 1 commit into
mainfrom
feat/218-engine-install
Sep 17, 2026
Merged

gnacho merged 1 commit into
mainfrom
feat/218-engine-install

Conversation

@gnacho

@gnacho gnacho commented Sep 17, 2026

Copy link
Copy Markdown
Owner

What

Today, installing the sync engine requires leaving the app for a terminal. This adds one-click installation from the two places that already report the missing engine (#209, #210):

  • Pure core (src/core/engine_install.rs): maps (provider, detected package manager) to an exact install plan - a fixed pkexec <pkg-manager> … argv (no shell, no user input) plus a display/copyable command. Package names verified against the distro indexes: nextcloud-client (pacman/dnf/zypper), nextcloud-desktop-cmd (apt, provides nextcloudcmd), opencloud-desktop (pacman; AUR fallback hint on failure). Unsupported combinations (OpenCloud on apt/dnf/zypper) fall back to manual guidance.
  • Wizard: the blocking "Sync Engine Not Installed" dialog now offers Install; on success it confirms the engine landed and Finish proceeds.
  • Folder row: the ⋯ menu leads with "Install sync engine…" while the provider's binary is missing; a successful install re-checks binary_exists() and triggers a manual retry so the folder recovers on its own.
  • Failure path shows the exit code, the stderr tail and the manual command (with copy). No background installs, no sudo loops, single guarded pkexec run.

Tests

  • 11 new core tests (detection priority, argv exactness per combo, safety invariants: single tokens, no paths, no engine binary names in argv).
  • 3 pure dialog-text tests (automatic/manual/failure bodies).
  • 1 GTK smoke test for the row menu entry gating.

Suite: 731 passed + 1 ignored (known flaky login_flow), clippy -D warnings clean, fmt clean, i18n parity regenerated (525 entries).

Closes #218

Add a pure install-plan core mapping (provider, detected package
manager) to a fixed pkexec argv or a manual fallback command, and
surface it where the missing-engine state already appears: the setup
wizard's blocking dialog gains an Install response, and the folder row
menu gains an "Install sync engine…" entry while the provider's binary
is missing. A successful install re-checks the binary and retries the
folder; failures show the error output and the manual command.

Closes #218
@gnacho
gnacho merged commit 726320f into main Sep 17, 2026
2 checks passed
@gnacho
gnacho deleted the feat/218-engine-install branch September 17, 2026 20:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Install the sync engine from within the app

1 participant