1366 Commits

Author SHA1 Message Date
Christian Visintin
2dddc88eda build: remotefs-ssh 0.8.2
this version removes any usage of sh commands from the sftp backend and only uses pure protocol functions

closes #409
2026-03-24 09:46:20 +01:00
Christian Visintin
6875d5d41d build: remotefs-ssh 0.8.1 2026-03-23 11:09:00 +01:00
Christian Visintin
0d3c13925c fix: render progress bar immediately after mounting
Call self.view() right after mount_progress_bar() at all 6 call sites
so the bar is visible on screen before the transfer loop begins.
2026-03-23 11:09:00 +01:00
Christian Visintin
974b58b028 fix: use time-based redraw interval instead of progress-delta threshold
The old 1% progress threshold caused the UI to appear frozen on large
files (e.g. 1GB) because many read/write iterations passed between
redraws. Switching to a 100ms time-based interval ensures consistent
UI responsiveness regardless of file size.
2026-03-23 11:09:00 +01:00
Christian Visintin
a73fdc4d0b feat: consolidate theme progress bar fields into single transfer_progress_bar 2026-03-23 11:09:00 +01:00
Christian Visintin
f01b61a927 feat: update transfer loop to use unified TransferProgress 2026-03-23 11:09:00 +01:00
Christian Visintin
abb8e12cbb feat: update progress bar display for new unified data model 2026-03-23 11:09:00 +01:00
Christian Visintin
4d6e1d1116 feat: simplify progress bar layout to single component 2026-03-23 11:09:00 +01:00
Christian Visintin
7066f64cc6 feat: replace dual progress bar components with single TransferProgressBar 2026-03-23 11:09:00 +01:00
Christian Visintin
12b5d86191 feat: rework TransferProgress to track bytes with lazy estimation 2026-03-23 11:09:00 +01:00
Christian Visintin
1acb8b2a60 chore: enable safe clippy pedantic lints 2026-03-21 16:10:15 +01:00
Christian Visintin
bede4adaeb docs: document ssh key storage API 2026-03-21 16:10:15 +01:00
Christian Visintin
a23f0f88c0 test: extend system regression coverage 2026-03-21 16:10:15 +01:00
Christian Visintin
c285f90047 fix: normalize localhost relative path checks 2026-03-21 16:10:15 +01:00
Christian Visintin
517e9df9e1 test: extend config and explorer regression coverage 2026-03-21 16:10:15 +01:00
Christian Visintin
478f25304f test: add parser and bookmark regression coverage 2026-03-21 16:10:15 +01:00
Christian Visintin
3d36754e7e refactor: split auth view helpers by responsibility 2026-03-21 16:10:15 +01:00
Christian Visintin
95672bd67b docs: complete remaining core module docs 2026-03-21 16:10:15 +01:00
Christian Visintin
663e1ec38b docs: document parser and file transfer params 2026-03-21 16:10:15 +01:00
Christian Visintin
3905e8ed79 docs: document core host and ssh modules 2026-03-21 16:10:15 +01:00
Christian Visintin
7fc61e1e90 docs: add core module and API documentation 2026-03-21 16:10:15 +01:00
Christian Visintin
eac8bf5903 refactor: split auth update handlers by context 2026-03-21 16:10:15 +01:00
Christian Visintin
bde5b677df refactor: split auth form components by protocol 2026-03-21 16:10:15 +01:00
Christian Visintin
b26b6db94b refactor: split parser internals into focused modules 2026-03-21 16:10:15 +01:00
Christian Visintin
9a8833ef60 fix: stabilize core error handling
Remove production panic and unwrap paths from core modules.

Propagate bookmark encryption failures, harden file watcher and temp mapped file handling, and clean up dead code in shared utilities.
2026-03-21 16:10:15 +01:00
Christian Visintin
0c94a68047 fix: sync browsing when entering a directory from filtered/fuzzy view
Closes #382
2026-03-21 11:45:53 +01:00
Christian Visintin
024f156fc8 build: replace version-compare crate with semver
closes #399
2026-03-21 11:13:56 +01:00
Christian Visintin
1bd990bca7 ci: check fmt with nightly toolchain 2026-03-21 11:13:56 +01:00
Christian Visintin
14704f4439 chore: add fmt+clippy convention to CLAUDE.md and apply nightly fmt 2026-03-21 10:59:25 +01:00
Christian Visintin
36a830c8cc fix: pass full command string to exec, not just the first word
The `Exec` arm of `Command::from_str` only captured the first
whitespace-delimited token, silently dropping all arguments.
Now passes the entire input string so e.g. `ls -la /tmp` works.
2026-03-21 10:59:25 +01:00
Christian Visintin
d4bf9cc4a6 fix: resolve . and .. in terminal cd and prevent panic in path elide
`absolutize` now lexically normalizes paths so `cd ..` navigates to the
parent directory instead of appending `..` literally. Also guard against
`file_name()` returning `None` in `fmt_path_elide_ex`, which caused a
panic on paths containing unresolved `..` components.

Closes #402
2026-03-21 10:59:25 +01:00
Christian Visintin
2e826a560a ci: run test workflows once 2026-03-20 23:14:10 +01:00
Christian Visintin
6045f48ff7 chore: format toml 2026-03-20 23:14:10 +01:00
Christian Visintin
52dd762872 build: replaced libssh with russh for remotefs-ssh 2026-03-20 23:14:10 +01:00
Christian Visintin
53502e722a fix: return after empty terminal prompt 2026-03-20 23:14:10 +01:00
Christian Visintin
8a0dfc2b58 chore: 1.0.0 version into manifests 2026-03-20 17:12:04 +01:00
Christian Visintin
9387f11863 style: linter 2026-03-13 15:24:43 +01:00
Christian Visintin
a24039bf15 build: removed hostname, use whoami instead
whoami provides `hostname` function, so we don't need the hostname dependency, since whoami is also being used for getting the username

