fix: tuirealm 2.x (#299)

This commit is contained in:
Christian Visintin
2024-10-14 09:55:52 +02:00
committed by GitHub
parent 4e63093d25
commit 7eb913ec7b
28 changed files with 303 additions and 457 deletions

View File

@@ -50,6 +50,8 @@ Released on
- Bookmarks are automatically loaded into the last auth form.
- [Issue 289](https://github.com/veeso/termscp/issues/289): Use `uzers` instead of the dead package `users` which has several vulnerabilities
- [Issue 290](https://github.com/veeso/termscp/issues/290): Password prompt was broken
- [Issue 298](https://github.com/veeso/termscp/issues/298): tuirealm 2.x
- Fixed some performance issues where sometimes the app froze for a couple of seconds, thanks to this <https://github.com/veeso/tui-realm/pull/78>.
## 0.15.0

298
Cargo.lock generated
View File

@@ -93,7 +93,7 @@ dependencies = [
"argh_shared",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -113,7 +113,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -331,9 +331,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.1.28"
version = "1.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1"
checksum = "b16803a61b81d9eabb7eae2588776c4c1e584b738ede45fdbb4c972cec1e9945"
dependencies = [
"jobserver",
"libc",
@@ -378,13 +378,14 @@ dependencies = [
[[package]]
name = "compact_str"
version = "0.7.1"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
checksum = "6050c3a16ddab2e412160b31f2c871015704239bca62f72f6e5f0be631d3f644"
dependencies = [
"castaway",
"cfg-if",
"itoa",
"rustversion",
"ryu",
"static_assertions",
]
@@ -447,6 +448,16 @@ dependencies = [
"libc",
]
[[package]]
name = "core-foundation"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63"
dependencies = [
"core-foundation-sys",
"libc",
]
[[package]]
name = "core-foundation-sys"
version = "0.8.7"
@@ -516,31 +527,15 @@ checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
[[package]]
name = "crossterm"
version = "0.25.0"
version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
dependencies = [
"bitflags 1.3.2",
"crossterm_winapi",
"libc",
"mio",
"parking_lot 0.12.3",
"signal-hook",
"signal-hook-mio",
"winapi",
]
[[package]]
name = "crossterm"
version = "0.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6"
dependencies = [
"bitflags 2.6.0",
"crossterm_winapi",
"libc",
"mio",
"mio 1.0.2",
"parking_lot 0.12.3",
"rustix",
"signal-hook",
"signal-hook-mio",
"winapi",
@@ -595,7 +590,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -619,7 +614,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -630,7 +625,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
dependencies = [
"darling_core",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -652,9 +647,9 @@ dependencies = [
[[package]]
name = "dbus-secret-service"
version = "4.0.2"
version = "4.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1caa0c241c01ad8d99a78d553567d38f873dd3ac16eca33a5370d650ab25584e"
checksum = "b42a16374481d92aed73ae45b1f120207d8e71d24fb89f357fadbd8f946fd84b"
dependencies = [
"dbus",
"futures-util",
@@ -697,38 +692,38 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
name = "derive_builder"
version = "0.20.1"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd33f37ee6a119146a1781d3356a7c26028f83d779b2e04ecd45fdc75c76877b"
checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
dependencies = [
"derive_builder_macro",
]
[[package]]
name = "derive_builder_core"
version = "0.20.1"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7431fa049613920234f22c47fdc33e6cf3ee83067091ea4277a3f8c4587aae38"
checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
dependencies = [
"darling",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
name = "derive_builder_macro"
version = "0.20.1"
version = "0.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4abae7035bf79b9877b779505d8cf3749285b80c43941eda66604841889451dc"
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
dependencies = [
"derive_builder_core",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -818,7 +813,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -1050,7 +1045,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -1189,6 +1184,12 @@ version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
[[package]]
name = "hermit-abi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
[[package]]
name = "hex"
version = "0.4.3"
@@ -1502,6 +1503,16 @@ dependencies = [
"libc",
]
[[package]]
name = "instability"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b23a0c8dfe501baac4adf6ebbfa6eddf8f0c07f56b058cc1288017e32397846c"
dependencies = [
"quote",
"syn",
]
[[package]]
name = "instant"
version = "0.1.13"
@@ -1536,15 +1547,6 @@ dependencies = [
"once_cell",
]
[[package]]
name = "itertools"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.13.0"
@@ -1571,9 +1573,9 @@ dependencies = [
[[package]]
name = "js-sys"
version = "0.3.70"
version = "0.3.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9"
dependencies = [
"wasm-bindgen",
]
@@ -1608,13 +1610,13 @@ dependencies = [
[[package]]
name = "keyring"
version = "3.3.0"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fa83d1ca02db069b5fbe94b23b584d588e989218310c9c15015bb5571ef1a94"
checksum = "bd3d701d3de5b9c4b0d9d077f8c2c66f0388d75e96932ebbb7cdff8713d7f7c6"
dependencies = [
"byteorder",
"dbus-secret-service",
"security-framework",
"security-framework 3.0.0",
"windows-sys 0.59.0",
]
@@ -1724,7 +1726,7 @@ dependencies = [
"proc-macro2",
"quote",
"regex",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -1881,7 +1883,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -1934,6 +1936,19 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "mio"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
dependencies = [
"hermit-abi",
"libc",
"log",
"wasi",
"windows-sys 0.52.0",
]
[[package]]
name = "native-tls"
version = "0.2.12"
@@ -1946,7 +1961,7 @@ dependencies = [
"openssl-probe",
"openssl-sys",
"schannel",
"security-framework",
"security-framework 2.11.1",
"security-framework-sys",
"tempfile",
]
@@ -1971,7 +1986,7 @@ dependencies = [
"kqueue",
"libc",
"log",
"mio",
"mio 0.8.11",
"walkdir",
"windows-sys 0.48.0",
]
@@ -2196,7 +2211,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -2326,9 +2341,9 @@ checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
[[package]]
name = "pathdiff"
version = "0.2.1"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
checksum = "d61c5ce1153ab5b689d0c074c4e7fc613e942dfb7dd9eea5ab202d2ad91fe361"
[[package]]
name = "pavao"
@@ -2391,7 +2406,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -2422,7 +2437,7 @@ checksum = "a4502d8515ca9f32f1fb543d987f63d95a14934883db45bdb48060b6b69257f8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -2610,19 +2625,20 @@ dependencies = [
[[package]]
name = "ratatui"
version = "0.26.3"
version = "0.28.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f44c9e68fd46eda15c646fbb85e1040b657a58cdc8c98db1d97a55930d991eef"
checksum = "fdef7f9be5c0122f890d58bdf4d964349ba6a6161f705907526d891efabba57d"
dependencies = [
"bitflags 2.6.0",
"cassowary",
"compact_str",
"crossterm 0.27.0",
"itertools 0.12.1",
"crossterm",
"instability",
"itertools",
"lru",
"paste",
"stability",
"strum",
"strum_macros",
"unicode-segmentation",
"unicode-truncate",
"unicode-width 0.1.14",
@@ -3044,7 +3060,7 @@ dependencies = [
"rustls-pemfile 2.2.0",
"rustls-pki-types",
"schannel",
"security-framework",
"security-framework 2.11.1",
]
[[package]]
@@ -3057,7 +3073,7 @@ dependencies = [
"rustls-pemfile 2.2.0",
"rustls-pki-types",
"schannel",
"security-framework",
"security-framework 2.11.1",
]
[[package]]
@@ -3137,9 +3153,9 @@ dependencies = [
[[package]]
name = "scc"
version = "2.2.0"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "836f1e0f4963ef5288b539b643b35e043e76a32d0f4e47e67febf69576527f50"
checksum = "553f8299af7450cda9a52d3a370199904e7a46b5ffd1bef187c4a6af3bb6db69"
dependencies = [
"sdd",
]
@@ -3171,9 +3187,9 @@ dependencies = [
[[package]]
name = "sdd"
version = "3.0.3"
version = "3.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "60a7b59a5d9b0099720b417b6325d91a52cbf5b3dcb5041d864be53eefa58abc"
checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95"
[[package]]
name = "secrecy"
@@ -3192,7 +3208,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
dependencies = [
"bitflags 2.6.0",
"core-foundation",
"core-foundation 0.9.4",
"core-foundation-sys",
"libc",
"security-framework-sys",
]
[[package]]
name = "security-framework"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9d0283c0a4a22a0f1b0e4edca251aa20b92fc96eaa09b84bec052f9415e9d71"
dependencies = [
"bitflags 2.6.0",
"core-foundation 0.10.0",
"core-foundation-sys",
"libc",
"security-framework-sys",
@@ -3279,7 +3308,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -3350,7 +3379,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -3411,7 +3440,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd"
dependencies = [
"libc",
"mio",
"mio 1.0.2",
"signal-hook",
]
@@ -3522,16 +3551,6 @@ dependencies = [
"wildmatch",
]
[[package]]
name = "stability"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac"
dependencies = [
"quote",
"syn 2.0.79",
]
[[package]]
name = "static_assertions"
version = "1.1.0"
@@ -3563,7 +3582,7 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -3586,17 +3605,6 @@ dependencies = [
"thiserror",
]
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.79"
@@ -3644,7 +3652,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
dependencies = [
"bitflags 1.3.2",
"core-foundation",
"core-foundation 0.9.4",
"system-configuration-sys",
]
@@ -3783,7 +3791,7 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -3863,7 +3871,7 @@ dependencies = [
"backtrace",
"bytes",
"libc",
"mio",
"mio 0.8.11",
"pin-project-lite",
"signal-hook-registry",
"socket2",
@@ -3879,7 +3887,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -4030,7 +4038,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -4048,54 +4056,40 @@ version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "tui"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1"
dependencies = [
"bitflags 1.3.2",
"cassowary",
"crossterm 0.25.0",
"unicode-segmentation",
"unicode-width 0.1.14",
]
[[package]]
name = "tui-realm-stdlib"
version = "1.3.2"
version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50ad506e872692d85265328353d92f4f633dd5add7f73ebd93e8d0368a708447"
checksum = "78a24d06b8403c57b32a3d3fdac795adf4ef8610e5f9650a3629efc8a9d6c0bb"
dependencies = [
"textwrap",
"tuirealm",
"unicode-width 0.1.14",
"unicode-width 0.2.0",
]
[[package]]
name = "tuirealm"
version = "1.9.2"
version = "2.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c358c39cb9e1b45702ea46afc77d39589d720ca9cf5f1e11a3106342ea6a4e76"
checksum = "0d3865c9f0e84c07c991c24c853f095bb764859fa3806fe6e00b559f40f1253f"
dependencies = [
"bitflags 2.6.0",
"crossterm 0.27.0",
"crossterm",
"lazy-regex",
"ratatui",
"thiserror",
"tui",
"tuirealm_derive",
]
[[package]]
name = "tuirealm_derive"
version = "1.0.0"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0adcdaf59881626555558eae08f8a53003c8a1961723b4d7a10c51599abbc81"
checksum = "caa8b0560f4245acc0bbe0e1d76e1f6a308145dd6e107befce4cf29e7fe32662"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
"syn",
]
[[package]]
@@ -4167,7 +4161,7 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf"
dependencies = [
"itertools 0.13.0",
"itertools",
"unicode-segmentation",
"unicode-width 0.1.14",
]
@@ -4323,9 +4317,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
[[package]]
name = "wasm-bindgen"
version = "0.2.93"
version = "0.2.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
dependencies = [
"cfg-if",
"once_cell",
@@ -4334,24 +4328,24 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.93"
version = "0.2.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
dependencies = [
"bumpalo",
"log",
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.43"
version = "0.4.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed"
checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b"
dependencies = [
"cfg-if",
"js-sys",
@@ -4361,9 +4355,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.93"
version = "0.2.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -4371,28 +4365,28 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.93"
version = "0.2.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.93"
version = "0.2.95"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
[[package]]
name = "web-sys"
version = "0.3.70"
version = "0.3.72"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0"
checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112"
dependencies = [
"js-sys",
"wasm-bindgen",
@@ -4544,7 +4538,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -4555,7 +4549,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -4566,7 +4560,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -4577,7 +4571,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]
@@ -4830,7 +4824,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.79",
"syn",
]
[[package]]

View File

@@ -77,8 +77,8 @@ tempfile = "^3"
thiserror = "^1"
tokio = { version = "=1.38.1", features = ["rt"] }
toml = "^0.8"
tui-realm-stdlib = "^1.3"
tuirealm = "^1.9"
tui-realm-stdlib = "2"
tuirealm = "2"
unicode-width = "^0.2"
version-compare = "^0.2"
whoami = "^1.5"

View File

@@ -112,7 +112,7 @@ mod tests {
use std::path::PathBuf;
use pretty_assertions::assert_eq;
use tuirealm::tui::style::Color;
use tuirealm::ratatui::style::Color;
use super::*;
use crate::config::bookmarks::{Bookmark, KubeParams, S3Params, SmbParams, UserHosts};

View File

@@ -6,7 +6,7 @@
// ext
use serde::de::Error as DeError;
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use tuirealm::tui::style::Color;
use tuirealm::ratatui::style::Color;
use crate::utils::fmt::fmt_color;
use crate::utils::parser::parse_color;

View File

@@ -143,7 +143,7 @@ impl ThemeProvider {
mod test {
use pretty_assertions::assert_eq;
use tempfile::TempDir;
use tuirealm::tui::style::Color;
use tuirealm::ratatui::style::Color;
use super::*;

View File

@@ -17,7 +17,7 @@ use tuirealm::application::PollStrategy;
use tuirealm::listener::EventListenerCfg;
use tuirealm::{Application, NoUserEvent, Update};
use super::{Activity, Context, ExitReason};
use super::{Activity, Context, ExitReason, CROSSTERM_MAX_POLL};
use crate::config::themes::Theme;
use crate::filetransfer::{FileTransferParams, FileTransferProtocol};
use crate::system::bookmarks_client::BookmarksClient;
@@ -255,7 +255,7 @@ impl AuthActivity {
AuthActivity {
app: Application::init(
EventListenerCfg::default()
.default_input_listener(ticks)
.crossterm_input_listener(ticks, CROSSTERM_MAX_POLL)
.poll_timeout(ticks),
),
context: None,

View File

@@ -7,8 +7,8 @@ use std::path::PathBuf;
use std::str::FromStr;
use tuirealm::props::Color;
use tuirealm::tui::layout::{Constraint, Direction, Layout};
use tuirealm::tui::widgets::Clear;
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::ratatui::widgets::Clear;
use tuirealm::{State, StateValue, Sub, SubClause, SubEventClause};
use super::{
@@ -140,7 +140,7 @@ impl AuthActivity {
let mut ctx: Context = self.context.take().unwrap();
let _ = ctx.terminal().raw_mut().draw(|f| {
// Check window size
let height: u16 = f.size().height;
let height: u16 = f.area().height;
self.check_minimum_window_size(height);
// Prepare chunks
let body = Layout::default()
@@ -152,7 +152,7 @@ impl AuthActivity {
]
.as_ref(),
)
.split(f.size());
.split(f.area());
// Footer
self.app.view(&Id::HelpFooter, f, body[1]);
let auth_form_len = 7 + self.max_input_mask_size();
@@ -214,43 +214,43 @@ impl AuthActivity {
self.app.view(&Id::RecentsList, f, bookmark_chunks[1]);
// Popups
if self.app.mounted(&Id::ErrorPopup) {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ErrorPopup, f, popup);
} else if self.app.mounted(&Id::InfoPopup) {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::InfoPopup, f, popup);
} else if self.app.mounted(&Id::WaitPopup) {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WaitPopup, f, popup);
} else if self.app.mounted(&Id::WindowSizeError) {
let popup = Popup(Size::Percentage(80), Size::Percentage(20)).draw_in(f.size());
let popup = Popup(Size::Percentage(80), Size::Percentage(20)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WindowSizeError, f, popup);
} else if self.app.mounted(&Id::QuitPopup) {
// make popup
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::QuitPopup, f, popup);
} else if self.app.mounted(&Id::DeleteBookmarkPopup) {
// make popup
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::DeleteBookmarkPopup, f, popup);
} else if self.app.mounted(&Id::DeleteRecentPopup) {
// make popup
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::DeleteRecentPopup, f, popup);
} else if self.app.mounted(&Id::NewVersionChangelog) {
// make popup
let popup = Popup(Size::Percentage(90), Size::Percentage(85)).draw_in(f.size());
let popup = Popup(Size::Percentage(90), Size::Percentage(85)).draw_in(f.area());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)
@@ -266,12 +266,12 @@ impl AuthActivity {
self.app.view(&Id::InstallUpdatePopup, f, popup_chunks[1]);
} else if self.app.mounted(&Id::Keybindings) {
// make popup
let popup = Popup(Size::Percentage(50), Size::Percentage(70)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Percentage(70)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::Keybindings, f, popup);
} else if self.app.mounted(&Id::BookmarkSavePassword) {
// make popup
let popup = Popup(Size::Percentage(20), Size::Percentage(20)).draw_in(f.size());
let popup = Popup(Size::Percentage(20), Size::Percentage(20)).draw_in(f.area());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)
@@ -294,8 +294,8 @@ impl AuthActivity {
fn render_host_bridge_input_mask(
&mut self,
f: &mut tuirealm::tui::Frame<'_>,
area: tuirealm::tui::layout::Rect,
f: &mut tuirealm::ratatui::Frame<'_>,
area: tuirealm::ratatui::layout::Rect,
) {
let protocol_and_mask_chunks = Layout::default()
.constraints(
@@ -372,8 +372,8 @@ impl AuthActivity {
fn render_remote_input_mask(
&mut self,
f: &mut tuirealm::tui::Frame<'_>,
area: tuirealm::tui::layout::Rect,
f: &mut tuirealm::ratatui::Frame<'_>,
area: tuirealm::ratatui::layout::Rect,
) {
let protocol_and_mask_chunks = Layout::default()
.constraints(
@@ -2019,43 +2019,15 @@ impl AuthActivity {
/// Returns a sub clause which requires that no popup is mounted in order to be satisfied
fn no_popup_mounted_clause() -> SubClause<Id> {
SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ErrorPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::InfoPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::Keybindings,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::DeleteBookmarkPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::DeleteRecentPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::InstallUpdatePopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::BookmarkSavePassword,
)))),
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::WaitPopup,
)))),
)),
)),
)),
)),
)),
)),
tuirealm::subclause_and_not!(
Id::ErrorPopup,
Id::InfoPopup,
Id::Keybindings,
Id::DeleteBookmarkPopup,
Id::DeleteRecentPopup,
Id::InstallUpdatePopup,
Id::BookmarkSavePassword,
Id::WaitPopup
)
}
}

View File

@@ -5,7 +5,7 @@
use tuirealm::command::{Cmd, CmdResult, Direction, Position};
use tuirealm::event::{Key, KeyEvent};
use tuirealm::props::{Alignment, AttrValue, Attribute, Borders, Color, Style, Table};
use tuirealm::tui::widgets::{List as TuiList, ListDirection, ListItem, ListState};
use tuirealm::ratatui::widgets::{List as TuiList, ListDirection, ListItem, ListState};
use tuirealm::{Component, Event, MockComponent, NoUserEvent, Props, State, StateValue};
use super::{Msg, UiMsg};
@@ -32,7 +32,7 @@ impl Log {
}
impl MockComponent for Log {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::tui::layout::Rect) {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::ratatui::layout::Rect) {
let width: usize = area.width as usize - 4;
let focus = self
.props

View File

@@ -1036,7 +1036,7 @@ pub struct ProgressBarFull {
}
impl ProgressBarFull {
pub fn new<S: AsRef<str>>(prog: f64, label: S, title: S, color: Color) -> Self {
pub fn new<S: Into<String>>(prog: f64, label: S, title: S, color: Color) -> Self {
Self {
component: ProgressBar::default()
.borders(
@@ -1074,7 +1074,7 @@ pub struct ProgressBarPartial {
}
impl ProgressBarPartial {
pub fn new<S: AsRef<str>>(prog: f64, label: S, title: S, color: Color) -> Self {
pub fn new<S: Into<String>>(prog: f64, label: S, title: S, color: Color) -> Self {
Self {
component: ProgressBar::default()
.borders(

View File

@@ -3,7 +3,7 @@ use tui_realm_stdlib::Checkbox;
use tuirealm::command::{Cmd, CmdResult, Direction};
use tuirealm::event::{Key, KeyEvent};
use tuirealm::props::{Alignment, AttrValue, Attribute, BorderSides, Borders, Color};
use tuirealm::tui::layout::{Constraint, Direction as LayoutDirection, Layout};
use tuirealm::ratatui::layout::{Constraint, Direction as LayoutDirection, Layout};
use tuirealm::{Component, Event, MockComponent, NoUserEvent, Props, State, StateValue};
use super::{Msg, TransferMsg, UiMsg};
@@ -186,7 +186,7 @@ impl MockComponent for ChmodPopup {
State::One(StateValue::U32(self.get_mode().into()))
}
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::tui::layout::Rect) {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::ratatui::layout::Rect) {
if self.props.get_or(Attribute::Display, AttrValue::Flag(true)) != AttrValue::Flag(true) {
return;
}

View File

@@ -198,7 +198,7 @@ impl GotoPopup {
}
impl MockComponent for GotoPopup {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::tui::prelude::Rect) {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::ratatui::prelude::Rect) {
self.input.view(frame, area);
}

View File

@@ -6,8 +6,8 @@ use tuirealm::command::{Cmd, CmdResult, Direction, Position};
use tuirealm::props::{
Alignment, AttrValue, Attribute, Borders, Color, Style, Table, TextModifiers,
};
use tuirealm::tui::text::{Line, Span};
use tuirealm::tui::widgets::{List as TuiList, ListDirection, ListItem, ListState};
use tuirealm::ratatui::text::{Line, Span};
use tuirealm::ratatui::widgets::{List as TuiList, ListDirection, ListItem, ListState};
use tuirealm::{MockComponent, Props, State, StateValue};
pub const FILE_LIST_CMD_SELECT_ALL: &str = "A";
@@ -175,7 +175,7 @@ impl FileList {
}
impl MockComponent for FileList {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::tui::layout::Rect) {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::ratatui::layout::Rect) {
let title = self
.props
.get_or(

View File

@@ -1,7 +1,7 @@
use tui_realm_stdlib::Input;
use tuirealm::command::{Cmd, CmdResult};
use tuirealm::props::{Alignment, AttrValue, Attribute, Borders, Color, Table};
use tuirealm::tui::layout::{Constraint, Direction, Layout};
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::{MockComponent, State};
use super::file_list::FileList;
@@ -88,7 +88,7 @@ impl FileListWithSearch {
}
impl MockComponent for FileListWithSearch {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::tui::layout::Rect) {
fn view(&mut self, frame: &mut tuirealm::Frame, area: tuirealm::ratatui::layout::Rect) {
// split the area in two
let chunks = Layout::default()
.direction(Direction::Vertical)

View File

@@ -28,7 +28,7 @@ use session::TransferPayload;
use tempfile::TempDir;
use tuirealm::{Application, EventListenerCfg, NoUserEvent};
use super::{Activity, Context, ExitReason};
use super::{Activity, Context, ExitReason, CROSSTERM_MAX_POLL};
use crate::config::themes::Theme;
use crate::explorer::{FileExplorer, FileSorting};
use crate::filetransfer::{
@@ -256,7 +256,7 @@ impl FileTransferActivity {
app: Application::init(
EventListenerCfg::default()
.poll_timeout(ticks)
.default_input_listener(ticks),
.crossterm_input_listener(ticks, CROSSTERM_MAX_POLL),
),
redraw: true,
host_bridge,

View File

@@ -7,8 +7,8 @@
use remotefs::fs::{File, UnixPex};
use tuirealm::event::{Key, KeyEvent, KeyModifiers};
use tuirealm::props::{PropPayload, PropValue, TextSpan};
use tuirealm::tui::layout::{Constraint, Direction, Layout};
use tuirealm::tui::widgets::Clear;
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::ratatui::widgets::Clear;
use tuirealm::{AttrValue, Attribute, Sub, SubClause, SubEventClause};
use unicode_width::UnicodeWidthStr;
@@ -106,7 +106,7 @@ impl FileTransferActivity {
]
.as_ref(),
)
.split(f.size());
.split(f.area());
// main chunks
let main_chunks = Layout::default()
.direction(Direction::Vertical)
@@ -159,74 +159,74 @@ impl FileTransferActivity {
if self.app.mounted(&Id::FatalPopup) {
let popup = Popup(
Size::Percentage(50),
self.calc_popup_height(Id::FatalPopup, f.size().width, f.size().height),
self.calc_popup_height(Id::FatalPopup, f.area().width, f.area().height),
)
.draw_in(f.size());
.draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::FatalPopup, f, popup);
} else if self.app.mounted(&Id::CopyPopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::CopyPopup, f, popup);
} else if self.app.mounted(&Id::ChmodPopup) {
let popup = Popup(Size::Percentage(50), Size::Unit(12)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(12)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ChmodPopup, f, popup);
} else if self.app.mounted(&Id::FilterPopup) {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::FilterPopup, f, popup);
} else if self.app.mounted(&Id::GotoPopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::GotoPopup, f, popup);
} else if self.app.mounted(&Id::MkdirPopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::MkdirPopup, f, popup);
} else if self.app.mounted(&Id::NewfilePopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::NewfilePopup, f, popup);
} else if self.app.mounted(&Id::OpenWithPopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::OpenWithPopup, f, popup);
} else if self.app.mounted(&Id::RenamePopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::RenamePopup, f, popup);
} else if self.app.mounted(&Id::SaveAsPopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SaveAsPopup, f, popup);
} else if self.app.mounted(&Id::SymlinkPopup) {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SymlinkPopup, f, popup);
} else if self.app.mounted(&Id::ExecPopup) {
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ExecPopup, f, popup);
} else if self.app.mounted(&Id::FileInfoPopup) {
let popup = Popup(Size::Percentage(50), Size::Percentage(50)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Percentage(50)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::FileInfoPopup, f, popup);
} else if self.app.mounted(&Id::ProgressBarPartial) {
let popup = Popup(Size::Percentage(50), Size::Percentage(20)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Percentage(20)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
let popup_chunks = Layout::default()
@@ -242,14 +242,14 @@ impl FileTransferActivity {
self.app.view(&Id::ProgressBarFull, f, popup_chunks[0]);
self.app.view(&Id::ProgressBarPartial, f, popup_chunks[1]);
} else if self.app.mounted(&Id::DeletePopup) {
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::DeletePopup, f, popup);
} else if self.app.mounted(&Id::ReplacePopup) {
// NOTE: handle extended / normal modes
if self.is_radio_replace_extended() {
let popup = Popup(Size::Percentage(50), Size::Percentage(50)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Percentage(50)).draw_in(f.area());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)
@@ -265,42 +265,42 @@ impl FileTransferActivity {
.view(&Id::ReplacingFilesListPopup, f, popup_chunks[0]);
self.app.view(&Id::ReplacePopup, f, popup_chunks[1]);
} else {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ReplacePopup, f, popup);
}
} else if self.app.mounted(&Id::DisconnectPopup) {
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::DisconnectPopup, f, popup);
} else if self.app.mounted(&Id::QuitPopup) {
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::QuitPopup, f, popup);
} else if self.app.mounted(&Id::WatchedPathsList) {
let popup = Popup(Size::Percentage(60), Size::Percentage(50)).draw_in(f.size());
let popup = Popup(Size::Percentage(60), Size::Percentage(50)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WatchedPathsList, f, popup);
} else if self.app.mounted(&Id::WatcherPopup) {
let popup = Popup(Size::Percentage(60), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(60), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WatcherPopup, f, popup);
} else if self.app.mounted(&Id::SortingPopup) {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SortingPopup, f, popup);
} else if self.app.mounted(&Id::ErrorPopup) {
let popup = Popup(
Size::Percentage(50),
self.calc_popup_height(Id::ErrorPopup, f.size().width, f.size().height),
self.calc_popup_height(Id::ErrorPopup, f.area().width, f.area().height),
)
.draw_in(f.size());
.draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::ErrorPopup, f, popup);
@@ -313,17 +313,17 @@ impl FileTransferActivity {
.unwrap_or(1) as u16;
let popup =
Popup(Size::Percentage(50), Size::Unit(2 + wait_popup_lines)).draw_in(f.size());
Popup(Size::Percentage(50), Size::Unit(2 + wait_popup_lines)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::WaitPopup, f, popup);
} else if self.app.mounted(&Id::SyncBrowsingMkdirPopup) {
let popup = Popup(Size::Percentage(60), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(60), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::SyncBrowsingMkdirPopup, f, popup);
} else if self.app.mounted(&Id::KeybindingsPopup) {
let popup = Popup(Size::Percentage(50), Size::Percentage(80)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Percentage(80)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::KeybindingsPopup, f, popup);
@@ -1067,138 +1067,34 @@ impl FileTransferActivity {
/// Returns a sub clause which requires that no popup is mounted in order to be satisfied
fn no_popup_mounted_clause() -> SubClause<Id> {
SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::CopyPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::DeletePopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::DisconnectPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ErrorPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ExecPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::FatalPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::FileInfoPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::GotoPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::KeybindingsPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::MkdirPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::NewfilePopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::OpenWithPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ProgressBarFull,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ProgressBarPartial,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ExplorerFind,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::QuitPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::RenamePopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ReplacePopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::SaveAsPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::SortingPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::SyncBrowsingMkdirPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::SymlinkPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::WatcherPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::WatchedPathsList,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::ChmodPopup,
)))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::WaitPopup,
)))),
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(
Id::FilterPopup,
)))),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
)),
tuirealm::subclause_and_not!(
Id::CopyPopup,
Id::DeletePopup,
Id::DisconnectPopup,
Id::ErrorPopup,
Id::ExecPopup,
Id::FatalPopup,
Id::FileInfoPopup,
Id::GotoPopup,
Id::KeybindingsPopup,
Id::MkdirPopup,
Id::NewfilePopup,
Id::OpenWithPopup,
Id::ProgressBarFull,
Id::ProgressBarPartial,
Id::ExplorerFind,
Id::QuitPopup,
Id::RenamePopup,
Id::ReplacePopup,
Id::SaveAsPopup,
Id::SortingPopup,
Id::SyncBrowsingMkdirPopup,
Id::SymlinkPopup,
Id::WatcherPopup,
Id::WatchedPathsList,
Id::ChmodPopup,
Id::WaitPopup,
Id::FilterPopup
)
}
}

View File

@@ -10,6 +10,8 @@ pub mod auth;
pub mod filetransfer;
pub mod setup;
const CROSSTERM_MAX_POLL: usize = 10;
// -- Exit reason
pub enum ExitReason {

View File

@@ -6,7 +6,7 @@
// Locals
use std::env;
use tuirealm::tui::style::Color;
use tuirealm::ratatui::style::Color;
use tuirealm::{State, StateValue};
use super::{Id, IdSsh, IdTheme, SetupActivity, ViewLayout};

View File

@@ -19,7 +19,7 @@ use tuirealm::listener::EventListenerCfg;
use tuirealm::props::Color;
use tuirealm::{Application, NoUserEvent, Update};
use super::{Activity, Context, ExitReason};
use super::{Activity, Context, ExitReason, CROSSTERM_MAX_POLL};
use crate::config::themes::Theme;
use crate::system::config_client::ConfigClient;
use crate::system::theme_provider::ThemeProvider;
@@ -262,7 +262,7 @@ impl SetupActivity {
Self {
app: Application::init(
EventListenerCfg::default()
.default_input_listener(ticks)
.crossterm_input_listener(ticks, CROSSTERM_MAX_POLL)
.poll_timeout(ticks),
),
exit_reason: None,

View File

@@ -8,7 +8,7 @@ pub mod ssh_keys;
pub mod theme;
use tuirealm::event::{Key, KeyEvent, KeyModifiers};
use tuirealm::tui::widgets::Clear;
use tuirealm::ratatui::widgets::Clear;
use tuirealm::{Frame, Sub, SubClause, SubEventClause};
use super::*;
@@ -112,23 +112,23 @@ impl SetupActivity {
pub(super) fn view_popups(&mut self, f: &mut Frame) {
if self.app.mounted(&Id::Common(IdCommon::ErrorPopup)) {
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
// make popup
self.app.view(&Id::Common(IdCommon::ErrorPopup), f, popup);
} else if self.app.mounted(&Id::Common(IdCommon::QuitPopup)) {
// make popup
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(40), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::Common(IdCommon::QuitPopup), f, popup);
} else if self.app.mounted(&Id::Common(IdCommon::Keybindings)) {
// make popup
let popup = Popup(Size::Percentage(50), Size::Percentage(70)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Percentage(70)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::Common(IdCommon::Keybindings), f, popup);
} else if self.app.mounted(&Id::Common(IdCommon::SavePopup)) {
// make popup
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::Common(IdCommon::SavePopup), f, popup);
}
@@ -235,33 +235,13 @@ impl SetupActivity {
/// Returns a sub clause which requires that no popup is mounted in order to be satisfied
fn no_popup_mounted_clause() -> SubClause<Id> {
SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(Id::Common(
IdCommon::ErrorPopup,
))))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(Id::Common(
IdCommon::Keybindings,
))))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(Id::Common(
IdCommon::QuitPopup,
))))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(Id::Common(
IdCommon::SavePopup,
))))),
Box::new(SubClause::And(
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(Id::Ssh(
IdSsh::DelSshKeyPopup,
))))),
Box::new(SubClause::Not(Box::new(SubClause::IsMounted(Id::Ssh(
IdSsh::SshHost,
))))),
)),
)),
)),
)),
tuirealm::subclause_and_not!(
Id::Common(IdCommon::ErrorPopup),
Id::Common(IdCommon::Keybindings),
Id::Common(IdCommon::QuitPopup),
Id::Common(IdCommon::SavePopup),
Id::Ssh(IdSsh::DelSshKeyPopup),
Id::Ssh(IdSsh::SshHost)
)
}
}

