Commit Graph

1449 Commits

Author SHA1 Message Date
Christian Visintin
6933a98cda chore(Cargo.lock): update Cargo.lock 2026-06-08 21:14:39 +02:00
veeso
5cee1184dc chore: release v1.1.1 v1.1.1 2026-06-08 18:54:35 +00:00
Christian Visintin
4a9da89642 fix(build): drop vergen-git2 build dependency
vergen-git2 reads git metadata at build time, but the crates.io source
tarball ships no .git, so the published 1.1.0 fails on `cargo install`.
crates.io versions are immutable (no overwrite) and Chocolatey's
moderation queue blocks a fast re-push, so a clean 1.1.1 without vergen
is the only fix.
2026-06-08 20:53:55 +02:00
veeso
282f75c3f3 chore: release v1.1.0 v1.1.0 2026-06-08 18:17:39 +00:00
Christian Visintin
535ed23540 chore: update cliff config 2026-06-08 20:17:02 +02:00
Christian Visintin
70bd7d7330 fix(transfer): enqueue full destination path instead of directory
Queued transfers stored only the destination directory as the target
path. Downstream upload logic treats the queued destination as the full
file path and passes it straight to create_file, so transfers failed
with a Failure error when the remote target resolved to a directory.

Append each entry's file name to the destination directory at enqueue
time in both enqueue_file and enqueue_all, matching the single-file
transfer path which already builds the full target path.
2026-06-08 20:17:02 +02:00
Christian Visintin
352eec4762 chore(Cargo.toml): bump 1.1.0 2026-06-08 20:17:02 +02:00
Christian Visintin
3a5327f5b1 ci(release): fetch full git history and tags for build.rs
build.rs uses vergen-git2 (Git2::all_git), which runs `git describe` and
reads commit metadata. The build and publish-crate jobs checked out a
shallow clone without tags, so vergen could not resolve the describe
string and libgit2 may fail on shallow repos. Add fetch-depth: 0 and
fetch-tags: true to both jobs that compile the crate.
2026-06-08 20:17:02 +02:00
Christian Visintin
b1601fb17e chore(deps): migrate keyring from 3 to 4
keyring v4 is no longer a library crate; the API moved to keyring-core
plus per-platform credential store crates. Replace the keyring dependency
with keyring-core and the native store crates, and register the default
store at runtime (lazily, once) since v4 no longer selects it at compile
time via Cargo features.
2026-06-08 20:17:02 +02:00
Christian Visintin
bca261b7b2 chore(deps): bump aes, cbc, md-5, rand and vergen-git2
Migrate to the new RustCrypto cipher 0.5 traits (aes 0.9, cbc 0.2),
rand 0.10 and vergen-git2 10, whose APIs changed:

- vergen-git2: builders renamed (BuildBuilder -> Build, etc.) and the
  all_* constructors no longer return a Result
- aes/cbc: BlockDecryptMut -> BlockModeDecrypt and
  decrypt_padded_vec_mut -> decrypt_padded_vec
