Skip to content

Fix: Fixed an issue where reading the keyring could freeze the UI while waiting for unlock - #207

Merged
MemerGamer merged 2 commits into
mainfrom
fix/keyring-ui-thread
Nov 2, 2026
Merged

MemerGamer merged 2 commits into
mainfrom
fix/keyring-ui-thread

Conversation

@MemerGamer

Copy link
Copy Markdown
Owner

ISecretStore is now asynchronous end to end so a read or write that triggers
the Secret Service unlock prompt no longer holds the calling thread.
Git credential helpers and the FTP credential lookup await the store.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@MemerGamer

Copy link
Copy Markdown
Owner Author

Review: LGTM, no changes pushed.

  • FTP sync TryGetValue/indexer: no production caller remains outside FtpManager.cs. Connection-time lookups go through FtpClientFactory.CreateAsync -> TryGetSavedAsync (session, then saved, then URL, same order as before), so there is no re-prompt regression. Only tests use the sync TryGetValue. Get and the indexer are now dead code; optional cleanup.
  • Secret path: no .Result/.Wait()/GetResult() on it. The per-key SemaphoreSlim is released in finally, and the store uses ConfigureAwait(false) throughout. The in-memory fallback and tombstone logic are unchanged. The slow-unlock tests call the store synchronously and then wait for the prompt, so they would hang if the call blocked.
  • Windows paths (CredentialsHelpers PasswordVault branches, DevToolsViewModel) are logically fine. Notes, not blockers: DoRemoveCredentialsAsync is async void behind a RelayCommand, matching the existing DoConnectToGitHubAsync. The logout-enabled flag is now set after construction and is an observable property.
  • Line endings: the repo stores these files as LF (text=auto; main is LF too), so there is no CRLF problem. No scope creep.
  • Local: Files.Platform.Tests builds with -warnaserror and passes (1464 passed, 11 skipped, 0 failed). I did not rebuild Files.App locally; the CI run was still pending.

🤖 Generated with Claude Code

@MemerGamer
MemerGamer merged commit 80975d2 into main Nov 2, 2026
2 checks passed
@MemerGamer
MemerGamer deleted the fix/keyring-ui-thread branch November 2, 2026 15:10
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.

1 participant