View File

@@ -7,7 +7,7 @@
// Ext
use std::path::PathBuf;
use tuirealm::tui::layout::{Constraint, Direction, Layout};
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::{State, StateValue};
use super::{
@@ -50,7 +50,7 @@ impl SetupActivity {
]
.as_ref(),
)
.split(f.size());
.split(f.area());
// Render common widget
self.app.view(&Id::Common(IdCommon::Header), f, chunks[0]);
self.app.view(&Id::Common(IdCommon::Footer), f, chunks[2]);

View File

@@ -5,8 +5,8 @@
// Locals
// Ext
use tuirealm::tui::layout::{Constraint, Direction, Layout};
use tuirealm::tui::widgets::Clear;
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use tuirealm::ratatui::widgets::Clear;
use super::{components, Context, Id, IdCommon, IdSsh, SetupActivity, ViewLayout};
use crate::utils::ui::{Popup, Size};
@@ -37,7 +37,7 @@ impl SetupActivity {
]
.as_ref(),
)
.split(f.size());
.split(f.area());
// Render common widget
self.app.view(&Id::Common(IdCommon::Header), f, chunks[0]);
self.app.view(&Id::Common(IdCommon::Footer), f, chunks[2]);
@@ -45,11 +45,11 @@ impl SetupActivity {
// Popups
self.view_popups(f);
if self.app.mounted(&Id::Ssh(IdSsh::DelSshKeyPopup)) {
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.size());
let popup = Popup(Size::Percentage(30), Size::Unit(3)).draw_in(f.area());
f.render_widget(Clear, popup);
self.app.view(&Id::Ssh(IdSsh::DelSshKeyPopup), f, popup);
} else if self.app.mounted(&Id::Ssh(IdSsh::SshHost)) {
let popup = Popup(Size::Percentage(50), Size::Percentage(20)).draw_in(f.size());
let popup = Popup(Size::Percentage(50), Size::Percentage(20)).draw_in(f.area());
f.render_widget(Clear, popup);
let popup_chunks = Layout::default()
.direction(Direction::Vertical)

View File

@@ -5,7 +5,7 @@
// Locals
// Ext
use tuirealm::tui::layout::{Constraint, Direction, Layout};
use tuirealm::ratatui::layout::{Constraint, Direction, Layout};
use super::{components, Context, Id, IdCommon, IdTheme, SetupActivity, Theme, ViewLayout};
@@ -39,7 +39,7 @@ impl SetupActivity {
]
.as_ref(),
)
.split(f.size());
.split(f.area());
// Render common widget
self.app.view(&Id::Common(IdCommon::Header), f, chunks[0]);
self.app.view(&Id::Common(IdCommon::Footer), f, chunks[2]);

