You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add a read-only directory comparison that shows which entries differ between the current local folder and the current remote folder, with an accessible preview a screen reader user can read through.
Carried over from the Python-era PR #125, which was closed unmerged when the app moved to Rust. The design below is from that PR; the implementation has to be redone against the Rust crates.
Design from the original PR
A comparison engine that classifies each entry as local-only, remote-only, same, or different (by size and, where available, modification time).
Exposed as Compare Directories on the View menu with Ctrl+Shift+C.
Results shown in a read-only preview dialog rather than acting on files; the comparison never transfers or deletes anything.
Notes for the Rust implementation
The comparison logic belongs in portkeydrop-core so it is tested against RemoteFile lists without a display.
Listing the remote side is network work and must run on a worker that posts an AppEvent; the dialog is populated when the result arrives.
The result dialog goes under crates/portkeydrop/src/ui/dialogs/. Every control needs an explicit accessible name via set_name, and the list needs a StaticText immediately before it so NVDA reads it as the list's name.
Summary
Add a read-only directory comparison that shows which entries differ between the current local folder and the current remote folder, with an accessible preview a screen reader user can read through.
Carried over from the Python-era PR #125, which was closed unmerged when the app moved to Rust. The design below is from that PR; the implementation has to be redone against the Rust crates.
Design from the original PR
Ctrl+Shift+C.Notes for the Rust implementation
portkeydrop-coreso it is tested againstRemoteFilelists without a display.AppEvent; the dialog is populated when the result arrives.crates/portkeydrop/src/ui/dialogs/. Every control needs an explicit accessible name viaset_name, and the list needs aStaticTextimmediately before it so NVDA reads it as the list's name.