From c361ec5ba33854e7791d58338506e1cb7df0a646 Mon Sep 17 00:00:00 2001 From: Joe Julian Date: Mon, 6 Apr 2026 07:13:12 -0700 Subject: [PATCH] Keep remote form open during manual entry --- main.go | 8 +++++++- main_test.go | 30 +++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 6a43942..6c47aa0 100644 --- a/main.go +++ b/main.go @@ -432,6 +432,7 @@ type ui struct { syncDialogOpen bool syncMenuOpen bool mainMenuOpen bool + selectedRemoteConnection bool securityDialogOpen bool remotePrefsDialogOpen bool showSyncPassword bool @@ -1779,7 +1780,7 @@ func (u *ui) hasSelectedLifecycleTarget() bool { } func (u *ui) hasSelectedRemoteTarget() bool { - return strings.TrimSpace(u.remoteBaseURL.Text()) != "" && strings.TrimSpace(u.remotePath.Text()) != "" + return u.selectedRemoteConnection } func (u *ui) latestRecentVault() (string, time.Time) { @@ -1830,6 +1831,7 @@ func (u *ui) switchToLifecycleSelection(mode string) { u.remoteUsername.SetText("") u.remotePassword.SetText("") u.rememberRemoteAuth.Value = false + u.selectedRemoteConnection = false default: u.vaultPath.SetText("") u.remoteBaseURL.SetText("") @@ -1837,6 +1839,7 @@ func (u *ui) switchToLifecycleSelection(mode string) { u.remoteUsername.SetText("") u.remotePassword.SetText("") u.rememberRemoteAuth.Value = false + u.selectedRemoteConnection = false } u.requestMasterPassFocus = u.hasSelectedLifecycleTarget() u.filter() @@ -1885,6 +1888,7 @@ func (u *ui) applyRecentRemoteRecord(record recentRemoteRecord) { u.remotePassword.SetText(record.Password) u.remotePassword.Mask = '•' u.rememberRemoteAuth.Value = strings.TrimSpace(record.Username) != "" || record.Password != "" + u.selectedRemoteConnection = true } func (u *ui) remotePreferencesCurrentSummary() string { @@ -3050,6 +3054,7 @@ func (u *ui) layout(gtx layout.Context) layout.Dimensions { continue } u.lifecycleMode = "remote" + u.selectedRemoteConnection = false u.requestMasterPassFocus = true } for u.toggleLifecycleAdvanced.Clicked(gtx) { @@ -3247,6 +3252,7 @@ func (u *ui) layout(gtx layout.Context) layout.Dimensions { u.switchToLifecycleSelection("remote") continue } + u.selectedRemoteConnection = false u.remoteBaseURL.SetText("") u.remotePath.SetText("") u.remoteUsername.SetText("") diff --git a/main_test.go b/main_test.go index 297a289..f41920d 100644 --- a/main_test.go +++ b/main_test.go @@ -4421,8 +4421,16 @@ func TestShowRemoteConnectionChooser(t *testing.T) { u.remoteBaseURL.SetText("https://dav.crew.example.invalid") u.remotePath.SetText("vaults/bellagio.kdbx") + if got := u.showRemoteConnectionChooser(); !got { + t.Fatal("showRemoteConnectionChooser() = false, want true while manually entering a remote connection") + } + + u.applyRecentRemoteRecord(recentRemoteRecord{ + BaseURL: "https://dav.crew.example.invalid", + Path: "vaults/bellagio.kdbx", + }) if got := u.showRemoteConnectionChooser(); got { - t.Fatal("showRemoteConnectionChooser() = true, want false when a remote connection is selected") + t.Fatal("showRemoteConnectionChooser() = true, want false after selecting a saved remote connection") } u.lifecycleMode = "local" @@ -4431,6 +4439,26 @@ func TestShowRemoteConnectionChooser(t *testing.T) { } } +func TestApplyingRecentRemoteRecordMarksSelectedRemoteConnection(t *testing.T) { + t.Parallel() + + u := newUIWithSession("desktop", &session.Manager{}) + if u.hasSelectedRemoteTarget() { + t.Fatal("hasSelectedRemoteTarget() = true, want false before selecting a saved remote connection") + } + + u.applyRecentRemoteRecord(recentRemoteRecord{ + BaseURL: "https://dav.crew.example.invalid", + Path: "vaults/bellagio.kdbx", + Username: "dannyocean", + Password: "topsecret", + }) + + if !u.hasSelectedRemoteTarget() { + t.Fatal("hasSelectedRemoteTarget() = false, want true after selecting a saved remote connection") + } +} + func TestSwitchToLifecycleSelectionResetsLockedLocalSession(t *testing.T) { t.Parallel()