mirror of
https://github.com/veeso/termscp.git
synced 2025-12-07 09:36:00 -08:00
Compare commits
6 Commits
v0.18.0
...
4bebec369f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4bebec369f | ||
|
|
05c8613279 | ||
|
|
205d2813ad | ||
|
|
86660a0cc9 | ||
|
|
3c79e812eb | ||
|
|
0287e7706a |
41
.github/workflows/build-artifacts.yml
vendored
41
.github/workflows/build-artifacts.yml
vendored
@@ -4,7 +4,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
TERMSCP_VERSION: "0.18.0"
|
TERMSCP_VERSION: "0.19.0"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-binaries:
|
build-binaries:
|
||||||
@@ -29,8 +29,45 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
targets: ${{ matrix.platform.target }}
|
targets: ${{ matrix.platform.target }}
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
brew update
|
||||||
|
brew install \
|
||||||
|
bison \
|
||||||
|
cpanminus \
|
||||||
|
cups \
|
||||||
|
flex \
|
||||||
|
gettext \
|
||||||
|
gmp \
|
||||||
|
gnutls \
|
||||||
|
icu4c \
|
||||||
|
jansson \
|
||||||
|
libarchive \
|
||||||
|
libbsd \
|
||||||
|
libunistring \
|
||||||
|
libgit2 \
|
||||||
|
libtirpc \
|
||||||
|
openldap \
|
||||||
|
pkg-config \
|
||||||
|
zlib
|
||||||
|
brew link --force bison
|
||||||
|
brew link --force cups
|
||||||
|
brew link --force flex
|
||||||
|
brew link --force gettext
|
||||||
|
brew link --force gmp
|
||||||
|
brew link --force gnutls
|
||||||
|
brew link --force icu4c
|
||||||
|
brew link --force jansson
|
||||||
|
brew link --force libarchive
|
||||||
|
brew link --force libbsd
|
||||||
|
brew link --force libgit2
|
||||||
|
brew link --force libtirpc
|
||||||
|
brew link --force libunistring
|
||||||
|
brew link --force openldap
|
||||||
|
brew link --force zlib
|
||||||
|
cpanm Parse::Yapp::Driver
|
||||||
- name: Build release
|
- name: Build release
|
||||||
run: cargo build --release --target ${{ matrix.platform.target }}
|
run: cargo build --release --features smb-vendored --target ${{ matrix.platform.target }}
|
||||||
- name: Prepare artifact files
|
- name: Prepare artifact files
|
||||||
run: |
|
run: |
|
||||||
mkdir -p .artifact
|
mkdir -p .artifact
|
||||||
|
|||||||
7
.github/workflows/macos.yml
vendored
7
.github/workflows/macos.yml
vendored
@@ -22,6 +22,13 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
brew update
|
||||||
|
brew install \
|
||||||
|
pkg-config \
|
||||||
|
samba
|
||||||
|
brew link --force samba
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cargo build
|
run: cargo build
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
|
|||||||
2
.github/workflows/windows.yml
vendored
2
.github/workflows/windows.yml
vendored
@@ -15,7 +15,7 @@ env:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: windows-2019
|
runs-on: windows-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|||||||
13
CHANGELOG.md
13
CHANGELOG.md
@@ -1,6 +1,7 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
- [Changelog](#changelog)
|
- [Changelog](#changelog)
|
||||||
|
- [0.19.0](#0190)
|
||||||
- [0.18.0](#0180)
|
- [0.18.0](#0180)
|
||||||
- [0.17.0](#0170)
|
- [0.17.0](#0170)
|
||||||
- [0.16.1](#0161)
|
- [0.16.1](#0161)
|
||||||
@@ -41,6 +42,18 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 0.19.0
|
||||||
|
|
||||||
|
Released on 20/09/2025
|
||||||
|
|
||||||
|
- [Issue 356](https://github.com/veeso/termscp/issues/356): Fixed SSH auth issue not trying with the password if any RSA key was found.
|
||||||
|
- [Issue 334](https://github.com/veeso/termscp/issues/334): SMB support for MacOS with vendored build of libsmbclient.
|
||||||
|
- [Issue 337](https://github.com/veeso/termscp/issues/337): Migrated to libssh.org on Linux and MacOS for better ssh agent support.
|
||||||
|
- [Issue 361](https://github.com/veeso/termscp/issues/361): Report a message while calculating total size of files to transfer.
|
||||||
|
- [Issue 354](https://github.com/veeso/termscp/issues/354):
|
||||||
|
- Removed error popup message if failed to check for updates.
|
||||||
|
- Prevent long timeouts when checking for updates if the network is down or the DNS is not working.
|
||||||
|
|
||||||
## 0.18.0
|
## 0.18.0
|
||||||
|
|
||||||
Released on 10/06/2025
|
Released on 10/06/2025
|
||||||
|
|||||||
990
Cargo.lock
generated
990
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
26
Cargo.toml
26
Cargo.toml
@@ -10,8 +10,8 @@ license = "MIT"
|
|||||||
name = "termscp"
|
name = "termscp"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
repository = "https://github.com/veeso/termscp"
|
repository = "https://github.com/veeso/termscp"
|
||||||
version = "0.18.0"
|
version = "0.19.0"
|
||||||
rust-version = "1.85.1"
|
rust-version = "1.87.0"
|
||||||
|
|
||||||
[package.metadata.rpm]
|
[package.metadata.rpm]
|
||||||
package = "termscp"
|
package = "termscp"
|
||||||
@@ -60,6 +60,7 @@ regex = "^1"
|
|||||||
remotefs = "^0.3"
|
remotefs = "^0.3"
|
||||||
remotefs-aws-s3 = "0.4"
|
remotefs-aws-s3 = "0.4"
|
||||||
remotefs-kube = "0.4"
|
remotefs-kube = "0.4"
|
||||||
|
remotefs-smb = { version = "^0.3", optional = true }
|
||||||
remotefs-webdav = "^0.2"
|
remotefs-webdav = "^0.2"
|
||||||
rpassword = "^7"
|
rpassword = "^7"
|
||||||
self_update = { version = "^0.42", default-features = false, features = [
|
self_update = { version = "^0.42", default-features = false, features = [
|
||||||
@@ -71,11 +72,11 @@ self_update = { version = "^0.42", default-features = false, features = [
|
|||||||
] }
|
] }
|
||||||
serde = { version = "^1", features = ["derive"] }
|
serde = { version = "^1", features = ["derive"] }
|
||||||
simplelog = "^0.12"
|
simplelog = "^0.12"
|
||||||
ssh2-config = "^0.5"
|
ssh2-config = "^0.6"
|
||||||
tempfile = "3"
|
tempfile = "3"
|
||||||
thiserror = "2"
|
thiserror = "2"
|
||||||
tokio = { version = "1.44", features = ["rt"] }
|
tokio = { version = "1.44", features = ["rt"] }
|
||||||
toml = "^0.8"
|
toml = "^0.9"
|
||||||
tui-realm-stdlib = "3"
|
tui-realm-stdlib = "3"
|
||||||
tuirealm = "3"
|
tuirealm = "3"
|
||||||
tui-term = "0.2"
|
tui-term = "0.2"
|
||||||
@@ -84,17 +85,20 @@ version-compare = "^0.2"
|
|||||||
whoami = "^1.6"
|
whoami = "^1.6"
|
||||||
wildmatch = "^2"
|
wildmatch = "^2"
|
||||||
|
|
||||||
[target."cfg(not(target_os = \"macos\"))".dependencies]
|
|
||||||
remotefs-smb = { version = "^0.3", optional = true }
|
|
||||||
|
|
||||||
[target."cfg(target_family = \"unix\")".dependencies]
|
[target."cfg(target_family = \"unix\")".dependencies]
|
||||||
remotefs-ftp = { version = "^0.2", features = ["vendored", "native-tls"] }
|
remotefs-ftp = { version = "^0.3", features = [
|
||||||
remotefs-ssh = { version = "^0.6", features = ["ssh2-vendored"] }
|
"native-tls-vendored",
|
||||||
|
"native-tls",
|
||||||
|
] }
|
||||||
|
remotefs-ssh = { version = "^0.7", default-features = false, features = [
|
||||||
|
"find",
|
||||||
|
"libssh-vendored",
|
||||||
|
] }
|
||||||
uzers = "0.12"
|
uzers = "0.12"
|
||||||
|
|
||||||
[target."cfg(target_family = \"windows\")".dependencies]
|
[target."cfg(target_family = \"windows\")".dependencies]
|
||||||
remotefs-ftp = { version = "^0.2", features = ["native-tls"] }
|
remotefs-ftp = { version = "^0.3", features = ["native-tls"] }
|
||||||
remotefs-ssh = { version = "^0.6" }
|
remotefs-ssh = { version = "^0.7" }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
pretty_assertions = "^1"
|
pretty_assertions = "^1"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">Developed by <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
<p align="center">Developed by <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||||
<p align="center">Current version: 0.18.0 10/06/2025</p>
|
<p align="center">Current version: 0.19.0 10/06/2025</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://opensource.org/licenses/MIT"
|
<a href="https://opensource.org/licenses/MIT"
|
||||||
|
|||||||
4
build.rs
4
build.rs
@@ -10,8 +10,8 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||||||
posix: { target_family = "unix" },
|
posix: { target_family = "unix" },
|
||||||
win: { target_family = "windows" },
|
win: { target_family = "windows" },
|
||||||
// exclusive features
|
// exclusive features
|
||||||
smb: { all(feature = "smb", not( macos )) },
|
smb: { feature = "smb" },
|
||||||
smb_unix: { all(unix, feature = "smb", not(macos)) },
|
smb_unix: { all(unix, feature = "smb") },
|
||||||
smb_windows: { all(windows, feature = "smb") }
|
smb_windows: { all(windows, feature = "smb") }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">Entwickelt von <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
<p align="center">Entwickelt von <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||||
<p align="center">Aktuelle Version: 0.18.0 10/06/2025</p>
|
<p align="center">Aktuelle Version: 0.19.0 10/06/2025</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://opensource.org/licenses/MIT"
|
<a href="https://opensource.org/licenses/MIT"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">Desarrollado por <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
<p align="center">Desarrollado por <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||||
<p align="center">Versión actual: 0.18.0 10/06/2025</p>
|
<p align="center">Versión actual: 0.19.0 10/06/2025</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://opensource.org/licenses/MIT"
|
<a href="https://opensource.org/licenses/MIT"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">Développé par <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
<p align="center">Développé par <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||||
<p align="center">Version actuelle: 0.18.0 10/06/2025</p>
|
<p align="center">Version actuelle: 0.19.0 10/06/2025</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://opensource.org/licenses/MIT"
|
<a href="https://opensource.org/licenses/MIT"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">Sviluppato da <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
<p align="center">Sviluppato da <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||||
<p align="center">Versione corrente: 0.18.0 10/06/2025</p>
|
<p align="center">Versione corrente: 0.19.0 10/06/2025</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://opensource.org/licenses/MIT"
|
<a href="https://opensource.org/licenses/MIT"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">Desenvolvido por <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
<p align="center">Desenvolvido por <a href="https://veeso.me/" target="_blank">@veeso</a></p>
|
||||||
<p align="center">Versão atual: 0.18.0 10/06/2025</p>
|
<p align="center">Versão atual: 0.19.0 10/06/2025</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://opensource.org/licenses/MIT"
|
<a href="https://opensource.org/licenses/MIT"
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">由 <a href="https://veeso.me/" target="_blank">@veeso</a> 开发</p>
|
<p align="center">由 <a href="https://veeso.me/" target="_blank">@veeso</a> 开发</p>
|
||||||
<p align="center">当前版本: 0.18.0 10/06/2025</p>
|
<p align="center">当前版本: 0.19.0 10/06/2025</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://opensource.org/licenses/MIT"
|
<a href="https://opensource.org/licenses/MIT"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
# -f, -y, --force, --yes
|
# -f, -y, --force, --yes
|
||||||
# Skip the confirmation prompt during installation
|
# Skip the confirmation prompt during installation
|
||||||
|
|
||||||
TERMSCP_VERSION="0.18.0"
|
TERMSCP_VERSION="0.19.0"
|
||||||
GITHUB_URL="https://github.com/veeso/termscp/releases/download/v${TERMSCP_VERSION}"
|
GITHUB_URL="https://github.com/veeso/termscp/releases/download/v${TERMSCP_VERSION}"
|
||||||
DEB_URL_AMD64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_amd64.deb"
|
DEB_URL_AMD64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_amd64.deb"
|
||||||
DEB_URL_AARCH64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_arm64.deb"
|
DEB_URL_AARCH64="${GITHUB_URL}/termscp_${TERMSCP_VERSION}_arm64.deb"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
<span translate="getStarted.windows.moderation">Consider that Chocolatey moderation can take up to a few weeks
|
<span translate="getStarted.windows.moderation">Consider that Chocolatey moderation can take up to a few weeks
|
||||||
since last release, so if the latest version is not available yet,
|
since last release, so if the latest version is not available yet,
|
||||||
you can install it downloading the ZIP file from</span>
|
you can install it downloading the ZIP file from</span>
|
||||||
<a href="https://github.com/veeso/termscp/releases/latest/download/termscp.0.18.0.nupkg"
|
<a href="https://github.com/veeso/termscp/releases/latest/download/termscp.0.19.0.nupkg"
|
||||||
target="_blank">Github</a>
|
target="_blank">Github</a>
|
||||||
<span translate="getStarted.windows.then">and then, from the ZIP directory, install it via</span>
|
<span translate="getStarted.windows.then">and then, from the ZIP directory, install it via</span>
|
||||||
</p>
|
</p>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
On Debian based distros, you can install termscp using the Deb
|
On Debian based distros, you can install termscp using the Deb
|
||||||
package via:
|
package via:
|
||||||
</p>
|
</p>
|
||||||
<pre><span class="function">wget</span> -O termscp.deb <span class="string">https://github.com/veeso/termscp/releases/latest/download/termscp_0.18.0_amd64.deb</span>
|
<pre><span class="function">wget</span> -O termscp.deb <span class="string">https://github.com/veeso/termscp/releases/latest/download/termscp_0.19.0_amd64.deb</span>
|
||||||
sudo <span class="function">dpkg</span> -i <span class="string">termscp.deb</span></pre>
|
sudo <span class="function">dpkg</span> -i <span class="string">termscp.deb</span></pre>
|
||||||
</div>
|
</div>
|
||||||
<h3>
|
<h3>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
</button>
|
</button>
|
||||||
<div class="p-4 my-4 text-sm text-green-800 rounded-lg bg-green-50">
|
<div class="p-4 my-4 text-sm text-green-800 rounded-lg bg-green-50">
|
||||||
<p class="text-lg">
|
<p class="text-lg">
|
||||||
<span translate="intro.versionAlert">termscp 0.18.0 is NOW out! Download it from</span>
|
<span translate="intro.versionAlert">termscp 0.19.0 is NOW out! Download it from</span>
|
||||||
<a href="/get-started.html" translate="intro.here">here!</a>
|
<a href="/get-started.html" translate="intro.here">here!</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"intro": {
|
"intro": {
|
||||||
"caption": "A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/Kube/S3/WebDAV",
|
"caption": "A feature rich terminal UI file transfer and explorer with support for SCP/SFTP/FTP/Kube/S3/WebDAV",
|
||||||
"getStarted": "Get started →",
|
"getStarted": "Get started →",
|
||||||
"versionAlert": "termscp 0.18.0 is NOW out! Download it from",
|
"versionAlert": "termscp 0.19.0 is NOW out! Download it from",
|
||||||
"here": "here",
|
"here": "here",
|
||||||
"features": {
|
"features": {
|
||||||
"handy": {
|
"handy": {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"intro": {
|
"intro": {
|
||||||
"caption": "Un explorador y transferencia de archivos de terminal rico en funciones, con apoyo para SCP/SFTP/FTP/Kube/S3/WebDAV",
|
"caption": "Un explorador y transferencia de archivos de terminal rico en funciones, con apoyo para SCP/SFTP/FTP/Kube/S3/WebDAV",
|
||||||
"getStarted": "Para iniciar →",
|
"getStarted": "Para iniciar →",
|
||||||
"versionAlert": "termscp 0.18.0 ya está disponible! Descárgalo desde",
|
"versionAlert": "termscp 0.19.0 ya está disponible! Descárgalo desde",
|
||||||
"here": "aquì",
|
"here": "aquì",
|
||||||
"features": {
|
"features": {
|
||||||
"handy": {
|
"handy": {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"intro": {
|
"intro": {
|
||||||
"caption": "Un file transfer et navigateur de terminal riche en fonctionnalités avec support pour SCP/SFTP/FTP/Kube/S3/WebDAV",
|
"caption": "Un file transfer et navigateur de terminal riche en fonctionnalités avec support pour SCP/SFTP/FTP/Kube/S3/WebDAV",
|
||||||
"getStarted": "Pour commencer →",
|
"getStarted": "Pour commencer →",
|
||||||
"versionAlert": "termscp 0.18.0 est maintenant sorti! Télécharge-le depuis",
|
"versionAlert": "termscp 0.19.0 est maintenant sorti! Télécharge-le depuis",
|
||||||
"here": "ici",
|
"here": "ici",
|
||||||
"features": {
|
"features": {
|
||||||
"handy": {
|
"handy": {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"intro": {
|
"intro": {
|
||||||
"caption": "Un file transfer ed explorer ricco di funzionalità con supporto per SFTP/SCP/FTP/S3",
|
"caption": "Un file transfer ed explorer ricco di funzionalità con supporto per SFTP/SCP/FTP/S3",
|
||||||
"getStarted": "Installa termscp →",
|
"getStarted": "Installa termscp →",
|
||||||
"versionAlert": "termscp 0.18.0 è ORA disponbile! Scaricalo da",
|
"versionAlert": "termscp 0.19.0 è ORA disponbile! Scaricalo da",
|
||||||
"here": "qui",
|
"here": "qui",
|
||||||
"features": {
|
"features": {
|
||||||
"handy": {
|
"handy": {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
"intro": {
|
"intro": {
|
||||||
"caption": "功能丰富的终端 UI 文件传输和浏览器,支持 SCP/SFTP/FTP/Kube/S3/WebDAV",
|
"caption": "功能丰富的终端 UI 文件传输和浏览器,支持 SCP/SFTP/FTP/Kube/S3/WebDAV",
|
||||||
"getStarted": "开始 →",
|
"getStarted": "开始 →",
|
||||||
"versionAlert": "termscp 0.18.0 现已发布! 从下载",
|
"versionAlert": "termscp 0.19.0 现已发布! 从下载",
|
||||||
"here": "这里",
|
"here": "这里",
|
||||||
"features": {
|
"features": {
|
||||||
"handy": {
|
"handy": {
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ use remotefs_kube::KubeMultiPodFs as KubeFs;
|
|||||||
use remotefs_smb::SmbOptions;
|
use remotefs_smb::SmbOptions;
|
||||||
#[cfg(smb)]
|
#[cfg(smb)]
|
||||||
use remotefs_smb::{SmbCredentials, SmbFs};
|
use remotefs_smb::{SmbCredentials, SmbFs};
|
||||||
|
#[cfg(windows)]
|
||||||
|
use remotefs_ssh::LibSsh2Session as SshSession;
|
||||||
|
#[cfg(unix)]
|
||||||
|
use remotefs_ssh::LibSshSession as SshSession;
|
||||||
use remotefs_ssh::{ScpFs, SftpFs, SshAgentIdentity, SshConfigParseRule, SshOpts};
|
use remotefs_ssh::{ScpFs, SftpFs, SshAgentIdentity, SshConfigParseRule, SshOpts};
|
||||||
use remotefs_webdav::WebDAVFs;
|
use remotefs_webdav::WebDAVFs;
|
||||||
|
|
||||||
@@ -138,12 +142,18 @@ impl RemoteFsBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Build scp client
|
/// Build scp client
|
||||||
fn scp_client(params: GenericProtocolParams, config_client: &ConfigClient) -> ScpFs {
|
fn scp_client(
|
||||||
|
params: GenericProtocolParams,
|
||||||
|
config_client: &ConfigClient,
|
||||||
|
) -> ScpFs<SshSession> {
|
||||||
Self::build_ssh_opts(params, config_client).into()
|
Self::build_ssh_opts(params, config_client).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Build sftp client
|
/// Build sftp client
|
||||||
fn sftp_client(params: GenericProtocolParams, config_client: &ConfigClient) -> SftpFs {
|
fn sftp_client(
|
||||||
|
params: GenericProtocolParams,
|
||||||
|
config_client: &ConfigClient,
|
||||||
|
) -> SftpFs<SshSession> {
|
||||||
Self::build_ssh_opts(params, config_client).into()
|
Self::build_ssh_opts(params, config_client).into()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
//!
|
//!
|
||||||
//! Automatic update module. This module is used to upgrade the current version of termscp to the latest available on Github
|
//! Automatic update module. This module is used to upgrade the current version of termscp to the latest available on Github
|
||||||
|
|
||||||
|
use std::net::ToSocketAddrs as _;
|
||||||
|
|
||||||
use self_update::backends::github::Update as GithubUpdater;
|
use self_update::backends::github::Update as GithubUpdater;
|
||||||
pub use self_update::errors::Error as UpdateError;
|
pub use self_update::errors::Error as UpdateError;
|
||||||
use self_update::update::Release as UpdRelease;
|
use self_update::update::Release as UpdRelease;
|
||||||
@@ -67,6 +69,9 @@ impl Update {
|
|||||||
/// otherwise if no version is available, return None
|
/// otherwise if no version is available, return None
|
||||||
/// In case of error returns Error with the error description
|
/// In case of error returns Error with the error description
|
||||||
pub fn is_new_version_available() -> Result<Option<Release>, UpdateError> {
|
pub fn is_new_version_available() -> Result<Option<Release>, UpdateError> {
|
||||||
|
// check if api.github.com is reachable before doing anything
|
||||||
|
Self::check_github_api_reachable()?;
|
||||||
|
|
||||||
info!("Checking whether a new version is available...");
|
info!("Checking whether a new version is available...");
|
||||||
GithubUpdater::configure()
|
GithubUpdater::configure()
|
||||||
// Set default options
|
// Set default options
|
||||||
@@ -83,6 +88,27 @@ impl Update {
|
|||||||
.map(Self::check_version)
|
.map(Self::check_version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check if api.github.com is reachable
|
||||||
|
/// This is useful to avoid long timeouts when the network is down
|
||||||
|
/// or the DNS is not working
|
||||||
|
fn check_github_api_reachable() -> Result<(), UpdateError> {
|
||||||
|
let Some(socket_addr) = ("api.github.com", 443)
|
||||||
|
.to_socket_addrs()
|
||||||
|
.ok()
|
||||||
|
.and_then(|mut i| i.next())
|
||||||
|
else {
|
||||||
|
error!("Could not resolve api.github.com");
|
||||||
|
return Err(UpdateError::Network(
|
||||||
|
"Could not resolve api.github.com".into(),
|
||||||
|
));
|
||||||
|
};
|
||||||
|
|
||||||
|
// just try to open a connection to api.github.com with a timeout of 5 seconds with tcp
|
||||||
|
std::net::TcpStream::connect_timeout(&socket_addr, std::time::Duration::from_secs(5))
|
||||||
|
.map(|_| ())
|
||||||
|
.map_err(|e| UpdateError::Network(format!("Could not reach api.github.com: {e}")))
|
||||||
|
}
|
||||||
|
|
||||||
/// In case received version is newer than current one, version as Some is returned; otherwise None
|
/// In case received version is newer than current one, version as Some is returned; otherwise None
|
||||||
fn check_version(r: Release) -> Option<Release> {
|
fn check_version(r: Release) -> Option<Release> {
|
||||||
debug!("got version from GitHub: {}", r.version);
|
debug!("got version from GitHub: {}", r.version);
|
||||||
@@ -212,4 +238,9 @@ mod test {
|
|||||||
assert!(!Update::is_new_version_higher("0.9.9", "0.10.1"));
|
assert!(!Update::is_new_version_higher("0.9.9", "0.10.1"));
|
||||||
assert!(!Update::is_new_version_higher("0.10.9", "0.11.0"));
|
assert!(!Update::is_new_version_higher("0.10.9", "0.11.0"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_should_check_whether_github_api_is_reachable() {
|
||||||
|
assert!(Update::check_github_api_reachable().is_ok());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -223,10 +223,7 @@ impl AuthActivity {
|
|||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
// Report error
|
// Report error
|
||||||
error!("Failed to get latest version: {}", err);
|
error!("Failed to get latest version: {err}",);
|
||||||
self.mount_error(
|
|
||||||
format!("Could not check for new updates: {err}").as_str(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ impl FileTransferActivity {
|
|||||||
Ok(_) => self.log(LogLevel::Info, format!("Opened file `{}`", p.display())),
|
Ok(_) => self.log(LogLevel::Info, format!("Opened file `{}`", p.display())),
|
||||||
Err(err) => self.log(
|
Err(err) => self.log(
|
||||||
LogLevel::Error,
|
LogLevel::Error,
|
||||||
format!("Failed to open filoe `{}`: {}", p.display(), err),
|
format!("Failed to open file `{}`: {}", p.display(), err),
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
// NOTE: clear screen in order to prevent crap on stderr
|
// NOTE: clear screen in order to prevent crap on stderr
|
||||||
|
|||||||
@@ -1260,7 +1260,10 @@ impl FileTransferActivity {
|
|||||||
|
|
||||||
/// Get total size of transfer for host_bridgehost
|
/// Get total size of transfer for host_bridgehost
|
||||||
fn get_total_transfer_size_host(&mut self, entry: &File) -> usize {
|
fn get_total_transfer_size_host(&mut self, entry: &File) -> usize {
|
||||||
if entry.is_dir() {
|
// mount message to tell we are calculating size
|
||||||
|
self.mount_blocking_wait("Calculating transfer size…");
|
||||||
|
|
||||||
|
let sz = if entry.is_dir() {
|
||||||
// List dir
|
// List dir
|
||||||
match self.host_bridge.list_dir(entry.path()) {
|
match self.host_bridge.list_dir(entry.path()) {
|
||||||
Ok(files) => files
|
Ok(files) => files
|
||||||
@@ -1281,12 +1284,18 @@ impl FileTransferActivity {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
entry.metadata.size as usize
|
entry.metadata.size as usize
|
||||||
}
|
};
|
||||||
|
self.umount_wait();
|
||||||
|
|
||||||
|
sz
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get total size of transfer for remote host
|
/// Get total size of transfer for remote host
|
||||||
fn get_total_transfer_size_remote(&mut self, entry: &File) -> usize {
|
fn get_total_transfer_size_remote(&mut self, entry: &File) -> usize {
|
||||||
if entry.is_dir() {
|
// mount message to tell we are calculating size
|
||||||
|
self.mount_blocking_wait("Calculating transfer size…");
|
||||||
|
|
||||||
|
let sz = if entry.is_dir() {
|
||||||
// List directory
|
// List directory
|
||||||
match self.client.list_dir(entry.path()) {
|
match self.client.list_dir(entry.path()) {
|
||||||
Ok(files) => files
|
Ok(files) => files
|
||||||
@@ -1307,7 +1316,11 @@ impl FileTransferActivity {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
entry.metadata.size as usize
|
entry.metadata.size as usize
|
||||||
}
|
};
|
||||||
|
|
||||||
|
self.umount_wait();
|
||||||
|
|
||||||
|
sz
|
||||||
}
|
}
|
||||||
|
|
||||||
// file changed
|
// file changed
|
||||||
|
|||||||
Reference in New Issue
Block a user