View File

@@ -3,7 +3,7 @@
//! `Context` is the module which provides all the functionalities related to the UI data holder, called Context
// Locals
use tuirealm::terminal::TerminalBridge;
use tuirealm::terminal::{CrosstermTerminalAdapter, TerminalBridge};
use super::store::Store;
use crate::filetransfer::{FileTransferParams, HostBridgeParams};
@@ -18,7 +18,7 @@ pub struct Context {
bookmarks_client: Option<BookmarksClient>,
config_client: ConfigClient,
pub(crate) store: Store,
pub(crate) terminal: TerminalBridge,
pub(crate) terminal: TerminalBridge<CrosstermTerminalAdapter>,
theme_provider: ThemeProvider,
error: Option<String>,
}
@@ -31,22 +31,19 @@ impl Context {
theme_provider: ThemeProvider,
error: Option<String>,
) -> Context {
let mut ctx = Context {
let mut terminal = TerminalBridge::init_crossterm().expect("Could not initialize terminal");
let _ = terminal.disable_mouse_capture();
Context {
bookmarks_client,
config_client,
host_bridge_params: None,
remote_params: None,
store: Store::init(),
terminal: TerminalBridge::new().expect("Could not initialize terminal"),
terminal,
theme_provider,
error,
};
// Init terminal state
let _ = ctx.terminal.enable_raw_mode();
let _ = ctx.terminal.enter_alternate_screen();
ctx
}
}
// -- getters
@@ -91,7 +88,7 @@ impl Context {
&mut self.theme_provider
}
pub fn terminal(&mut self) -> &mut TerminalBridge {
pub fn terminal(&mut self) -> &mut TerminalBridge<CrosstermTerminalAdapter> {
&mut self.terminal
}
@@ -115,8 +112,8 @@ impl Context {
impl Drop for Context {
fn drop(&mut self) {
// Re-enable terminal stuff
let _ = self.terminal.disable_raw_mode();
let _ = self.terminal.leave_alternate_screen();
if let Err(err) = self.terminal.restore() {
error!("Could not restore terminal: {err}");
}
}
}

View File

@@ -7,7 +7,7 @@ use std::time::{Duration, SystemTime};
use chrono::prelude::*;
use remotefs::fs::UnixPexClass;
use tuirealm::tui::style::Color;
use tuirealm::ratatui::style::Color;
use unicode_width::UnicodeWidthStr;
/// Convert permissions bytes of permissions value into ls notation (e.g. rwx,-wx,--x)

View File

@@ -9,7 +9,7 @@ use std::str::FromStr;
// Ext
use bytesize::ByteSize;
use lazy_regex::{Lazy, Regex};
use tuirealm::tui::style::Color;
use tuirealm::ratatui::style::Color;
use tuirealm::utils::parser as tuirealm_parser;
#[cfg(smb)]

View File

@@ -2,13 +2,16 @@
//!
//! `Utils` implements utilities functions to work with layouts
use tuirealm::terminal::TerminalBridge;
use tuirealm::terminal::{TerminalAdapter, TerminalBridge};
/// Read a secret from tty with customisable prompt
pub fn read_secret_from_tty(
terminal_bridge: &mut TerminalBridge,
pub fn read_secret_from_tty<T>(
terminal_bridge: &mut TerminalBridge<T>,
prompt: impl ToString,
) -> std::io::Result<Option<String>> {
) -> std::io::Result<Option<String>>
where
T: TerminalAdapter,
{
let _ = terminal_bridge.disable_raw_mode();
let _ = terminal_bridge.leave_alternate_screen();
let res = match rpassword::prompt_password(prompt) {

View File

@@ -2,7 +2,7 @@
//!
//! `Utils` implements utilities functions to work with layouts
use tuirealm::tui::layout::{Constraint, Direction, Layout, Rect};
use tuirealm::ratatui::layout::{Constraint, Direction, Layout, Rect};
/// Size type for UI renders
#[derive(Debug, Copy, Clone, Eq, PartialEq)]