closes #398
2026-03-13 15:24:43 +01:00
Christian Visintin
34f1503391 fix: replace recursive byte-counting with entry-based transfer progress (#395)
* fix: replace recursive byte-counting with entry-based transfer progress

Replace the expensive recursive `get_total_transfer_size` pre-calculation
with a lightweight entry-based counter (`TransferProgress`) for the
overall progress bar. This avoids deep `list_dir` traversals before
transfers begin, which could cause FTP idle-timeout disconnections on
large directory trees.

The per-file byte-level progress bar (`ProgressStates`) remains
unchanged. Bytes are still tracked via `TransferStates::add_bytes` for
notification threshold logic.

Closes #384
2026-02-28 17:41:09 +01:00
Christian Visintin
e8eed9f8d1 fix: replace magic-crypt with aes-gcm for bookmark encryption
magic-crypt has known vulnerabilities. Replace it with aes-gcm for new
encryption (authenticated, with random nonces) while keeping a legacy
AES-128-CBC decryption path to transparently handle existing bookmarks.
2026-02-28 14:37:57 +00:00
Christian Visintin
1461a68bb3 refactor: migrate from mod.rs to named module files 2026-02-28 14:03:56 +00:00
Christian Visintin
92fc4fa098 chore: add centralized lint configuration to Cargo.toml 2026-02-28 14:02:54 +00:00
Christian Visintin
ba034e6518 refactor: replace lazy_static with std::sync::LazyLock 2026-02-28 13:51:28 +00:00
Christian Visintin
dc767236f5 perf: use sort_by_cached_key to avoid repeated lowercase allocations in file sorting 2026-02-28 13:51:06 +00:00
Christian Visintin
97a2240cf7 fix: correct typos in BadSytax and theme_provider log messages 2026-02-28 13:50:56 +00:00
Christian Visintin
4fdaf82314 fix: replace assert! calls in UI activities with graceful error handling 2026-02-28 13:50:31 +00:00
Christian Visintin
be237c39a6 fix: replace panics reachable from user input with proper error handling 2026-02-28 13:48:30 +00:00
Christian Visintin
a252caa66b refactor: FileTransferActivity pane-agnostic dispatch (#386)
Comprehensive design for incremental refactoring of the 13k-line
FileTransferActivity god-struct using a unified Pane abstraction.
Detailed step-by-step plan covering 6 phases: split monoliths,
error handling, Pane struct, action dedup, session split, view reorg.
Extract 26 popup components from the monolithic 1,868-line popups.rs
into 20 individual files under popups/. Each file contains one or two
related components with their own imports. The popups.rs module file
now contains only module declarations and re-exports.
Replace 8 panic!() calls with error!() logging and early returns/fallthrough.
These panics documented invariants (e.g. "this tab can't do X") but would crash
the app if somehow triggered. Error logging is safer and more resilient.
Replace raw FileExplorer fields in Browser with Pane structs that bundle
the explorer and connected state. Move host_bridge_connected and
remote_connected from FileTransferActivity into the panes. Add navigation
API (fs_pane, opposite_pane, is_find_tab) for future unification tasks.
Rename private get_selected_file to get_selected_file_by_id and add three
new unified methods (get_selected_entries, get_selected_file, is_selected_one)
that dispatch based on self.browser.tab(). Old per-tab methods are kept for
now until their callers are migrated in subsequent tasks.
Collapse _local_/_remote_ action method pairs (mkdir, delete, symlink,
chmod, rename, copy) into unified methods that branch internally on
is_local_tab(). This halves the number of action methods and simplifies
the update.rs dispatch logic. Also unifies ShowFileInfoPopup and
ShowChmodPopup dispatching to use get_selected_entries().
Move `host_bridge` and `client` filesystem fields from FileTransferActivity
into the Pane struct, enabling tab-agnostic dispatch via `fs_pane()`/
`fs_pane_mut()`. This eliminates most `is_local_tab()` branching across
15+ action files.
Key changes:
- Add `fs: Box<dyn HostBridge>` to Pane, remove from FileTransferActivity
- Replace per-side method pairs with unified pane-dispatched methods
- Unify navigation (changedir, reload, scan, file_exists, has_file_changed)
- Replace 147-line popup if/else chain with data-driven priority table
- Replace assert!/panic!/unreachable! with proper error handling
- Fix typo "filetransfer_activiy" across ~29 files
- Add unit tests for Pane

Net result: -473 lines, single code path for most file operations.
2026-02-27 21:58:31 +01:00
Christian Visintin
3fb61a76fe chore: funding
Some checks failed
MacOS / build (push) Has been cancelled
Deploy static content to Pages / deploy (push) Has been cancelled
Windows / build (push) Has been cancelled
codeberg-mirror / mirror (push) Has been cancelled
Install.sh / build (macos-latest) (push) Has been cancelled
Install.sh / build (ubuntu-latest) (push) Has been cancelled
Linux / build (push) Has been cancelled
2026-02-24 12:33:58 +01:00
Christian Visintin
ff4452c971 chore: WTF CTRL SAVE DOESNT FUCKING WORK 2026-02-09 10:27:21 +01:00