- rand: sample API moved
2026-06-08 20:17:02 +02:00
Christian Visintin
904befaea8 fix(copy): prevent emptying file when copy destination is empty (#421)
An empty copy destination resolved to the source file's own path, so
std::fs::copy truncated the original file to 0 bytes.

- localhost::copy now refuses to copy a file onto itself, returning an
  error instead of truncating it (root cause).
- action_copy treats an empty/whitespace destination as a cancel.

Closes #421
2026-06-08 17:12:52 +02:00
Christian Visintin
afe7b05830 docs(config): update config dir paths for macOS/Windows in en & zh
Reflect the new config directory locations (~/.config/termscp on macOS,
%USERPROFILE%\.termscp on Windows) across the English and Chinese docs,
and add a CLAUDE.md note to keep both translations in sync.
2026-06-08 16:39:24 +02:00
Christian Visintin
837592e48a feat(config): move config dir to ~/.config/termscp on macOS and %USERPROFILE%\.termscp on Windows
Resolve the config directory through a single per-platform config_dir()
function instead of relying on dirs::config_dir everywhere:

- macOS: ~/.config/termscp (was ~/Library/Application Support/termscp)
- Windows: %USERPROFILE%\.termscp (was roaming %APPDATA%\termscp)
- Linux/other: /termscp (unchanged)

Existing users are migrated automatically on first run: when the new
directory is absent and the legacy location exists, the whole config
directory is moved to the new path. The cache directory stays at the
platform-native location.

Closes #431
2026-06-08 16:39:24 +02:00
Christian Visintin
ab5de031e3 ci(site): always run site 2026-06-08 16:02:27 +02:00
Christian Visintin
f3085161e6 fix(progress): equalize dual progress bar heights
The bottom (partial) bar carried a block title (the current filename),
which forces a 1-row top inset in ratatui's `Block::inner` even though
its top border is dropped to join the seam with the full bar. That left
the partial bar with one inner row while the full bar kept two, so the
two gauges rendered at unequal heights.

- Move the filename from the partial bar's title into its gauge label.
- Skip setting an empty title so no phantom top-positioned title triggers
  the inset.
- Put the panel title on the top (full) bar for multi-file transfers.
- Bump the two-bar popup height to fit the joined panel.

Also bump Cargo.lock and adapt the embedded terminal to the new vt100
`screen_mut()` API.
2026-06-08 16:02:27 +02:00
Christian Visintin
1dafc76850 fix(progress): rework transfer progress panel (#424)
Migrate the transfer progress UI to tuirealm 4, where the stdlib
`ProgressBar` widget was dropped, by rebuilding the dual-bar panel on
top of `Gauge`.

- Restore the unified two-bar look: the full bar (top) and partial bar
  (bottom) draw joined borders so they read as a single panel; a single
  file shows one fully-bordered bar.
- Redraw on every file boundary in the send/recv queue loops so the
  full bar's (N/total) counter advances even for small files that finish
  within one in-loop redraw interval.
- Track progress with a single `TransferProgress` (exact file count from
  the pre-scan, lazy partial/full computation) and consolidate the theme
  progress-bar fields.
2026-06-08 16:02:27 +02:00
Christian Visintin
f066d6a387 chore(readme): remove current version 2026-06-08 10:43:35 +02:00
Christian Visintin
987751d732 chore(site): add site umami analytics 2026-06-08 10:43:35 +02:00
Christian Visintin
1ca8abbfe8 ci: rename ci workflow 2026-06-08 10:16:00 +02:00
Christian Visintin
26e71a2f1d ci(release): publish to crates.io via OIDC trusted publishing 2026-06-08 10:16:00 +02:00
Christian Visintin
b1d77c78fe fix(install): quote vars, fix set -e cargo check and rustup tmpfile cleanup
- silence SC3043 by declaring dash dialect (local is supported)
- quote unquoted vars (SC2086/SC1090)
- fix set -e aborting arch install before cargo check
- fix install_cargo removing unset $archive instead of $rustup
- make brew upgrade fallback a real if-then-else (SC2015)
- drop leftover starship BASE_URL and debug echo $1
2026-06-08 10:16:00 +02:00
Christian Visintin
2a7d48a92b ci: unify os workflows into one 2026-06-08 10:16:00 +02:00
Christian Visintin
82141e7f2b chore: remove ko-fi 2026-06-08 10:16:00 +02:00
Christian Visintin
14bc15cfca chore(site): update og_preview 2026-06-08 10:16:00 +02:00
Christian Visintin
85fa99e4cc docs(zh): fix keyring deep-link anchor to translated heading slug 2026-06-08 10:16:00 +02:00
Christian Visintin
3ff3cdb587 ci: add github pages workflow for docs site 2026-06-08 10:16:00 +02:00
Christian Visintin
726443ae21 docs: fix update command (termscp update, not --update) in READMEs 2026-06-08 10:16:00 +02:00
Christian Visintin
0bd449e7bc docs(zh): align README with root README, drop dead language links 2026-06-08 10:16:00 +02:00
Christian Visintin
c24f08691d docs: drop extra language docs/READMEs, point manual links to docs.termscp.rs 2026-06-08 10:16:00 +02:00
Christian Visintin
14e6872432 docs: disable MD060 table alignment (incompatible with CJK width) 2026-06-08 10:16:00 +02:00
Christian Visintin
88900a80b8 docs(zh): translate cli reference and developer pages 2026-06-08 10:16:00 +02:00
Christian Visintin
ce619bcff2 docs(zh): translate configuration pages 2026-06-08 10:16:00 +02:00
Christian Visintin
5a16467e71 docs(zh): translate usage pages 2026-06-08 10:16:00 +02:00
Christian Visintin
b6ca8c57f0 docs(zh): translate section headings in getting-started pages 2026-06-08 10:16:00 +02:00
Christian Visintin
660c17a0df docs(zh): translate introduction and getting-started pages 2026-06-08 10:16:00 +02:00
Christian Visintin
aed4ecc522 docs: scaffold zh-CN mdbook 2026-06-08 10:16:00 +02:00
Christian Visintin
ee69ba6ef8 docs: add markdownlint config for docs site 2026-06-08 10:16:00 +02:00
Christian Visintin
0db3ea43d2 docs(en): fix CLI references (no -t / --update flags; -b is a value option) 2026-06-08 10:16:00 +02:00
Christian Visintin
6a61eb16f7 docs(en): write cli reference and developer pages 2026-06-08 10:16:00 +02:00
Christian Visintin
e32ed613cc docs(en): write configuration pages 2026-06-08 10:16:00 +02:00
Christian Visintin
dbd61f0fab docs(en): write usage pages 2026-06-08 10:16:00 +02:00
Christian Visintin
a18fa0ca5a docs(en): write introduction and getting-started pages 2026-06-08 10:16:00 +02:00
Christian Visintin
c8846266d7 docs: add en-US table of contents 2026-06-08 10:16:00 +02:00
Christian Visintin
40440832be docs: scaffold en-US mdbook 2026-06-08 10:16:00 +02:00
Christian Visintin
34c03841be docs: add CNAME for docs.termscp.rs 2026-06-08 10:16:00 +02:00
Christian Visintin
ded71dce48 docs: add mdbook language switcher script 2026-06-08 10:16:00 +02:00
Christian Visintin
eefa1b3db0 docs: add shared mdbook assets and favicon.ico 2026-06-08 10:16:00 +02:00
Christian Visintin
a2d766d688 ci(site): add format/lint/test/build workflow for astro site
Add Site GitHub Actions workflow running prettier format check, astro
check, tests, and build on changes under site/. Wire prettier into the
site package with config, ignore, and scripts, and format existing
sources.
2026-06-08 10:16:00 +02:00
Christian Visintin
f92cb93755 feat(install): add Windows PowerShell installer and copy buttons on site
Add install.ps1 mirroring install.sh for Windows: arch detection,
release zip download, binary extraction, user PATH update.

- copy install.ps1 to site public/ at build time (copy-install.mjs)
- serve /install.ps1 with text/plain Content-Type (vercel.json)
- add PowerShell one-liner to install page and README
- bump install.ps1 default version in bump_version.sh
- add CopyButton component next to every install command line
2026-06-08 10:16:00 +02:00
Christian Visintin
d070825dd7 chore(install.sh): remove reference to changelog 2026-06-08 10:16:00 +02:00