Shift remote open copy to local-first flow
This commit is contained in:
@@ -2602,13 +2602,36 @@ func (u *ui) remoteOpenRetryAvailable() bool {
|
||||
return u.lifecycleMode == "remote" && strings.HasPrefix(strings.TrimSpace(u.state.ErrorMessage), "open remote vault failed:")
|
||||
}
|
||||
|
||||
func (u *ui) selectedRemoteUsesLocalCache() bool {
|
||||
return u.hasSelectedRemoteTarget() &&
|
||||
strings.TrimSpace(u.vaultPath.Text()) != "" &&
|
||||
strings.TrimSpace(u.selectedVaultRemoteProfileID) != "" &&
|
||||
strings.TrimSpace(u.selectedVaultRemoteCredentialEntryID) != ""
|
||||
}
|
||||
|
||||
func (u *ui) remoteLifecycleMessage() string {
|
||||
if u.selectedRemoteUsesLocalCache() {
|
||||
return "Open the local cache for this remote vault, then unlock and sync it with the vault-stored remote settings."
|
||||
}
|
||||
return "Connect to a remote vault, then unlock it with the KeePass master key."
|
||||
}
|
||||
|
||||
func (u *ui) remoteOpenButtonLabel() string {
|
||||
switch {
|
||||
case u.lifecycleBusy():
|
||||
if u.selectedRemoteUsesLocalCache() {
|
||||
return "Opening Cached Vault..."
|
||||
}
|
||||
return "Opening Remote Vault..."
|
||||
case u.remoteOpenRetryAvailable():
|
||||
if u.selectedRemoteUsesLocalCache() {
|
||||
return "Retry Cached Vault"
|
||||
}
|
||||
return "Retry Remote Vault"
|
||||
default:
|
||||
if u.selectedRemoteUsesLocalCache() {
|
||||
return "Open Cached Vault"
|
||||
}
|
||||
return "Open Remote Vault"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5301,6 +5301,47 @@ func TestUIRemoteOpenButtonLabelOffersRetryAfterFailure(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIRemoteLifecycleMessageUsesLocalCacheLanguageForBoundRemote(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("desktop", &session.Manager{})
|
||||
u.lifecycleMode = "remote"
|
||||
u.applyRecentRemoteRecord(recentRemoteRecord{
|
||||
BaseURL: "https://dav.example.invalid",
|
||||
Path: "vaults/home.kdbx",
|
||||
LocalVaultPath: "/vaults/cache/home.kdbx",
|
||||
RemoteProfileID: "remote-profile-1",
|
||||
CredentialEntryID: "remote-creds-1",
|
||||
})
|
||||
|
||||
if got := u.remoteLifecycleMessage(); got != "Open the local cache for this remote vault, then unlock and sync it with the vault-stored remote settings." {
|
||||
t.Fatalf("remoteLifecycleMessage() = %q, want local-cache guidance", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIRemoteOpenButtonLabelUsesLocalCacheLanguageForBoundRemote(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("desktop", &session.Manager{})
|
||||
u.lifecycleMode = "remote"
|
||||
u.applyRecentRemoteRecord(recentRemoteRecord{
|
||||
BaseURL: "https://dav.example.invalid",
|
||||
Path: "vaults/home.kdbx",
|
||||
LocalVaultPath: "/vaults/cache/home.kdbx",
|
||||
RemoteProfileID: "remote-profile-1",
|
||||
CredentialEntryID: "remote-creds-1",
|
||||
})
|
||||
|
||||
if got := u.remoteOpenButtonLabel(); got != "Open Cached Vault" {
|
||||
t.Fatalf("remoteOpenButtonLabel() = %q, want %q", got, "Open Cached Vault")
|
||||
}
|
||||
|
||||
u.state.ErrorMessage = "open remote vault failed: dial tcp timeout"
|
||||
if got := u.remoteOpenButtonLabel(); got != "Retry Cached Vault" {
|
||||
t.Fatalf("remoteOpenButtonLabel() after error = %q, want %q", got, "Retry Cached Vault")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIOpenRemoteVaultRestoresLastOpenedGroupForThatConnection(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ func (u *ui) lifecycleControls(gtx layout.Context) layout.Dimensions {
|
||||
layout.Rigid(func(gtx layout.Context) layout.Dimensions {
|
||||
message := "Choose a recent vault or enter a .kdbx path, then unlock it."
|
||||
if u.lifecycleMode == "remote" {
|
||||
message = "Connect to a remote vault, then unlock it with the KeePass master key."
|
||||
message = u.remoteLifecycleMessage()
|
||||
}
|
||||
lbl := material.Label(u.theme, unit.Sp(14), message)
|
||||
lbl.Color = accentColor
|
||||
|
||||
Reference in New Issue
Block a user