diff options
Diffstat (limited to 'src/cmd/watch.rs')
-rw-r--r-- | src/cmd/watch.rs | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/cmd/watch.rs b/src/cmd/watch.rs index f4d4948..99819d8 100644 --- a/src/cmd/watch.rs +++ b/src/cmd/watch.rs @@ -224,6 +224,7 @@ struct WatchSession< key_reader: crate::key_reader::KeyReader, list_client: crate::client::Client<S>, + resizer: crate::resize::Resizer, state: State<S>, raw_screen: Option<crossterm::RawScreen>, needs_redraw: bool, @@ -245,6 +246,7 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static> key_reader: crate::key_reader::KeyReader::new(), list_client, + resizer: crate::resize::Resizer::new(), state: State::new(), raw_screen: None, needs_redraw: true, @@ -588,11 +590,25 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static> (), Error, >] = &[ + &Self::poll_resizer, &Self::poll_input, &Self::poll_list_client, &Self::poll_watch_client, ]; + fn poll_resizer(&mut self) -> crate::component_future::Poll<(), Error> { + match self.resizer.poll()? { + futures::Async::Ready(Some(size)) => { + self.resize(size)?; + Ok(crate::component_future::Async::DidWork) + } + futures::Async::Ready(None) => unreachable!(), + futures::Async::NotReady => { + Ok(crate::component_future::Async::NotReady) + } + } + } + fn poll_input(&mut self) -> crate::component_future::Poll<(), Error> { if self.raw_screen.is_none() { self.raw_screen = Some( @@ -633,13 +649,10 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static> match self.list_client.poll()? { futures::Async::Ready(Some(e)) => { match e { - crate::client::Event::Start(size) => { - self.resize(size)?; - } crate::client::Event::Disconnect => { self.reconnect(true)?; } - crate::client::Event::Connect() => { + crate::client::Event::Connect => { self.list_client.send_message( crate::protocol::Message::list_sessions(), ); @@ -647,9 +660,6 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static> crate::client::Event::ServerMessage(msg) => { self.list_server_message(msg)?; } - crate::client::Event::Resize(size) => { - self.resize(size)?; - } } Ok(crate::component_future::Async::DidWork) } @@ -675,21 +685,13 @@ impl<S: tokio::io::AsyncRead + tokio::io::AsyncWrite + Send + 'static> match client.poll()? { futures::Async::Ready(Some(e)) => { match e { - crate::client::Event::Start(_) => { - // watch clients don't respond to resize events - unreachable!(); - } crate::client::Event::Disconnect => { self.reconnect(true)?; } - crate::client::Event::Connect() => {} + crate::client::Event::Connect => {} crate::client::Event::ServerMessage(msg) => { self.watch_server_message(msg)?; } - crate::client::Event::Resize(_) => { - // watch clients don't respond to resize events - unreachable!(); - } } Ok(crate::component_future::Async::DidWork) } |