@@ -16,26 +16,49 @@ pub mod ui;
1616use app:: App ;
1717use crate :: storage:: Storage ;
1818
19- pub async fn run ( storage : Storage , master_key : String ) -> Result < ( ) > {
20- // setup terminal
19+ pub type TuiTerminal = Terminal < CrosstermBackend < std:: io:: Stdout > > ;
20+
21+ pub fn init_terminal ( ) -> Result < TuiTerminal > {
2122 enable_raw_mode ( ) ?;
2223 let mut stdout = io:: stdout ( ) ;
2324 execute ! ( stdout, EnterAlternateScreen , EnableMouseCapture ) ?;
2425 let backend = CrosstermBackend :: new ( stdout) ;
25- let mut terminal = Terminal :: new ( backend) ?;
26-
27- // create app and run it
28- let mut app = App :: new ( storage, master_key) . await ?;
29- let res = run_app ( & mut terminal, & mut app) . await ;
26+ Terminal :: new ( backend) . map_err ( Into :: into)
27+ }
3028
31- // restore terminal
29+ pub fn restore_terminal ( mut terminal : TuiTerminal ) -> Result < ( ) > {
3230 disable_raw_mode ( ) ?;
3331 execute ! (
3432 terminal. backend_mut( ) ,
3533 LeaveAlternateScreen ,
3634 DisableMouseCapture
3735 ) ?;
3836 terminal. show_cursor ( ) ?;
37+ Ok ( ( ) )
38+ }
39+
40+ pub fn draw_loading ( terminal : & mut TuiTerminal , msg : & str ) -> Result < ( ) > {
41+ terminal. draw ( |f| {
42+ use ratatui:: {
43+ style:: { Color , Style } ,
44+ widgets:: { Block , Borders , Paragraph , Clear } ,
45+ } ;
46+ let area = ui:: centered_rect ( 50 , 20 , f. area ( ) ) ;
47+ f. render_widget ( Clear , area) ;
48+ let block = Block :: default ( ) . title ( "Loading" ) . borders ( Borders :: ALL ) ;
49+ let paragraph = Paragraph :: new ( msg) . block ( block) . style ( Style :: default ( ) . fg ( Color :: Cyan ) ) ;
50+ f. render_widget ( paragraph, area) ;
51+ } ) ?;
52+ Ok ( ( ) )
53+ }
54+
55+ pub async fn run ( mut terminal : TuiTerminal , storage : Storage , master_key : String ) -> Result < ( ) > {
56+ // create app and run it
57+ let mut app = App :: new ( storage, master_key) . await ?;
58+ let res = run_app ( & mut terminal, & mut app) . await ;
59+
60+ // restore terminal
61+ restore_terminal ( terminal) ?;
3962
4063 if let Err ( err) = res {
4164 println ! ( "{:?}" , err) ;
0 commit comments