@@ -3,7 +3,6 @@ use crate::nvim::BufferDirection;
33use crate :: Result ;
44use nvim_rs:: { Buffer , Window } ;
55use std:: path:: Path ;
6- use tap:: Pipe ;
76use tokio_stream:: StreamExt ;
87
98pub struct Logger < ' a > {
@@ -28,7 +27,7 @@ impl<'a> Logger<'a> {
2827 }
2928 }
3029
31- async fn clear ( & self ) -> Result < ( ) > {
30+ async fn clear_content ( & self ) -> Result < ( ) > {
3231 self . buf . set_lines ( 0 , -1 , false , vec ! [ ] ) . await ?;
3332 Ok ( ( ) )
3433 }
@@ -44,20 +43,7 @@ impl<'a> Logger<'a> {
4443 } )
4544 }
4645
47- async fn get_open_cmd ( & self , direction : Option < BufferDirection > ) -> String {
48- let direction =
49- BufferDirection :: get_window_direction ( self . nvim , direction, self . nvim . log_bufnr ) ;
50-
51- match direction. await {
52- Ok ( open_command) => open_command,
53- Err ( e) => {
54- tracing:: error!( "Unable to convert value to string {e}" ) ;
55- BufferDirection :: Horizontal . to_nvim_command ( self . nvim . log_bufnr )
56- }
57- }
58- }
59-
60- pub async fn log ( & mut self , msg : String , win : & Option < NvimWindow > ) -> Result < ( ) > {
46+ pub async fn log ( & mut self , msg : String ) -> Result < ( ) > {
6147 tracing:: debug!( "{msg}" ) ;
6248
6349 let mut c = self . get_line_count ( ) . await ?;
@@ -74,7 +60,7 @@ impl<'a> Logger<'a> {
7460
7561 self . current_line_count = Some ( c) ;
7662
77- if let Some ( win) = win {
63+ if let Some ( win) = self . win ( ) . await {
7864 win. set_cursor ( ( c, 0 ) ) . await ?;
7965 }
8066
@@ -87,23 +73,21 @@ impl<'a> Logger<'a> {
8773 args : & Vec < String > ,
8874 clear : bool ,
8975 open : bool ,
90- ) -> Result < ( bool , Option < Window < NvimConnection > > ) > {
76+ ) -> Result < bool > {
9177 let mut stream = crate :: xcode:: stream_build ( root, args) . await ?;
9278
9379 // TODO(nvim): close log buffer if it is open for new direction
9480 //
9581 // Currently the buffer direction will be ignored if the buffer is opened already
9682
9783 if clear {
98- self . clear ( ) . await ?;
84+ self . clear_content ( ) . await ?;
9985 }
10086
10187 // TODO(nvim): build log correct height
102- let win = if open {
103- Some ( self . open_win ( ) . await ?)
104- } else {
105- None
106- } ;
88+ if open {
89+ self . open_win ( ) . await ?;
90+ }
10791
10892 let mut success = false ;
10993
@@ -113,51 +97,54 @@ impl<'a> Logger<'a> {
11397 while let Some ( line) = stream. next ( ) . await {
11498 line. contains ( "Succeed" ) . then ( || success = true ) ;
11599
116- self . log ( line, & win ) . await ?;
100+ self . log ( line) . await ?;
117101 }
118102
119- self . set_status_end ( success, open ) . await ?;
103+ self . set_status_end ( success, true ) . await ?;
120104
121- Ok ( ( success, win ) )
105+ Ok ( success)
122106 }
123107
124108 pub async fn log_title ( & mut self ) -> Result < ( ) > {
125- self . log ( self . title . clone ( ) , & None ) . await ?;
109+ self . log ( self . title . clone ( ) ) . await ?;
126110 Ok ( ( ) )
127111 }
128112
129- async fn open_cmd ( & self ) -> String {
130- let open_cmd = match self . open_cmd . as_ref ( ) {
131- Some ( s) => s. clone ( ) ,
132- None => self . get_open_cmd ( None ) . await ,
133- } ;
134- open_cmd
135- }
136-
137- pub async fn open_win ( & self ) -> Result < Window < NvimConnection > > {
138- let ( mut window, windows) = ( None , self . nvim . list_wins ( ) . await ?) ;
139-
113+ /// Get window if it's available
114+ pub async fn win ( & self ) -> Option < NvimWindow > {
115+ let windows = self . nvim . list_wins ( ) . await . ok ( ) ?;
140116 for win in windows. into_iter ( ) {
141- let buf = win. get_buf ( ) . await ?;
142- if buf. get_number ( ) . await ? == self . nvim . log_bufnr {
143- window = win . into ( ) ;
117+ let buf = win. get_buf ( ) . await . ok ( ) ?;
118+ if buf. get_number ( ) . await . ok ( ) ? == self . nvim . log_bufnr {
119+ return Some ( win ) ;
144120 }
145121 }
122+ None
123+ }
146124
147- if let Some ( win) = window {
148- win
149- } else {
150- let open_cmd = self . open_cmd ( ) . await ;
151- self . nvim . exec ( & open_cmd, false ) . await ?;
152- let win = self . nvim . get_current_win ( ) . await ?;
153- // NOTE: This doesn't work
154- win. set_option ( "number" , false . into ( ) ) . await ?;
155- win. set_option ( "relativenumber" , false . into ( ) ) . await ?;
156- // self.nvim.exec("setl nu nornu so=9", false).await?;
157- self . nvim . exec ( "wincmd w" , false ) . await ?;
158- win
125+ /// Open Window
126+ pub async fn open_win ( & self ) -> Result < Window < NvimConnection > > {
127+ if let Some ( win) = self . win ( ) . await {
128+ return Ok ( win) ;
159129 }
160- . pipe ( Ok )
130+
131+ tracing:: info!( "Openning a new window" ) ;
132+
133+ let open_cmd = match self . open_cmd . as_ref ( ) {
134+ Some ( s) => s. clone ( ) ,
135+ None => {
136+ BufferDirection :: get_window_direction ( self . nvim , None , self . nvim . log_bufnr ) . await ?
137+ }
138+ } ;
139+ self . nvim . exec ( & open_cmd, false ) . await ?;
140+ let win = self . nvim . get_current_win ( ) . await ?;
141+ // NOTE: This doesn't work
142+ win. set_option ( "number" , false . into ( ) ) . await ?;
143+ win. set_option ( "relativenumber" , false . into ( ) ) . await ?;
144+ // self.nvim.exec("setl nu nornu so=9", false).await?;
145+ self . nvim . exec ( "wincmd w" , false ) . await ?;
146+
147+ Ok ( win)
161148 }
162149
163150 pub async fn set_running ( & mut self ) -> Result < ( ) > {
@@ -168,6 +155,7 @@ impl<'a> Logger<'a> {
168155 }
169156
170157 pub async fn set_status_end ( & mut self , success : bool , open : bool ) -> Result < ( ) > {
158+ let win = self . win ( ) . await ;
171159 if success {
172160 self . nvim
173161 . exec ( "let g:xbase_watch_build_status='success'" , false )
@@ -176,16 +164,13 @@ impl<'a> Logger<'a> {
176164 self . nvim
177165 . exec ( "let g:xbase_watch_build_status='failure'" , false )
178166 . await ?;
179- if !open {
180- self . nvim . exec ( & self . open_cmd ( ) . await , false ) . await ?;
181- self . nvim
182- . get_current_win ( )
183- . await ?
184- . set_cursor ( ( self . get_line_count ( ) . await ?, 0 ) )
185- . await ?;
186- self . nvim . exec ( "call feedkeys('zt')" , false ) . await ?;
187- }
188167 }
168+
169+ if open && win. is_none ( ) {
170+ self . open_win ( ) . await ?;
171+ self . nvim . exec ( "call feedkeys('zt')" , false ) . await ?;
172+ }
173+
189174 Ok ( ( ) )
190175 }
191176}
0 commit comments