getting there
This commit is contained in:
Generated
+13
@@ -170,6 +170,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
|
checksum = "b193af5b67834b676abd72466a96c1024e6a6ad978a1f484bd90b85c94041351"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap_builder",
|
"clap_builder",
|
||||||
|
"clap_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -184,6 +185,18 @@ dependencies = [
|
|||||||
"strsim",
|
"strsim",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "clap_derive"
|
||||||
|
version = "4.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1110bd8a634a1ab8cb04345d8d878267d57c3cf1b38d91b71af6686408bbca6a"
|
||||||
|
dependencies = [
|
||||||
|
"heck",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.117",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clap_lex"
|
name = "clap_lex"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
|||||||
+1
-1
@@ -6,5 +6,5 @@ edition = "2024"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
ratatui = "0.30.0"
|
ratatui = "0.30.0"
|
||||||
crossterm = "0.29.0"
|
crossterm = "0.29.0"
|
||||||
clap = "4.6.0"
|
clap = { version = "4.6.0", features = ["derive"] }
|
||||||
serde_json = "1.0.149"
|
serde_json = "1.0.149"
|
||||||
|
|||||||
+31
-3
@@ -1,4 +1,3 @@
|
|||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
pub struct TabsState<'a> {
|
pub struct TabsState<'a> {
|
||||||
pub titles: Vec<&'a str>,
|
pub titles: Vec<&'a str>,
|
||||||
@@ -21,8 +20,37 @@ impl<'a> TabsState<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pub struct Servers<'a> {
|
||||||
|
pub servers: Vec<Server<'a>>,
|
||||||
|
pub index: usize,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct App {
|
impl<'a> Servers<'a> {
|
||||||
|
pub const fn new( servers: Vec<Server<'a>>) -> Self {
|
||||||
|
Self { servers, index: 0 }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn next(&mut self) {
|
||||||
|
self.index = (self.index + 1) % self.servers.len();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn previous(&mut self) {
|
||||||
|
if self.index > 0 {
|
||||||
|
self.index -= 1;
|
||||||
|
} else {
|
||||||
|
self.index = self.servers.len() - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Server<'a> {
|
||||||
|
pub name: &'a str,
|
||||||
|
pub location: &'a str,
|
||||||
|
pub ip: &'a str,
|
||||||
|
pub connected: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct App<'a> {
|
||||||
pub title: &'a str,
|
pub title: &'a str,
|
||||||
pub should_quit: bool,
|
pub should_quit: bool,
|
||||||
pub tabs: TabsState<'a>,
|
pub tabs: TabsState<'a>,
|
||||||
@@ -30,7 +58,7 @@ pub struct App {
|
|||||||
pub enhanced_graphics: bool,
|
pub enhanced_graphics: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl App {
|
impl<'a> App<'a> {
|
||||||
pub fn new(title: &'a str, servers: Vec<Server<'a>>, enhanced_graphics: bool) -> Self {
|
pub fn new(title: &'a str, servers: Vec<Server<'a>>, enhanced_graphics: bool) -> Self {
|
||||||
App {
|
App {
|
||||||
title,
|
title,
|
||||||
|
|||||||
+6
-2
@@ -10,7 +10,7 @@ use crossterm::terminal::{
|
|||||||
use ratatui::backend::{Backend, CrosstermBackend};
|
use ratatui::backend::{Backend, CrosstermBackend};
|
||||||
use ratatui::Terminal;
|
use ratatui::Terminal;
|
||||||
|
|
||||||
use crate::app::App;
|
use crate::app::{App, Server};
|
||||||
use crate::ui;
|
use crate::ui;
|
||||||
|
|
||||||
pub fn run(tick_rate: Duration, enhanced_graphics: bool) -> Result<(), Box<dyn Error>> {
|
pub fn run(tick_rate: Duration, enhanced_graphics: bool) -> Result<(), Box<dyn Error>> {
|
||||||
@@ -22,7 +22,7 @@ pub fn run(tick_rate: Duration, enhanced_graphics: bool) -> Result<(), Box<dyn E
|
|||||||
let mut terminal = Terminal::new(backend)?;
|
let mut terminal = Terminal::new(backend)?;
|
||||||
|
|
||||||
// create app and run it
|
// create app and run it
|
||||||
let app = App::new("Klipper-Tui", enhanced_graphics);
|
let app = App::new("Klipper-Tui", get_servers(), enhanced_graphics);
|
||||||
let app_result = run_app(&mut terminal, app, tick_rate);
|
let app_result = run_app(&mut terminal, app, tick_rate);
|
||||||
|
|
||||||
// restore terminal
|
// restore terminal
|
||||||
@@ -74,3 +74,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_servers<'a>() -> Vec<Server<'a>> {
|
||||||
|
//todo: add printer ip addrs
|
||||||
|
}
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ use crate::{
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Parser)]
|
#[derive(Parser)]
|
||||||
struct Cli {
|
struct Cli {
|
||||||
/// time in ms between two ticks.
|
/// time in ms between two ticks.
|
||||||
#[arg(short, long, default_value_t = 200)]
|
#[arg(short, long, default_value_t = 200)]
|
||||||
@@ -23,7 +23,7 @@ struct Cli {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<(), Box<dyn Error>> {
|
fn main() -> Result<(), Box<dyn Error>> {
|
||||||
let cli = Cli::Parse();
|
let cli = Cli::parse();
|
||||||
let tick_rate = Duration::from_millis(cli.tick_rate);
|
let tick_rate = Duration::from_millis(cli.tick_rate);
|
||||||
crate::crossterm::run(tick_rate, cli.unicode)?;
|
crate::crossterm::run(tick_rate, cli.unicode)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in New Issue
Block a user