Skip to content

Add native Windows file drops and verified upload batches with dismissible results - #41

Merged
jhd3197 merged 4 commits into
jhd3197:mainfrom
x225franc:dev
Oct 16, 2026
Merged

jhd3197 merged 4 commits into
jhd3197:mainfrom
x225franc:dev

Conversation

@x225franc

Copy link
Copy Markdown
Contributor

Problem and behavior

Dragging files or folders from Windows Explorer into Faro did not enqueue native filesystem paths. Directory uploads also ignored some metadata and remote directory creation errors, allowing incomplete deployment trees without a reliable batch result. This is particularly painful for web deployments where index.html can upload while its assets tree is missing.

This adds native Tauri file-drop handling for mixed selections, with remote-pane and target-folder highlighting. Uploads now inventory the selection before remote changes, prepare directories before files, verify remote sizes, and verify the expected directories when the batch finishes. Batch summaries have a close button, can be reopened from Transfers without losing failures, and distinguish complete, partial, failed, and canceled outcomes.

Implementation

  • Reuse the existing transfer manager, concurrency settings, progress events, cancellation, and retry machinery.
  • Include hidden/extensionless/zero-byte files, empty folders, Unicode names, and deep trees in the inventory; explicitly reject symlinks and Windows reparse points to prevent traversal loops.
  • Detect selection changes between inventory and preparation using metadata fingerprints; these fingerprints are not content checksums.
  • Make upload results dismissible with a close button; reopening Transfers restores the retained results and errors. Closing Transfers hides both panels.
  • Surface preparation failures and preserve failed selection destinations for retry. Atomically claim failed rows so concurrent retry requests cannot create two writers for the same transfer.
  • Check uploaded sizes independently of progress counters, retaining the existing optional checksum verification. Size equality is not a binary-integrity guarantee.
  • Offer an explicit, opt-in “Stage folder as a new release…” action: upload into a temporary directory and rename it to a new release directory after validation. This does not switch the live website, delete remote content, or claim atomic deployment.

The application identifier, profile/settings formats, and credential services are unchanged. The existing lockfile had workspace package versions at 1.3.38; it is synchronized with the already-declared 1.3.48 versions, without adding application dependencies.

Validation

  • cargo check -p faro --locked: passed.
  • Rust library suite: 279 passed, 33 ignored. An initial OpenSSH test failure was caused by temporary-directory ACLs; the unchanged test and full suite pass with a private temporary directory.
  • Frontend outcome/store tests: 25 passed.
  • npm run build: passed.
  • Existing Edge transfer-queue UI verification: passed (pause/resume, retry, ordering, throttle, progress, closing/reopening upload results, and preserving hidden errors).
  • Real local FTP regression: 352 files, including 350 assets, uploaded, downloaded, and independently compared byte for byte; empty Unicode directory preserved.
  • Real local FTP permission-denied test: passed; preparation fails before file uploads start.
  • Optimized Windows x64 NSIS installer generated successfully. The contributor installed/tested the Windows build and reports it works well.

Known limits / review notes

  • Explorer targeting across all DPI/zoom combinations, UNC/long paths, and internal HTML drag coexistence still need broader Windows coverage; the automated UI tests do not drive Explorer.
  • Batch summaries persist for the running session, not across application restarts. Existing per-file resume persistence remains in place.
  • Inventory/directory preparation has no dedicated cancellation button before individual transfer tasks exist.
  • Some pre-queue failures require resubmitting the selection. Staging publication needs additional end-to-end coverage on target servers; failed staging directories are retained for inspection.
  • Remote backends that cannot supply usable verification metadata fail explicitly rather than reporting unverifiable success.

See docs/windows-upload-reliability.md for the audit, coverage matrix, reproduction commands, and manual Windows checklist. No installer binary is included in this PR.

Implementation assistance: OpenAI Codex.

x225franc and others added 4 commits October 16, 2026 01:04
Inventory selections before upload, verify remote sizes and directories, retain batch failures, and offer staged release publication. Cover assets regression with local FTP round trips and prevent duplicate concurrent retries.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Document the generated x64 installer, SHA-256, preservation of application data, and the remaining manual Explorer validation.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add a close button to upload results, coordinate visibility with Transfers, and retain batch errors when hidden. Verify close and reopen interactions in Edge and the transfer store.

Co-Authored-By: Codex <noreply@openai.com>
Refresh the installer checksum and embedded frontend reference after the upload results visibility fix.

Co-Authored-By: Codex <noreply@openai.com>
@jhd3197
jhd3197 merged commit 7832085 into jhd3197:main Oct 16, 2026
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.

2 participants