From d431f850219b28af2bc45f3b6917377604596a40 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Sun, 19 Mar 2023 21:08:33 +0000 Subject: [PATCH 01/20] feat: use ratatui --- Cargo.lock | 170 ++++++++++++++++---------------- Cargo.toml | 2 +- README.md | 2 +- src/app_data/container_state.rs | 2 +- src/app_data/mod.rs | 2 +- src/input_handler/mod.rs | 2 +- src/ui/color_match.rs | 2 +- src/ui/draw_blocks.rs | 4 +- src/ui/gui_state.rs | 2 +- src/ui/mod.rs | 2 +- 10 files changed, 96 insertions(+), 94 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 048dded..7a46926 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,9 +13,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "autocfg" @@ -41,6 +41,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + [[package]] name = "bollard" version = "0.14.0" @@ -131,11 +137,11 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" dependencies = [ - "bitflags", + "bitflags 2.0.2", "clap_derive", "clap_lex", "is-terminal", @@ -148,22 +154,22 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" dependencies = [ "heck", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ "os_str_bytes", ] @@ -184,29 +190,13 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" -[[package]] -name = "crossterm" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" -dependencies = [ - "bitflags", - "crossterm_winapi", - "libc", - "mio", - "parking_lot", - "signal-hook", - "signal-hook-mio", - "winapi", -] - [[package]] name = "crossterm" version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" dependencies = [ - "bitflags", + "bitflags 1.3.2", "crossterm_winapi", "libc", "mio", @@ -227,9 +217,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -239,9 +229,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -249,24 +239,24 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.2", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -328,7 +318,7 @@ checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -538,19 +528,20 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys", ] [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", @@ -684,9 +675,9 @@ checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "overload" @@ -702,13 +693,13 @@ dependencies = [ "bollard", "cansi", "clap", - "crossterm 0.26.1", + "crossterm", "futures-util", "parking_lot", + "ratatui", "tokio", "tracing", "tracing-subscriber", - "tui", "uuid", ] @@ -758,7 +749,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -788,7 +779,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -851,22 +842,35 @@ dependencies = [ "getrandom", ] +[[package]] +name = "ratatui" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d690717aac4aca6e901da642fafcceff63ded0ab4c65c18ceff39c9a27f21508" +dependencies = [ + "bitflags 1.3.2", + "cassowary", + "crossterm", + "unicode-segmentation", + "unicode-width", +] + [[package]] name = "redox_syscall" version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", @@ -894,22 +898,22 @@ checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "serde" -version = "1.0.155" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" +checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.155" +version = "1.0.157" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" +checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -925,13 +929,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.11" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc" +checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -1042,6 +1046,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "termcolor" version = "1.2.0" @@ -1053,22 +1068,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.2", ] [[package]] @@ -1151,7 +1166,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1194,7 +1209,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1238,19 +1253,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" -[[package]] -name = "tui" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1" -dependencies = [ - "bitflags", - "cassowary", - "crossterm 0.25.0", - "unicode-segmentation", - "unicode-width", -] - [[package]] name = "unicase" version = "2.6.0" @@ -1262,9 +1264,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" [[package]] name = "unicode-ident" @@ -1363,7 +1365,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -1385,7 +1387,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] diff --git a/Cargo.toml b/Cargo.toml index 02a5f28..e83f8ab 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ parking_lot = {version= "0.12"} tokio = {version = "1.26", features=["full"]} tracing = "0.1" tracing-subscriber = "0.3" -tui = "0.19" +ratatui = "0.20" uuid = {version = "1.3", features = ["v4", "fast-rng"]} [dev-dependencies] diff --git a/README.md b/README.md index aa4ee99..db1d0d2 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

- Built in Rust, making heavy use of tui-rs & Bollard + Built in Rust, making heavy use of ratatui & Bollard

