better fractioning of the software

This commit is contained in:
filipriec
2025-02-16 23:03:40 +01:00
parent 1e4ca44a48
commit b376b8dfae
6 changed files with 130 additions and 144 deletions

41
src/client/terminal.rs Normal file
View File

@@ -0,0 +1,41 @@
// src/client/terminal.rs
use crossterm::event::{self, Event};
use crossterm::{
execute,
terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen},
};
use ratatui::{backend::CrosstermBackend, Terminal};
use std::io::{self, stdout};
pub struct AppTerminal {
terminal: Terminal<CrosstermBackend<io::Stdout>>,
}
impl AppTerminal {
pub fn new() -> Result<Self, Box<dyn std::error::Error>> {
enable_raw_mode()?; // Moved before execute!
let mut stdout = stdout();
execute!(stdout, EnterAlternateScreen)?;
let backend = CrosstermBackend::new(stdout);
let terminal = Terminal::new(backend)?;
Ok(Self { terminal })
}
pub fn draw<F>(&mut self, f: F) -> Result<(), Box<dyn std::error::Error>>
where
F: FnOnce(&mut ratatui::Frame),
{
self.terminal.draw(f)?;
Ok(())
}
pub fn read_event(&self) -> Result<Event, Box<dyn std::error::Error>> {
Ok(event::read()?)
}
pub fn cleanup(&mut self) -> Result<(), Box<dyn std::error::Error>> {
disable_raw_mode()?;
execute!(self.terminal.backend_mut(), LeaveAlternateScreen)?;
Ok(())
}
}