diff --git a/src/app_data/container_state.rs b/src/app_data/container_state.rs index b1e1ba6..8e3fa92 100644 --- a/src/app_data/container_state.rs +++ b/src/app_data/container_state.rs @@ -4,7 +4,7 @@ use std::{ fmt, }; -use tui::{ +use ratatui::{ style::Color, widgets::{ListItem, ListState}, }; diff --git a/src/app_data/mod.rs b/src/app_data/mod.rs index 93d5769..9c662fc 100644 --- a/src/app_data/mod.rs +++ b/src/app_data/mod.rs @@ -1,7 +1,7 @@ use bollard::models::ContainerSummary; use core::fmt; use std::time::{SystemTime, UNIX_EPOCH}; -use tui::widgets::{ListItem, ListState}; +use ratatui::widgets::{ListItem, ListState}; mod container_state; diff --git a/src/input_handler/mod.rs b/src/input_handler/mod.rs index bb60bdd..72bc374 100644 --- a/src/input_handler/mod.rs +++ b/src/input_handler/mod.rs @@ -12,7 +12,7 @@ use tokio::{ sync::mpsc::{Receiver, Sender}, task::JoinHandle, }; -use tui::layout::Rect; +use ratatui::layout::Rect; mod message; use crate::{ diff --git a/src/ui/color_match.rs b/src/ui/color_match.rs index d77a40e..2e349f6 100644 --- a/src/ui/color_match.rs +++ b/src/ui/color_match.rs @@ -1,7 +1,7 @@ pub mod log_sanitizer { use cansi::{v3::categorise_text, Color as CansiColor, Intensity}; - use tui::{ + use ratatui::{ style::{Color, Modifier, Style}, text::{Span, Spans}, }; diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index d09105b..17b64b2 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -1,7 +1,7 @@ use parking_lot::Mutex; use std::default::Default; use std::{fmt::Display, sync::Arc}; -use tui::{ +use ratatui::{ backend::Backend, layout::{Alignment, Constraint, Direction, Layout, Rect}, style::{Color, Modifier, Style}, @@ -500,7 +500,7 @@ impl HelpInfo { spans .iter() .flat_map(|x| x.0.iter()) - .map(tui::text::Span::width) + .map(ratatui::text::Span::width) .max() .unwrap_or(1) } diff --git a/src/ui/gui_state.rs b/src/ui/gui_state.rs index 134c112..79b5e23 100644 --- a/src/ui/gui_state.rs +++ b/src/ui/gui_state.rs @@ -2,7 +2,7 @@ use std::{ collections::{HashMap, HashSet}, fmt, }; -use tui::layout::{Constraint, Rect}; +use ratatui::layout::{Constraint, Rect}; use uuid::Uuid; use crate::app_data::Header; diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 5f9ee65..11a0d0e 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -13,7 +13,7 @@ use std::{ use std::{sync::atomic::AtomicBool, time::Instant}; use tokio::sync::mpsc::Sender; use tracing::error; -use tui::{ +use ratatui::{ backend::{Backend, CrosstermBackend}, layout::{Constraint, Direction, Layout}, Frame, Terminal, From f23dac9bc8e66fe1384ec279d0ac9dcb5aaae5e2 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Mon, 20 Mar 2023 00:06:21 +0000 Subject: [PATCH 02/20] fix: alter the help box link underlining --- src/ui/draw_blocks.rs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index 17b64b2..fc79722 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -1,6 +1,4 @@ use parking_lot::Mutex; -use std::default::Default; -use std::{fmt::Display, sync::Arc}; use ratatui::{ backend::Backend, layout::{Alignment, Constraint, Direction, Layout, Rect}, @@ -13,6 +11,8 @@ use ratatui::{ }, Frame, }; +use std::default::Default; +use std::{fmt::Display, sync::Arc}; use crate::app_data::{Header, SortedOrder}; use crate::ui::Status; @@ -628,6 +628,7 @@ impl HelpInfo { /// Generate the final lines, GitHub link etc, + metadata fn gen_final() -> Self { + let top_bar = (0..REPO.chars().count()).map(|_|"▔").collect::(); let spans = [ Self::empty_span(), Spans::from(vec![Self::black_span( @@ -635,11 +636,9 @@ impl HelpInfo { )]), Spans::from(vec![Span::styled( REPO.to_owned(), - Style::default() - .bg(Color::Magenta) - .fg(Color::Black) - .add_modifier(Modifier::UNDERLINED), + Style::default().fg(Color::White), // .add_modifier(Modifier::BOLD), )]), + Spans::from(vec![Self::white_span(&top_bar)]), ]; let height = spans.len(); let width = Self::calc_width(&spans); From 7a9bdc9699594532e17a33e044ca0678693c8d3f Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 29 Mar 2023 17:19:47 +0000 Subject: [PATCH 03/20] chore: dependencies updated --- Cargo.lock | 252 ++++++++++++++++++++++++++++++----------------------- Cargo.toml | 4 +- 2 files changed, 144 insertions(+), 112 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7a46926..0c9adac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,46 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-wincon", + "concolor-override", + "concolor-query", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + +[[package]] +name = "anstyle-parse" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-wincon" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" +dependencies = [ + "anstyle", + "windows-sys", +] + [[package]] name = "anyhow" version = "1.0.70" @@ -41,12 +81,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitflags" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" - [[package]] name = "bollard" version = "0.14.0" @@ -137,42 +171,47 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.11" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" +checksum = "6efb5f0a41b5ef5b50c5da28c07609c20091df0c1fc33d418fa2a7e693c2b624" dependencies = [ - "bitflags 2.0.2", + "clap_builder", "clap_derive", - "clap_lex", - "is-terminal", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671fcaa5debda4b9a84aa7fde49c907c8986c0e6ab927e04217c9cb74e7c8bc9" +dependencies = [ + "anstream", + "anstyle", + "bitflags", + "clap_lex", "strsim", - "termcolor", "unicase", "unicode-width", ] [[package]] name = "clap_derive" -version = "4.1.9" +version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" +checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" dependencies = [ "heck", - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.11", ] [[package]] name = "clap_lex" -version = "0.3.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" -dependencies = [ - "os_str_bytes", -] +checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" [[package]] name = "codespan-reporting" @@ -184,6 +223,21 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "concolor-override" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" + +[[package]] +name = "concolor-query" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" +dependencies = [ + "windows-sys", +] + [[package]] name = "core-foundation-sys" version = "0.8.3" @@ -196,7 +250,7 @@ version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" dependencies = [ - "bitflags 1.3.2", + "bitflags", "crossterm_winapi", "libc", "mio", @@ -217,9 +271,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" +checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" dependencies = [ "cc", "cxxbridge-flags", @@ -229,9 +283,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" +checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" dependencies = [ "cc", "codespan-reporting", @@ -239,35 +293,35 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.2", + "syn 2.0.11", ] [[package]] name = "cxxbridge-flags" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" +checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" [[package]] name = "cxxbridge-macro" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" +checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.11", ] [[package]] name = "errno" -version = "0.2.8" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" dependencies = [ "errno-dragonfly", "libc", - "winapi", + "windows-sys", ] [[package]] @@ -483,16 +537,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.53" +version = "0.1.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "winapi", + "windows", ] [[package]] @@ -517,9 +571,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", "hashbrown", @@ -528,9 +582,9 @@ dependencies = [ [[package]] name = "io-lifetimes" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd6da19f25979c7270e70fa95ab371ec3b701cd0eefc47667a09785b3c59155" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ "hermit-abi 0.3.1", "libc", @@ -539,9 +593,9 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" +checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes", @@ -587,9 +641,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.1.4" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" +checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" [[package]] name = "lock_api" @@ -610,12 +664,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - [[package]] name = "mio" version = "0.8.6" @@ -673,12 +721,6 @@ version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" -[[package]] -name = "os_str_bytes" -version = "6.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" - [[package]] name = "overload" version = "0.1.1" @@ -770,35 +812,11 @@ version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" dependencies = [ "unicode-ident", ] @@ -844,11 +862,11 @@ dependencies = [ [[package]] name = "ratatui" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d690717aac4aca6e901da642fafcceff63ded0ab4c65c18ceff39c9a27f21508" +checksum = "dcc0d032bccba900ee32151ec0265667535c230169f5a011154cdcd984e16829" dependencies = [ - "bitflags 1.3.2", + "bitflags", "cassowary", "crossterm", "unicode-segmentation", @@ -861,16 +879,16 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags 1.3.2", + "bitflags", ] [[package]] name = "rustix" -version = "0.36.10" +version = "0.37.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fe885c3a125aa45213b68cc1472a49880cb5923dc23f522ad2791b882228778" +checksum = "c348b5dc624ecee40108aa2922fed8bad89d7fcc2b9f8cb18f632898ac4a37f9" dependencies = [ - "bitflags 1.3.2", + "bitflags", "errno", "io-lifetimes", "libc", @@ -898,29 +916,29 @@ checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "serde" -version = "1.0.157" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "707de5fcf5df2b5788fca98dd7eab490bc2fd9b7ef1404defc462833b83f25ca" +checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.157" +version = "1.0.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78997f4555c22a7971214540c4a661291970619afd56de19f77e0de86296e1e5" +checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.11", ] [[package]] name = "serde_json" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" dependencies = [ "itoa", "ryu", @@ -935,7 +953,7 @@ checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.11", ] [[package]] @@ -1048,9 +1066,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.2" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59d3276aee1fa0c33612917969b5172b5be2db051232a6e4826f1a1a9191b045" +checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" dependencies = [ "proc-macro2", "quote", @@ -1083,7 +1101,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.2", + "syn 2.0.11", ] [[package]] @@ -1140,14 +1158,13 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.26.0" +version = "1.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" +checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" dependencies = [ "autocfg", "bytes", "libc", - "memchr", "mio", "num_cpus", "parking_lot", @@ -1160,13 +1177,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.8.2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" +checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.11", ] [[package]] @@ -1264,9 +1281,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -1306,6 +1323,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + [[package]] name = "uuid" version = "1.3.0" @@ -1429,6 +1452,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.45.0" diff --git a/Cargo.toml b/Cargo.toml index e83f8ab..7ba44aa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,11 +15,11 @@ categories = ["command-line-utilities"] anyhow = "1.0" bollard = "0.14" cansi = "2.2" -clap={version="4.1", features = ["derive", "unicode", "color"] } +clap={version="4.2", features = ["derive", "unicode", "color"] } crossterm = "0.26" futures-util = "0.3" parking_lot = {version= "0.12"} -tokio = {version = "1.26", features=["full"]} +tokio = {version = "1.27", features=["full"]} tracing = "0.1" tracing-subscriber = "0.3" ratatui = "0.20" From f90679978247974e999b3cc3b808e64350cf5c8c Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 29 Mar 2023 17:20:20 +0000 Subject: [PATCH 04/20] fix: alter the help box link underlining --- src/app_data/mod.rs | 2 +- src/input_handler/mod.rs | 2 +- src/ui/draw_blocks.rs | 4 +--- src/ui/gui_state.rs | 2 +- src/ui/mod.rs | 10 +++++----- 5 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/app_data/mod.rs b/src/app_data/mod.rs index 9c662fc..dc80aeb 100644 --- a/src/app_data/mod.rs +++ b/src/app_data/mod.rs @@ -1,7 +1,7 @@ use bollard::models::ContainerSummary; use core::fmt; -use std::time::{SystemTime, UNIX_EPOCH}; use ratatui::widgets::{ListItem, ListState}; +use std::time::{SystemTime, UNIX_EPOCH}; mod container_state; diff --git a/src/input_handler/mod.rs b/src/input_handler/mod.rs index 72bc374..696e3c9 100644 --- a/src/input_handler/mod.rs +++ b/src/input_handler/mod.rs @@ -8,11 +8,11 @@ use crossterm::{ execute, }; use parking_lot::Mutex; +use ratatui::layout::Rect; use tokio::{ sync::mpsc::{Receiver, Sender}, task::JoinHandle, }; -use ratatui::layout::Rect; mod message; use crate::{ diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index fc79722..56286c5 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -628,7 +628,6 @@ impl HelpInfo { /// Generate the final lines, GitHub link etc, + metadata fn gen_final() -> Self { - let top_bar = (0..REPO.chars().count()).map(|_|"▔").collect::(); let spans = [ Self::empty_span(), Spans::from(vec![Self::black_span( @@ -636,9 +635,8 @@ impl HelpInfo { )]), Spans::from(vec![Span::styled( REPO.to_owned(), - Style::default().fg(Color::White), // .add_modifier(Modifier::BOLD), + Style::default().fg(Color::White).add_modifier(Modifier::UNDERLINED), )]), - Spans::from(vec![Self::white_span(&top_bar)]), ]; let height = spans.len(); let width = Self::calc_width(&spans); diff --git a/src/ui/gui_state.rs b/src/ui/gui_state.rs index 79b5e23..cb8571b 100644 --- a/src/ui/gui_state.rs +++ b/src/ui/gui_state.rs @@ -1,8 +1,8 @@ +use ratatui::layout::{Constraint, Rect}; use std::{ collections::{HashMap, HashSet}, fmt, }; -use ratatui::layout::{Constraint, Rect}; use uuid::Uuid; use crate::app_data::Header; diff --git a/src/ui/mod.rs b/src/ui/mod.rs index 11a0d0e..ddee0c2 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -5,6 +5,11 @@ use crossterm::{ terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen}, }; use parking_lot::Mutex; +use ratatui::{ + backend::{Backend, CrosstermBackend}, + layout::{Constraint, Direction, Layout}, + Frame, Terminal, +}; use std::{ io::{self, Stdout, Write}, sync::{atomic::Ordering, Arc}, @@ -13,11 +18,6 @@ use std::{ use std::{sync::atomic::AtomicBool, time::Instant}; use tokio::sync::mpsc::Sender; use tracing::error; -use ratatui::{ - backend::{Backend, CrosstermBackend}, - layout::{Constraint, Direction, Layout}, - Frame, Terminal, -}; mod color_match; mod draw_blocks; From e0b49be84062abdfcb636418f57043fad37d06ec Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 29 Mar 2023 17:29:19 +0000 Subject: [PATCH 05/20] fix: "-d" arg error text updated --- src/parse_args/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parse_args/mod.rs b/src/parse_args/mod.rs index 2a881ba..d6c823d 100644 --- a/src/parse_args/mod.rs +++ b/src/parse_args/mod.rs @@ -40,7 +40,7 @@ impl CliArgs { // Quit the program if the docker update argument is 0 // Should maybe change it to check if less than 100 if args.docker_interval == 0 { - error!("docker args needs to be greater than 0"); + error!("\"-d\" argument needs to be greater than 0"); process::exit(1) } Self { From cb1271cf7f21c898020481ad85914a3dcc83ec93 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 29 Mar 2023 17:30:14 +0000 Subject: [PATCH 06/20] feat: github workflow create image for ghcr.io --- .../workflows/create_release_and_build.yml | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/create_release_and_build.yml b/.github/workflows/create_release_and_build.yml index bd9eb27..df4c890 100644 --- a/.github/workflows/create_release_and_build.yml +++ b/.github/workflows/create_release_and_build.yml @@ -5,6 +5,7 @@ on: - 'v[0-9]+.[0-9]+.[0-9]+' jobs: deploy: + # Change this to latest - or ubuntu 20.04? runs-on: ubuntu-18.04 steps: - name: Checkout @@ -64,23 +65,39 @@ jobs: - name: compress windows_x86_64 binary run: zip -j ./oxker_windows_x86_64.zip target/x86_64-pc-windows-gnu/release/oxker.exe - ############################### - ## Build images for Dockerhub # - ############################### + ######################################### + ## Build images for Dockerhub & ghcr.io # + ######################################### + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Write release version to env + run: | + CURRENT_SEMVER=${GITHUB_REF_NAME#v} + echo "CURRENT_SEMVER=$CURRENT_SEMVER" >> $GITHUB_ENV + - uses: docker/setup-buildx-action@v2 id: buildx with: install: true - - name: Build for Docker Hub + - name: Build for Dockerhub & ghcr.io run: | docker build --platform linux/arm/v6,linux/arm64,linux/amd64 \ -t ${{ secrets.DOCKERHUB_USERNAME }}/oxker:latest \ + -t ${{ secrets.DOCKERHUB_USERNAME }}/oxker:${{env.CURRENT_SEMVER}} \ + -t ghcr.io/${{ github.repository_owner }}/oxker:latest \ + -t ghcr.io/${{ github.repository_owner }}/oxker:${{env.CURRENT_SEMVER}} \ --push \ -f containerised/Dockerfile . From 7c92ffef7da20143a31706a310b5e6f2c3e0554f Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Wed, 29 Mar 2023 18:00:31 +0000 Subject: [PATCH 07/20] refactor: button_item() include brackets --- src/ui/draw_blocks.rs | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index 56286c5..da6cf7a 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -515,12 +515,12 @@ impl HelpInfo { Span::styled(input.to_owned(), Style::default().fg(color)) } - /// Span to black text span + /// &str to black text span fn black_span<'a>(input: &str) -> Span<'a> { Self::span(input, Color::Black) } - /// Span to white text span + /// &str to white text span fn white_span<'a>(input: &str) -> Span<'a> { Self::span(input, Color::White) } @@ -559,7 +559,7 @@ impl HelpInfo { /// Generate the button information span + metadata fn gen_button() -> Self { - let button_item = |x: &str| Self::white_span(&format!(" {x} ")); + let button_item = |x: &str| Self::white_span(&format!(" ( {x} ) ")); let button_desc = |x: &str| Self::black_span(x); let or = || button_desc("or"); let space = || button_desc(" "); @@ -567,52 +567,52 @@ impl HelpInfo { let spans = [ Spans::from(vec![ space(), - button_item("( tab )"), + button_item("tab"), or(), - button_item("( shift+tab )"), + button_item("shift+tab"), button_desc("to change panels"), ]), Spans::from(vec![ space(), - button_item("( ↑ ↓ )"), + button_item("↑ ↓"), or(), - button_item("( j k )"), + button_item("j k"), or(), - button_item("( PgUp PgDown )"), + button_item("PgUp PgDown"), or(), - button_item("( Home End )"), + button_item("Home End"), button_desc("to change selected line"), ]), Spans::from(vec![ space(), - button_item("( enter )"), + button_item("enter"), button_desc("to send docker container command"), ]), Spans::from(vec![ space(), - button_item("( h )"), + button_item("h"), button_desc("to toggle this help information"), ]), Spans::from(vec![ space(), - button_item("( 0 )"), + button_item("0"), button_desc("to stop sort"), ]), Spans::from(vec![ space(), - button_item("( 1 - 9 )"), + button_item("1 - 9"), button_desc("sort by header - or click header"), ]), Spans::from(vec![ space(), - button_item("( m )"), + button_item("m"), button_desc( "to toggle mouse capture - if disabled, text on screen can be selected & copied", ), ]), Spans::from(vec![ space(), - button_item("( q )"), + button_item("q"), button_desc("to quit at any time"), ]), ]; @@ -635,7 +635,9 @@ impl HelpInfo { )]), Spans::from(vec![Span::styled( REPO.to_owned(), - Style::default().fg(Color::White).add_modifier(Modifier::UNDERLINED), + Style::default() + .fg(Color::White) + .add_modifier(Modifier::UNDERLINED), )]), ]; let height = spans.len(); From 937202fe34d1692693c62dd1a7ad19db37651233 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 02:12:03 +0000 Subject: [PATCH 08/20] feat: delete container, closes #27 Enable a user to delete a container. A dialog will pop up to ask the user to confirm the deletion. A user can then click on either button, or press N/Y to make a selection --- src/app_data/container_state.rs | 13 ++-- src/app_data/mod.rs | 10 +++ src/docker_data/message.rs | 12 +-- src/docker_data/mod.rs | 33 +++++++- src/input_handler/mod.rs | 89 ++++++++++++++++----- src/main.rs | 2 +- src/ui/draw_blocks.rs | 132 ++++++++++++++++++++++++++++---- src/ui/gui_state.rs | 49 +++++++++++- src/ui/mod.rs | 23 +++++- 9 files changed, 309 insertions(+), 54 deletions(-) diff --git a/src/app_data/container_state.rs b/src/app_data/container_state.rs index 8e3fa92..974356b 100644 --- a/src/app_data/container_state.rs +++ b/src/app_data/container_state.rs @@ -207,6 +207,7 @@ pub enum DockerControls { Start, Stop, Unpause, + Delete, } impl DockerControls { @@ -216,6 +217,7 @@ impl DockerControls { Self::Restart => Color::Magenta, Self::Start => Color::Green, Self::Stop => Color::Red, + Self::Delete => Color::Gray, Self::Unpause => Color::Blue, } } @@ -223,11 +225,11 @@ impl DockerControls { /// Docker commands available depending on the containers state pub fn gen_vec(state: State) -> Vec { match state { - State::Dead | State::Exited => vec![Self::Start, Self::Restart], - State::Paused => vec![Self::Unpause, Self::Stop], - State::Restarting => vec![Self::Stop], - State::Running => vec![Self::Pause, Self::Restart, Self::Stop], - _ => vec![], + State::Dead | State::Exited => vec![Self::Start, Self::Restart, Self::Delete], + State::Paused => vec![Self::Unpause, Self::Stop, Self::Delete], + State::Restarting => vec![Self::Stop, Self::Delete], + State::Running => vec![Self::Pause, Self::Restart, Self::Stop, Self::Delete], + _ => vec![Self::Delete], } } } @@ -236,6 +238,7 @@ impl fmt::Display for DockerControls { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let disp = match self { Self::Pause => "pause", + Self::Delete => "delete", Self::Restart => "restart", Self::Start => "start", Self::Stop => "stop", diff --git a/src/app_data/mod.rs b/src/app_data/mod.rs index dc80aeb..fda6cbb 100644 --- a/src/app_data/mod.rs +++ b/src/app_data/mod.rs @@ -456,6 +456,15 @@ impl AppData { self.containers.items.iter_mut().find(|i| &i.id == id) } + /// return a mutable container by given id + pub fn get_container_name_by_id(&mut self, id: &ContainerId) -> Option { + self.containers + .items + .iter_mut() + .find(|i| &i.id == id) + .map(|i| i.name.clone()) + } + /// Find the id of the currently selected container. /// If any containers on system, will always return a ContainerId /// Only returns None when no containers found. @@ -532,6 +541,7 @@ impl AppData { } } } + // Trim a &String and return String let trim_owned = |x: &String| x.trim().to_owned(); diff --git a/src/docker_data/message.rs b/src/docker_data/message.rs index f7de6f5..0a6b67e 100644 --- a/src/docker_data/message.rs +++ b/src/docker_data/message.rs @@ -2,11 +2,13 @@ use crate::app_data::ContainerId; #[derive(Debug, Clone)] pub enum DockerMessage { - Update, - Start(ContainerId), - Restart(ContainerId), + Delete(ContainerId), + ConfirmDelete(ContainerId), Pause(ContainerId), - Unpause(ContainerId), - Stop(ContainerId), Quit, + Restart(ContainerId), + Start(ContainerId), + Stop(ContainerId), + Unpause(ContainerId), + Update, } diff --git a/src/docker_data/mod.rs b/src/docker_data/mod.rs index 8104ccc..391b3fc 100644 --- a/src/docker_data/mod.rs +++ b/src/docker_data/mod.rs @@ -1,5 +1,8 @@ use bollard::{ - container::{ListContainersOptions, LogsOptions, StartContainerOptions, Stats, StatsOptions}, + container::{ + ListContainersOptions, LogsOptions, RemoveContainerOptions, StartContainerOptions, Stats, + StatsOptions, + }, service::ContainerSummary, Docker, }; @@ -335,13 +338,14 @@ impl DockerData { } /// Handle incoming messages, container controls & all container information update - /// Spawn dowcker commands off into own thread + /// Spawn Docker commands off into own thread async fn message_handler(&mut self) { while let Some(message) = self.receiver.recv().await { let docker = Arc::clone(&self.docker); let gui_state = Arc::clone(&self.gui_state); let app_data = Arc::clone(&self.app_data); let uuid = Uuid::new_v4(); + // TODO need to refactor these match message { DockerMessage::Pause(id) => { tokio::spawn(async move { @@ -397,6 +401,31 @@ impl DockerData { }); self.update_everything().await; } + DockerMessage::Delete(id) => { + tokio::spawn(async move { + let loading_spin = Self::loading_spin(uuid, &gui_state).await; + if docker + .remove_container( + id.get(), + Some(RemoveContainerOptions { + v: false, + force: true, + link: false, + }), + ) + .await + .is_err() + { + Self::set_error(&app_data, DockerControls::Stop, &gui_state); + } + Self::stop_loading_spin(&gui_state, &loading_spin, uuid); + }); + self.update_everything().await; + self.gui_state.lock().set_delete_container(None); + } + DockerMessage::ConfirmDelete(id) => { + self.gui_state.lock().set_delete_container(Some(id)) + } DockerMessage::Update => self.update_everything().await, DockerMessage::Quit => { self.spawns diff --git a/src/input_handler/mod.rs b/src/input_handler/mod.rs index 696e3c9..421f86a 100644 --- a/src/input_handler/mod.rs +++ b/src/input_handler/mod.rs @@ -19,7 +19,7 @@ use crate::{ app_data::{AppData, DockerControls, Header}, app_error::AppError, docker_data::DockerMessage, - ui::{GuiState, SelectablePanel, Status, Ui}, + ui::{DeleteButton, GuiState, SelectablePanel, Status, Ui}, }; pub use message::InputMessages; @@ -62,13 +62,21 @@ impl InputHandler { match message { InputMessages::ButtonPress(key) => self.button_press(key.0, key.1).await, InputMessages::MouseEvent(mouse_event) => { - let error_or_help = self - .gui_state - .lock() - .status_contains(&[Status::Error, Status::Help]); + let error_or_help = self.gui_state.lock().status_contains(&[ + Status::Error, + Status::Help, + Status::DeleteConfirm, + ]); if !error_or_help { self.mouse_press(mouse_event); } + let delete_confirm = self + .gui_state + .lock() + .status_contains(&[Status::DeleteConfirm]); + if delete_confirm { + self.button_intersect(mouse_event).await; + } } } if !self.is_running.load(Ordering::SeqCst) { @@ -133,41 +141,59 @@ impl InputHandler { } } + /// This is executed from the Delete Confirm dialog, and will send an internal message to actually remove the given container + async fn confirm_delete(&self) { + let id = self.gui_state.lock().get_delete_container(); + if let Some(id) = id { + self.docker_sender + .send(DockerMessage::Delete(id)) + .await + .ok(); + } + } + + /// This is executed from the Delete Confirm dialog, and will clear the delete_container information (removes id and closes panel) + fn clear_delete(&self) { + self.gui_state.lock().set_delete_container(None); + } + /// Handle any keyboard button events #[allow(clippy::too_many_lines)] async fn button_press(&mut self, key_code: KeyCode, key_modififer: KeyModifiers) { // TODO - refactor this to a single call, maybe return Error, Help or Normal let contains_error = self.gui_state.lock().status_contains(&[Status::Error]); let contains_help = self.gui_state.lock().status_contains(&[Status::Help]); + let contains_delete = self + .gui_state + .lock() + .status_contains(&[Status::DeleteConfirm]); - // Quit on Ctrl + c/C + // Always just quit on Ctrl + c/C or q/Q let is_c = || key_code == KeyCode::Char('c') || key_code == KeyCode::Char('C'); - if key_modififer == KeyModifiers::CONTROL && is_c() { + let is_q = || key_code == KeyCode::Char('q') || key_code == KeyCode::Char('Q'); + if key_modififer == KeyModifiers::CONTROL && is_c() || is_q() { self.quit().await; } if contains_error { - match key_code { - KeyCode::Char('q' | 'Q') => self.quit().await, - KeyCode::Char('c' | 'C') => { - self.app_data.lock().remove_error(); - self.gui_state.lock().status_del(Status::Error); - } - _ => (), + if let KeyCode::Char('c' | 'C') = key_code { + self.app_data.lock().remove_error(); + self.gui_state.lock().status_del(Status::Error); } } else if contains_help { match key_code { - KeyCode::Char('q' | 'Q') => self.quit().await, KeyCode::Char('h' | 'H') => self.gui_state.lock().status_del(Status::Help), KeyCode::Char('m' | 'M') => self.m_key(), _ => (), } + } else if contains_delete { + match key_code { + KeyCode::Char('y' | 'Y') => self.confirm_delete().await, + KeyCode::Char('n' | 'N') => self.clear_delete(), + _ => (), + } } else { - // let abc = KeyEvent::new(KeyCode::Char('d'), KeyModifiers::Ctrl); match key_code { - // KeyCode::Ctrl('c') => { - // self.quit().await; - // } KeyCode::Char('0') => self.app_data.lock().reset_sorted(), KeyCode::Char('1') => self.sort(Header::State), KeyCode::Char('2') => self.sort(Header::Status), @@ -178,7 +204,6 @@ impl InputHandler { KeyCode::Char('7') => self.sort(Header::Image), KeyCode::Char('8') => self.sort(Header::Rx), KeyCode::Char('9') => self.sort(Header::Tx), - KeyCode::Char('q' | 'Q') => self.quit().await, KeyCode::Char('h' | 'H') => self.gui_state.lock().status_push(Status::Help), KeyCode::Char('m' | 'M') => self.m_key(), KeyCode::Tab => { @@ -251,6 +276,11 @@ impl InputHandler { }; if let Some(id) = option_id { match command { + DockerControls::Delete => self + .docker_sender + .send(DockerMessage::ConfirmDelete(id)) + .await + .ok(), DockerControls::Pause => { self.docker_sender.send(DockerMessage::Pause(id)).await.ok() } @@ -280,6 +310,25 @@ impl InputHandler { } } + /// Check if a button press interacts with either the yes or no buttons in the delete container confirm window + async fn button_intersect(&mut self, mouse_event: MouseEvent) { + if mouse_event.kind == MouseEventKind::Down(MouseButton::Left) { + let intersect = self.gui_state.lock().button_intersect(Rect::new( + mouse_event.column, + mouse_event.row, + 1, + 1, + )); + + if let Some(button) = intersect { + match button { + DeleteButton::Yes => self.confirm_delete().await, + DeleteButton::No => self.clear_delete(), + } + } + } + } + /// Handle mouse button events fn mouse_press(&mut self, mouse_event: MouseEvent) { match mouse_event.kind { diff --git a/src/main.rs b/src/main.rs index fd99297..29db59b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,7 +40,7 @@ use ui::{GuiState, Status, Ui}; use crate::docker_data::DockerMessage; -// this is the entry point when running as a Docker Container, and is used, in conjunction with the `CONTAINER_ENV` ENV, to check if we are running as a Docker Container +/// This is the entry point when running as a Docker Container, and is used, in conjunction with the `CONTAINER_ENV` ENV, to check if we are running as a Docker Container const ENTRY_POINT: &str = "/app/oxker"; const ENV_KEY: &str = "OXKER_RUNTIME"; const ENV_VALUE: &str = "container"; diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index da6cf7a..c6834d1 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -21,7 +21,7 @@ use crate::{ app_error::AppError, }; -use super::gui_state::{BoxLocation, Region}; +use super::gui_state::{BoxLocation, DeleteButton, Region}; use super::{GuiState, SelectablePanel}; const NAME_TEXT: &str = r#" @@ -43,6 +43,14 @@ const MARGIN: &str = " "; const ARROW: &str = "▶ "; const CIRCLE: &str = "⚪ "; +/// From a given &str, return the maximum number of chars on a single line +fn max_line_width(text: &str) -> usize { + text.lines() + .map(|i| i.chars().count()) + .max() + .unwrap_or_default() +} + /// Generate block, add a border if is the selected panel, /// add custom title based on state of each panel fn generate_block<'a>( @@ -53,7 +61,7 @@ fn generate_block<'a>( ) -> Block<'a> { gui_state .lock() - .update_heading_map(Region::Panel(panel), area); + .update_region_map(Region::Panel(panel), area); let current_selected_panel = gui_state.lock().selected_panel; let mut title = match panel { SelectablePanel::Containers => { @@ -459,7 +467,7 @@ pub fn heading_bar( let rect = headers_section[index]; gui_state .lock() - .update_heading_map(Region::Header(header), rect); + .update_region_map(Region::Header(header), rect); f.render_widget(paragraph, rect); } } @@ -479,14 +487,6 @@ pub fn heading_bar( f.render_widget(help_paragraph, split_bar[help_index]); } -/// From a given &str, return the maximum number of chars on a single line -fn max_line_width(text: &str) -> usize { - text.lines() - .map(|i| i.chars().count()) - .max() - .unwrap_or_default() -} - /// Help popup box needs these three pieces of information struct HelpInfo { spans: Vec>, @@ -593,11 +593,7 @@ impl HelpInfo { button_item("h"), button_desc("to toggle this help information"), ]), - Spans::from(vec![ - space(), - button_item("0"), - button_desc("to stop sort"), - ]), + Spans::from(vec![space(), button_item("0"), button_desc("to stop sort")]), Spans::from(vec![ space(), button_item("1 - 9"), @@ -728,6 +724,110 @@ pub fn help_box(f: &mut Frame<'_, B>) { f.render_widget(block, area); } +/// Draw the delete confirm box in the centre of the screen +/// take in container id and container name here? +pub fn delete_confirm( + f: &mut Frame<'_, B>, + gui_state: &Arc>, + name: &str, +) { + let block = Block::default() + .title(" Confirm Delete ") + .border_type(BorderType::Rounded) + .style(Style::default().bg(Color::White).fg(Color::Black)) + .title_alignment(Alignment::Center) + .borders(Borders::ALL); + + let confirm = Spans::from(vec![ + Span::from("Are you sure you want to delete container: "), + Span::styled( + name, + Style::default().fg(Color::Red).add_modifier(Modifier::BOLD), + ), + ]); + + let yes_text = " (Y)es "; + let no_text = " (N)o "; + + // Find the maximum line width & height, and add some padding + let max_line_width = u16::try_from(confirm.width()).unwrap_or(64) + 12; + let lines = 8; + + let confirm_para = Paragraph::new(confirm).alignment(Alignment::Center); + + let button_block = || { + Block::default() + .border_type(BorderType::Rounded) + .borders(Borders::ALL) + }; + + let yes_para = Paragraph::new(yes_text) + .alignment(Alignment::Center) + .block(button_block()); + // Need to add some padding for the borders + let yes_chars = u16::try_from(yes_text.chars().count() + 2).unwrap_or(9); + + let no_para = Paragraph::new(no_text) + .alignment(Alignment::Center) + .block(button_block()); + // Need to add some padding for the borders + let no_chars = u16::try_from(no_text.chars().count() + 2).unwrap_or(8); + + let area = popup( + lines, + max_line_width.into(), + f.size(), + BoxLocation::MiddleCentre, + ); + + let split_popup = Layout::default() + .direction(Direction::Vertical) + .constraints( + [ + Constraint::Min(2), + Constraint::Max(1), + Constraint::Max(1), + Constraint::Max(3), + Constraint::Min(1), + ] + .as_ref(), + ) + .split(area); + + let button_spacing = (max_line_width - no_chars - yes_chars) / 3; + let split_buttons = Layout::default() + .direction(Direction::Horizontal) + .constraints( + [ + Constraint::Min(button_spacing), + Constraint::Max(no_chars), + Constraint::Min(button_spacing), + Constraint::Max(yes_chars), + Constraint::Min(button_spacing), + ] + .as_ref(), + ) + .split(split_popup[3]); + + let no_area = split_buttons[1]; + let yes_area = split_buttons[3]; + + // Insert button areas into region map, so can interact with them on click + gui_state + .lock() + .update_region_map(Region::Delete(DeleteButton::No), no_area); + + gui_state + .lock() + .update_region_map(Region::Delete(DeleteButton::Yes), yes_area); + + f.render_widget(Clear, area); + f.render_widget(block, area); + f.render_widget(confirm_para, split_popup[1]); + f.render_widget(no_para, no_area); + f.render_widget(yes_para, yes_area); +} + /// Draw an error popup over whole screen pub fn error(f: &mut Frame<'_, B>, error: AppError, seconds: Option) { let block = Block::default() diff --git a/src/ui/gui_state.rs b/src/ui/gui_state.rs index cb8571b..baa575a 100644 --- a/src/ui/gui_state.rs +++ b/src/ui/gui_state.rs @@ -5,7 +5,7 @@ use std::{ }; use uuid::Uuid; -use crate::app_data::Header; +use crate::app_data::{ContainerId, Header}; #[derive(Debug, Default, Clone, Copy, Eq, Hash, PartialEq)] pub enum SelectablePanel { @@ -43,6 +43,13 @@ impl SelectablePanel { pub enum Region { Panel(SelectablePanel), Header(Header), + Delete(DeleteButton), +} + +#[derive(Debug, Clone, Copy, Eq, Hash, PartialEq)] +pub enum DeleteButton { + Yes, + No, } #[allow(unused)] @@ -191,11 +198,13 @@ impl fmt::Display for Loading { /// The application gui state can be in multiple of these four states at the same time /// Various functions (e.g input handler), operate differently depending upon current Status +// Copy #[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] pub enum Status { Init, Help, DockerConnect, + DeleteConfirm, Error, } @@ -206,7 +215,9 @@ pub struct GuiState { is_loading: HashSet, loading_icon: Loading, panel_map: HashMap, + delete_map: HashMap, status: HashSet, + delete_container: Option, pub info_box_text: Option, pub selected_panel: SelectablePanel, } @@ -229,6 +240,16 @@ impl GuiState { } } + /// Check if a given Rect (a clicked area of 1x1), interacts with any known delete button + pub fn button_intersect(&mut self, rect: Rect) -> Option { + self.delete_map + .iter() + .filter(|i| i.1.intersects(rect)) + .collect::>() + .get(0) + .map(|data| *data.0) + } + /// Check if a given Rect (a clicked area of 1x1), interacts with any known panels pub fn header_intersect(&mut self, rect: Rect) -> Option

{ self.heading_map @@ -240,7 +261,7 @@ impl GuiState { } /// Insert, or updates header area panel into heading_map - pub fn update_heading_map(&mut self, region: Region, area: Rect) { + pub fn update_region_map(&mut self, region: Region, area: Rect) { match region { Region::Header(header) => self .heading_map @@ -252,9 +273,30 @@ impl GuiState { .entry(panel) .and_modify(|w| *w = area) .or_insert(area), + Region::Delete(button) => self + .delete_map + .entry(button) + .and_modify(|w| *w = area) + .or_insert(area), }; } + /// Check if an ContainerId is set in the delete_container field + pub fn get_delete_container(&self) -> Option { + self.delete_container.clone() + } + + /// Set either a ContainerId, or None, to the delete_container field + /// If Some, will also insert the DeleteConfirm status into self.status + pub fn set_delete_container(&mut self, id: Option) { + if id.is_some() { + self.status.insert(Status::DeleteConfirm); + } else { + self.status.remove(&Status::DeleteConfirm); + } + self.delete_container = id; + } + /// Check if the current gui_status contains any of the given status' /// Don't really like this methodology for gui state, needs a re-think pub fn status_contains(&self, status: &[Status]) -> bool { @@ -264,6 +306,9 @@ impl GuiState { /// Remove a gui_status into the current gui_status HashSet pub fn status_del(&mut self, status: Status) { self.status.remove(&status); + if status == Status::DeleteConfirm { + self.status.remove(&Status::DeleteConfirm); + } } /// Insert a gui_status into the current gui_status HashSet diff --git a/src/ui/mod.rs b/src/ui/mod.rs index ddee0c2..53ec6a1 100644 --- a/src/ui/mod.rs +++ b/src/ui/mod.rs @@ -24,7 +24,7 @@ mod draw_blocks; mod gui_state; pub use self::color_match::*; -pub use self::gui_state::{GuiState, SelectablePanel, Status}; +pub use self::gui_state::{DeleteButton, GuiState, SelectablePanel, Status}; use crate::{ app_data::AppData, app_error::AppError, docker_data::DockerMessage, input_handler::InputMessages, @@ -198,20 +198,23 @@ impl Ui { } /// Draw the main ui to a frame of the terminal +/// TODO add a single line area for debug message - if not in release mode, maybe with #[cfg(debug_assertions)] ? fn draw_frame( f: &mut Frame<'_, B>, app_data: &Arc>, gui_state: &Arc>, ) { - // set max height for container section, needs +4 to deal with docker commands list and borders + // set max height for container section, needs +5 to deal with docker commands list and borders let height = app_data.lock().get_container_len(); - let height = if height < 12 { height + 4 } else { 12 }; + let height = if height < 12 { height + 5 } else { 12 }; let column_widths = app_data.lock().get_width(); let has_containers = app_data.lock().get_container_len() > 0; let has_error = app_data.lock().get_error(); let sorted_by = app_data.lock().get_sorted(); + let delete_confirm = gui_state.lock().get_delete_container(); + let show_help = gui_state.lock().status_contains(&[Status::Help]); let info_text = gui_state.lock().info_box_text.clone(); let loading_icon = gui_state.lock().get_loading(); @@ -274,6 +277,20 @@ fn draw_frame( gui_state, ); + if let Some(id) = delete_confirm { + let name = app_data.lock().get_container_name_by_id(&id); + name.map_or_else( + || { + // If a container is deleted outside of oxker but whilst the Delete Confirm dialog is open, it can get caught in kind of a dead lock situation + // so if in that unique situation, just clear the delete_container id + gui_state.lock().set_delete_container(None); + }, + |name| { + draw_blocks::delete_confirm(f, gui_state, &name); + }, + ); + } + // only draw charts if there are containers if has_containers { draw_blocks::chart(f, lower_main[1], app_data); From b9c125da46fe0eb4aae15c354d87ac824e9cb83a Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 02:22:47 +0000 Subject: [PATCH 09/20] fix: out of bound bug in heading_bar use a `saturating_sub` to calculate the column_width --- src/docker_data/mod.rs | 2 +- src/ui/draw_blocks.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/docker_data/mod.rs b/src/docker_data/mod.rs index 391b3fc..92fd28c 100644 --- a/src/docker_data/mod.rs +++ b/src/docker_data/mod.rs @@ -424,7 +424,7 @@ impl DockerData { self.gui_state.lock().set_delete_container(None); } DockerMessage::ConfirmDelete(id) => { - self.gui_state.lock().set_delete_container(Some(id)) + self.gui_state.lock().set_delete_container(Some(id)); } DockerMessage::Update => self.update_everything().await, DockerMessage::Quit => { diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index c6834d1..341b33b 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -432,7 +432,7 @@ pub fn heading_bar( let info_text = format!("( h ) {suffix} help {MARGIN}",); let info_width = info_text.chars().count(); - let column_width = usize::from(area.width) - info_width; + let column_width = usize::from(area.width).saturating_sub(info_width); let column_width = if column_width > 0 { column_width } else { 1 }; let splits = if has_containers { vec![ From d628e8029942916053b3b7e72d363b1290fc5711 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 02:28:53 +0000 Subject: [PATCH 10/20] refactor: popup() use `saturating_x()` rather than `checked_x()` --- src/ui/draw_blocks.rs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index 341b33b..25ed869 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -11,7 +11,7 @@ use ratatui::{ }, Frame, }; -use std::default::Default; +use std::{default::Default, ops::Sub}; use std::{fmt::Display, sync::Arc}; use crate::app_data::{Header, SortedOrder}; @@ -898,9 +898,7 @@ pub fn info(f: &mut Frame<'_, B>, text: String) { fn popup(text_lines: usize, text_width: usize, r: Rect, box_location: BoxLocation) -> Rect { // Make sure blank_space can't be an negative, as will crash let calc = |x: u16, y: usize| { - (usize::from(x).checked_sub(y).map_or(1usize, |f| f)) - .checked_div(2) - .map_or(1usize, |f| f) + usize::from(x).saturating_sub(y).saturating_div(2) }; let blank_vertical = calc(r.height, text_lines); From 73ab7580c61dd59c59f10872629111360afb9033 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 02:58:44 +0000 Subject: [PATCH 11/20] docs: README.md and screenshot updated --- .github/screenshot_01.png | Bin 125418 -> 110799 bytes README.md | 13 +++++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/screenshot_01.png b/.github/screenshot_01.png index d3b2c72524cca2fa417b65c776062223d6e94ffd..ac502aba86afebe8ad7ffd2d3a5587193bf2d49d 100644 GIT binary patch literal 110799 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 literal 125418 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 Hub, with images built for `linux/amd64`, `linux/arm64`, and `linux/arm/v6` +Published on Docker Hub and ghcr.io, +with images built for `linux/amd64`, `linux/arm64`, and `linux/arm/v6` + +**via Docker Hub** ```shell docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock:ro --pull=always mrjackwills/oxker ``` +**via ghcr.io** + +```shell +docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock:ro --pull=always ghcr.io/mrjackwills/oxker +``` + ### Nix Using nix flakes, oxker can be ran directly with @@ -68,7 +77,7 @@ rm oxker_linux_x86_64.tar.gz oxker or, for automatic platform selection, download, and installation (to `$HOME/.local/bin`) -*One should always verify script content before running in a shell* +*One should always verify script content before running in a shell* ```shell curl https://raw.githubusercontent.com/mrjackwills/oxker/main/install.sh | bash From 58e03a750fe89b914b9069cb0c6c02a3d0929439 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 03:14:46 +0000 Subject: [PATCH 12/20] chore: dependencies updated --- Cargo.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0c9adac..e2a4c84 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -171,9 +171,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6efb5f0a41b5ef5b50c5da28c07609c20091df0c1fc33d418fa2a7e693c2b624" +checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" dependencies = [ "clap_builder", "clap_derive", @@ -182,9 +182,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.2.0" +version = "4.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671fcaa5debda4b9a84aa7fde49c907c8986c0e6ab927e04217c9cb74e7c8bc9" +checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" dependencies = [ "anstream", "anstyle", @@ -884,9 +884,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.4" +version = "0.37.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c348b5dc624ecee40108aa2922fed8bad89d7fcc2b9f8cb18f632898ac4a37f9" +checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75" dependencies = [ "bitflags", "errno", From 932644b74f780619f0ca1f5f8a97bc906c5ec851 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 03:15:11 +0000 Subject: [PATCH 13/20] docs: changelog --- CHANGELOG.md | 19 +++++++++++++++++++ src/ui/draw_blocks.rs | 13 +++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8ad202..8f46fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +### Chores ++ dependencies updated, [7a9bdc9699594532e17a33e044ca0678693c8d3f], [58e03a750fe89b914b9069cb0c6c02a3d0929439] + +### Docs ++ README.md and screenshot updated, [73ab7580c61dd59c59f10872629111360afb9033] + +### Features ++ Ability to delete a container, be warned, as this will force delete, closes #27, [937202fe34d1692693c62dd1a7ad19db37651233] ++ Publish images to `ghcr.io` as well as Docker Hub, [cb1271cf7f21c898020481ad85914a3dcc83ec93] ++ Replace `tui-rs` with [ratatui](https://github.com/tui-rs-revival/ratatui), [d431f850219b28af2bc45f3b6917377604596a40] + +### Fixes ++ out of bound bug in `heading_bar()`, [b9c125da46fe0eb4aae15c354d87ac824e9cb83a] ++ `-d` arg error text updated, [e0b49be84062abdfcb636418f57043fad37d06ec] + +### Refactors ++ `popup()` use `saturating_x()` rather than `checked_x()`, [d628e8029942916053b3b7e72d363b1290fc5711] ++ button_item() include brackets, [7c92ffef7da20143a31706a310b5e6f2c3e0554f] + # v0.2.5 ### 2023-03-13 diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index 25ed869..ff55df2 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -11,7 +11,7 @@ use ratatui::{ }, Frame, }; -use std::{default::Default, ops::Sub}; +use std::default::Default; use std::{fmt::Display, sync::Arc}; use crate::app_data::{Header, SortedOrder}; @@ -794,16 +794,17 @@ pub fn delete_confirm( ) .split(area); + // Should maybe have a differenet button_space IF the f.width() is within 2 chars of no_chars + yes_chars? let button_spacing = (max_line_width - no_chars - yes_chars) / 3; let split_buttons = Layout::default() .direction(Direction::Horizontal) .constraints( [ - Constraint::Min(button_spacing), - Constraint::Max(no_chars), - Constraint::Min(button_spacing), - Constraint::Max(yes_chars), - Constraint::Min(button_spacing), + Constraint::Max(button_spacing), + Constraint::Min(no_chars), + Constraint::Max(button_spacing), + Constraint::Min(yes_chars), + Constraint::Max(button_spacing), ] .as_ref(), ) From 8a6ac422d9a7dfdde144d045f8f42efb4c7dcbb1 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 03:16:15 +0000 Subject: [PATCH 14/20] docs: changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f46fe9..ba3020c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ ### Features + Ability to delete a container, be warned, as this will force delete, closes #27, [937202fe34d1692693c62dd1a7ad19db37651233] -+ Publish images to `ghcr.io` as well as Docker Hub, [cb1271cf7f21c898020481ad85914a3dcc83ec93] ++ Publish images to `ghcr.io` as well as Docker Hub, and correctly tag images with `latest` and the current sermver, [cb1271cf7f21c898020481ad85914a3dcc83ec93] + Replace `tui-rs` with [ratatui](https://github.com/tui-rs-revival/ratatui), [d431f850219b28af2bc45f3b6917377604596a40] ### Fixes From b246e8c25af0c5136953afca7c694cda66550d9b Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 17:17:48 +0000 Subject: [PATCH 15/20] chore: dependencies updated --- Cargo.lock | 99 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 78 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e2a4c84..bbb4fc3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -351,18 +351,18 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-macro" @@ -377,15 +377,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" @@ -537,9 +537,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.54" +version = "0.1.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" +checksum = "716f12fbcfac6ffab0a5e9ec51d0a0ff70503742bb2dc7b99396394c9dc323f0" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1454,11 +1454,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.46.0" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +checksum = "2649ff315bee4c98757f15dac226efe3d81927adbb6e882084bb1ee3e0c330a7" dependencies = [ - "windows-targets", + "windows-targets 0.47.0", ] [[package]] @@ -1467,7 +1467,7 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets", + "windows-targets 0.42.2", ] [[package]] @@ -1476,13 +1476,28 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f8996d3f43b4b2d44327cd71b7b0efd1284ab60e6e9d0e8b630e18555d87d3e" +dependencies = [ + "windows_aarch64_gnullvm 0.47.0", + "windows_aarch64_msvc 0.47.0", + "windows_i686_gnu 0.47.0", + "windows_i686_msvc 0.47.0", + "windows_x86_64_gnu 0.47.0", + "windows_x86_64_gnullvm 0.47.0", + "windows_x86_64_msvc 0.47.0", ] [[package]] @@ -1491,38 +1506,80 @@ version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831d567d53d4f3cb1db332b68e6e2b6260228eb4d99a777d8b2e8ed794027c90" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +[[package]] +name = "windows_aarch64_msvc" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a42d54a417c60ce4f0e31661eed628f0fa5aca73448c093ec4d45fab4c51cdf" + [[package]] name = "windows_i686_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +[[package]] +name = "windows_i686_gnu" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1925beafdbb22201a53a483db861a5644123157c1c3cee83323a2ed565d71e3" + [[package]] name = "windows_i686_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +[[package]] +name = "windows_i686_msvc" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8ef8f2f1711b223947d9b69b596cf5a4e452c930fb58b6fc3fdae7d0ec6b31" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +[[package]] +name = "windows_x86_64_gnu" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acaa0c2cf0d2ef99b61c308a0c3dbae430a51b7345dedec470bd8f53f5a3642" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5a0628f71be1d11e17ca4a0e9e15b3a5180f6fbf1c2d55e3ba3f850378052c1" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6e62c256dc6d40b8c8707df17df8d774e60e39db723675241e7c15e910bce7" From 5a360360ba9dc2f550253f4dd33083d79764b874 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 18:44:14 +0000 Subject: [PATCH 16/20] chore: dependencies updated --- Cargo.lock | 10 +++++----- src/ui/draw_blocks.rs | 6 ++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bbb4fc3..2cf3324 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -366,13 +366,13 @@ checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.11", ] [[package]] @@ -389,9 +389,9 @@ checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-core", "futures-macro", diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index ff55df2..2fc236f 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -796,6 +796,12 @@ pub fn delete_confirm( // Should maybe have a differenet button_space IF the f.width() is within 2 chars of no_chars + yes_chars? let button_spacing = (max_line_width - no_chars - yes_chars) / 3; + + let button_spacing = if (button_spacing + max_line_width) > f.size().width { + 1 + }else{ + button_spacing + }; let split_buttons = Layout::default() .direction(Direction::Horizontal) .constraints( From a44fddb82ea4f82b2a482c434464c7129a5ec929 Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 18:46:59 +0000 Subject: [PATCH 17/20] docs: changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba3020c..9fd238e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ ### Chores -+ dependencies updated, [7a9bdc9699594532e17a33e044ca0678693c8d3f], [58e03a750fe89b914b9069cb0c6c02a3d0929439] ++ dependencies updated, [7a9bdc9699594532e17a33e044ca0678693c8d3f], [58e03a750fe89b914b9069cb0c6c02a3d0929439], [b246e8c25af0c5136953afca7c694cda66550d9b] ### Docs + README.md and screenshot updated, [73ab7580c61dd59c59f10872629111360afb9033] From b25f8b18f4f2acd5c9af4a1d40655761d1bd720e Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 19:29:40 +0000 Subject: [PATCH 18/20] feat: clear `delete_map` on set_delete_container(None) --- src/ui/gui_state.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/gui_state.rs b/src/ui/gui_state.rs index baa575a..0732154 100644 --- a/src/ui/gui_state.rs +++ b/src/ui/gui_state.rs @@ -292,6 +292,7 @@ impl GuiState { if id.is_some() { self.status.insert(Status::DeleteConfirm); } else { + self.delete_map.clear(); self.status.remove(&Status::DeleteConfirm); } self.delete_container = id; From bb82de34bfb62c1f452c2b56f511c7d200e761eb Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 19:29:59 +0000 Subject: [PATCH 19/20] docs: changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fd238e..d9cb487 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ + README.md and screenshot updated, [73ab7580c61dd59c59f10872629111360afb9033] ### Features -+ Ability to delete a container, be warned, as this will force delete, closes #27, [937202fe34d1692693c62dd1a7ad19db37651233] ++ Ability to delete a container, be warned, as this will force delete, closes #27, [937202fe34d1692693c62dd1a7ad19db37651233], [b25f8b18f4f2acd5c9af4a1d40655761d1bd720e] + Publish images to `ghcr.io` as well as Docker Hub, and correctly tag images with `latest` and the current sermver, [cb1271cf7f21c898020481ad85914a3dcc83ec93] + Replace `tui-rs` with [ratatui](https://github.com/tui-rs-revival/ratatui), [d431f850219b28af2bc45f3b6917377604596a40] From 18b838a0fc173ca97da13c50eeecca2260dc3faa Mon Sep 17 00:00:00 2001 From: Jack Wills <32690432+mrjackwills@users.noreply.github.com> Date: Thu, 30 Mar 2023 20:06:08 +0000 Subject: [PATCH 20/20] chore: release v0.3.0 --- .github/release-body.md | 26 ++++++++++++-------------- CHANGELOG.md | 21 ++++++++++++--------- Cargo.lock | 2 +- Cargo.toml | 2 +- src/ui/draw_blocks.rs | 18 ++++++++---------- src/ui/gui_state.rs | 2 +- 6 files changed, 35 insertions(+), 36 deletions(-) diff --git a/.github/release-body.md b/.github/release-body.md index 28640bb..f9cc715 100644 --- a/.github/release-body.md +++ b/.github/release-body.md @@ -1,25 +1,23 @@ -### 2023-03-13 +### 2023-03-30 ### Chores -+ Rust 1.68.0 clippy linting, [5582c45403413d3355bbcd629cfad559296f5e5b] -+ devcontainer use sparse protocol index, [20b79e9cd5bf75bb253158c0b590284139e0291d] -+ dependencies updated, [0c07d4b40607a0eba003b6dcd0345ec0543c6264], [601a73d2c830043a25d64922c4d4aa38f8801912], [5aaa3c1ab08b0c85df9bfce18a3e60206556fa58], [7a1563030e48499da7f41033673c70deefe3de8a], [457157755baa1f9e9cfef9315a7940c357b0953d] ++ dependencies updated, [7a9bdc9699594532e17a33e044ca0678693c8d3f], [58e03a750fe89b914b9069cb0c6c02a3d0929439], [b246e8c25af0c5136953afca7c694cda66550d9b] + +### Docs ++ README.md and screenshot updated, [73ab7580c61dd59c59f10872629111360afb9033] ### Features -+ increase mpsc channel size from 16 to 32 messages, [924f14e998f79f731447a2eded038eab51f2e932] -+ KeyEvents send modifier, so can quit on `ctrl + c`, [598f67c6f6a8713102bcc415f0409911763bb914] -+ only send relevant mouse events to input handler, [507660d835d0beaa8cd021110401ecc58c0613c6] ++ Ability to delete a container, be warned, as this will force delete, closes #27, [937202fe34d1692693c62dd1a7ad19db37651233], [b25f8b18f4f2acd5c9af4a1d40655761d1bd720e] ++ Publish images to `ghcr.io` as well as Docker Hub, and correctly tag images with `latest` and the current sermver, [cb1271cf7f21c898020481ad85914a3dcc83ec93] ++ Replace `tui-rs` with [ratatui](https://github.com/tui-rs-revival/ratatui), [d431f850219b28af2bc45f3b6917377604596a40] ### Fixes -+ GitHub workflow on SEMEVR tag only, [140773865165bf006e74f9d436fc744220f5eae7] ++ out of bound bug in `heading_bar()`, [b9c125da46fe0eb4aae15c354d87ac824e9cb83a] ++ `-d` arg error text updated, [e0b49be84062abdfcb636418f57043fad37d06ec] ### Refactors -+ replace `unwrap_or(())` with `.ok()`, [8ba37a165bb89277ab957194da6464bdb35be2e6] -+ use `unwrap_or_default()`, [79de92c3921702417bb2df1f44939a7b09cb7fa0] -+ Result return, [d9f0bd5566e27218b8c8eaba6ece237907771c1d] - -### Reverts -+ temporary devcontainer buildkit fix removed, [d1497a4451f4de54d3cc26c5a3957cd636c29118] ++ `popup()` use `saturating_x()` rather than `checked_x()`, [d628e8029942916053b3b7e72d363b1290fc5711] ++ button_item() include brackets, [7c92ffef7da20143a31706a310b5e6f2c3e0554f] see CHANGELOG.md for more details diff --git a/CHANGELOG.md b/CHANGELOG.md index d9cb487..067694d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,21 +1,24 @@ +# v0.3.0 +### 2023-03-30 + ### Chores -+ dependencies updated, [7a9bdc9699594532e17a33e044ca0678693c8d3f], [58e03a750fe89b914b9069cb0c6c02a3d0929439], [b246e8c25af0c5136953afca7c694cda66550d9b] ++ dependencies updated, [7a9bdc96](https://github.com/mrjackwills/oxker/commit/7a9bdc9699594532e17a33e044ca0678693c8d3f), [58e03a75](https://github.com/mrjackwills/oxker/commit/58e03a750fe89b914b9069cb0c6c02a3d0929439), [b246e8c2](https://github.com/mrjackwills/oxker/commit/b246e8c25af0c5136953afca7c694cda66550d9b) ### Docs -+ README.md and screenshot updated, [73ab7580c61dd59c59f10872629111360afb9033] ++ README.md and screenshot updated, [73ab7580](https://github.com/mrjackwills/oxker/commit/73ab7580c61dd59c59f10872629111360afb9033) ### Features -+ Ability to delete a container, be warned, as this will force delete, closes #27, [937202fe34d1692693c62dd1a7ad19db37651233], [b25f8b18f4f2acd5c9af4a1d40655761d1bd720e] -+ Publish images to `ghcr.io` as well as Docker Hub, and correctly tag images with `latest` and the current sermver, [cb1271cf7f21c898020481ad85914a3dcc83ec93] -+ Replace `tui-rs` with [ratatui](https://github.com/tui-rs-revival/ratatui), [d431f850219b28af2bc45f3b6917377604596a40] ++ Ability to delete a container, be warned, as this will force delete, closes [#27](https://github.com/mrjackwills/oxker/issues/27), [937202fe](https://github.com/mrjackwills/oxker/commit/937202fe34d1692693c62dd1a7ad19db37651233), [b25f8b18](https://github.com/mrjackwills/oxker/commit/b25f8b18f4f2acd5c9af4a1d40655761d1bd720e) ++ Publish images to `ghcr.io` as well as Docker Hub, and correctly tag images with `latest` and the current sermver, [cb1271cf](https://github.com/mrjackwills/oxker/commit/cb1271cf7f21c898020481ad85914a3dcc83ec93) ++ Replace `tui-rs` with [ratatui](https://github.com/tui-rs-revival/ratatui), [d431f850](https://github.com/mrjackwills/oxker/commit/d431f850219b28af2bc45f3b6917377604596a40) ### Fixes -+ out of bound bug in `heading_bar()`, [b9c125da46fe0eb4aae15c354d87ac824e9cb83a] -+ `-d` arg error text updated, [e0b49be84062abdfcb636418f57043fad37d06ec] ++ out of bound bug in `heading_bar()`, [b9c125da](https://github.com/mrjackwills/oxker/commit/b9c125da46fe0eb4aae15c354d87ac824e9cb83a) ++ `-d` arg error text updated, [e0b49be8](https://github.com/mrjackwills/oxker/commit/e0b49be84062abdfcb636418f57043fad37d06ec) ### Refactors -+ `popup()` use `saturating_x()` rather than `checked_x()`, [d628e8029942916053b3b7e72d363b1290fc5711] -+ button_item() include brackets, [7c92ffef7da20143a31706a310b5e6f2c3e0554f] ++ `popup()` use `saturating_x()` rather than `checked_x()`, [d628e802](https://github.com/mrjackwills/oxker/commit/d628e8029942916053b3b7e72d363b1290fc5711) ++ button_item() include brackets, [7c92ffef](https://github.com/mrjackwills/oxker/commit/7c92ffef7da20143a31706a310b5e6f2c3e0554f) # v0.2.5 ### 2023-03-13 diff --git a/Cargo.lock b/Cargo.lock index 2cf3324..f10e5dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -729,7 +729,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "oxker" -version = "0.2.5" +version = "0.3.0" dependencies = [ "anyhow", "bollard", diff --git a/Cargo.toml b/Cargo.toml index 7ba44aa..8d339ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "oxker" -version = "0.2.5" +version = "0.3.0" edition = "2021" authors = ["Jack Wills "] description = "A simple tui to view & control docker containers" diff --git a/src/ui/draw_blocks.rs b/src/ui/draw_blocks.rs index 2fc236f..29e5589 100644 --- a/src/ui/draw_blocks.rs +++ b/src/ui/draw_blocks.rs @@ -432,7 +432,7 @@ pub fn heading_bar( let info_text = format!("( h ) {suffix} help {MARGIN}",); let info_width = info_text.chars().count(); - let column_width = usize::from(area.width).saturating_sub(info_width); + let column_width = usize::from(area.width).saturating_sub(info_width); let column_width = if column_width > 0 { column_width } else { 1 }; let splits = if has_containers { vec![ @@ -794,14 +794,14 @@ pub fn delete_confirm( ) .split(area); - // Should maybe have a differenet button_space IF the f.width() is within 2 chars of no_chars + yes_chars? + // Should maybe have a differenet button_space IF the f.width() is within 2 chars of no_chars + yes_chars? let button_spacing = (max_line_width - no_chars - yes_chars) / 3; - let button_spacing = if (button_spacing + max_line_width) > f.size().width { - 1 - }else{ - button_spacing - }; + let button_spacing = if (button_spacing + max_line_width) > f.size().width { + 1 + } else { + button_spacing + }; let split_buttons = Layout::default() .direction(Direction::Horizontal) .constraints( @@ -904,9 +904,7 @@ pub fn info(f: &mut Frame<'_, B>, text: String) { /// draw a box in the one of the BoxLocations, based on max line width + number of lines fn popup(text_lines: usize, text_width: usize, r: Rect, box_location: BoxLocation) -> Rect { // Make sure blank_space can't be an negative, as will crash - let calc = |x: u16, y: usize| { - usize::from(x).saturating_sub(y).saturating_div(2) - }; + let calc = |x: u16, y: usize| usize::from(x).saturating_sub(y).saturating_div(2); let blank_vertical = calc(r.height, text_lines); let blank_horizontal = calc(r.width, text_width); diff --git a/src/ui/gui_state.rs b/src/ui/gui_state.rs index 0732154..5a6c128 100644 --- a/src/ui/gui_state.rs +++ b/src/ui/gui_state.rs @@ -292,7 +292,7 @@ impl GuiState { if id.is_some() { self.status.insert(Status::DeleteConfirm); } else { - self.delete_map.clear(); + self.delete_map.clear(); self.status.remove(&Status::DeleteConfirm); } self.delete_container = id;