aboutsummaryrefslogtreecommitdiffstats
path: root/src/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/play.rs10
-rw-r--r--src/cmd/record.rs36
2 files changed, 24 insertions, 22 deletions
diff --git a/src/cmd/play.rs b/src/cmd/play.rs
index 368e368..d73dcb4 100644
--- a/src/cmd/play.rs
+++ b/src/cmd/play.rs
@@ -50,7 +50,7 @@ enum FileState {
fut: tokio::fs::file::OpenFuture<String>,
},
Open {
- file: crate::ttyrec::File,
+ reader: crate::ttyrec::Reader<tokio::fs::File>,
},
Eof,
}
@@ -106,8 +106,8 @@ impl PlaySession {
filename: filename.to_string(),
}
}));
- let file = crate::ttyrec::File::new(file);
- self.file = FileState::Open { file };
+ let reader = crate::ttyrec::Reader::new(file);
+ self.file = FileState::Open { reader };
Ok(component_future::Async::DidWork)
}
_ => Ok(component_future::Async::NothingToDo),
@@ -115,9 +115,9 @@ impl PlaySession {
}
fn poll_read_file(&mut self) -> component_future::Poll<(), Error> {
- if let FileState::Open { file } = &mut self.file {
+ if let FileState::Open { reader } = &mut self.file {
if let Some(frame) =
- component_future::try_ready!(file.poll_read())
+ component_future::try_ready!(reader.poll_read())
{
self.to_write
.insert_at(frame.data, self.base_time + frame.time);
diff --git a/src/cmd/record.rs b/src/cmd/record.rs
index 6fda88f..46e76e1 100644
--- a/src/cmd/record.rs
+++ b/src/cmd/record.rs
@@ -62,7 +62,7 @@ enum FileState {
fut: tokio::fs::file::CreateFuture<String>,
},
Open {
- file: crate::ttyrec::File,
+ writer: crate::ttyrec::Writer<tokio::fs::File>,
},
}
@@ -141,9 +141,11 @@ impl RecordSession {
filename: filename.clone(),
}
}));
- let mut file = crate::ttyrec::File::new(file);
- file.write_frame(self.buffer.contents())?;
- self.file = FileState::Open { file };
+ let mut writer = crate::ttyrec::Writer::new(file);
+ if !self.buffer.contents().is_empty() {
+ writer.frame(self.buffer.contents())?;
+ }
+ self.file = FileState::Open { writer };
Ok(component_future::Async::DidWork)
}
FileState::Open { .. } => {
@@ -173,8 +175,8 @@ impl RecordSession {
}
tokio_pty_process_stream::Event::Output { data } => {
self.record_bytes(&data);
- if let FileState::Open { file } = &mut self.file {
- file.write_frame(&data)?;
+ if let FileState::Open { writer } = &mut self.file {
+ writer.frame(&data)?;
}
}
}
@@ -222,23 +224,23 @@ impl RecordSession {
}
fn poll_write_file(&mut self) -> component_future::Poll<(), Error> {
- let file = match &mut self.file {
- FileState::Open { file } => file,
+ let writer = match &mut self.file {
+ FileState::Open { writer } => writer,
_ => {
return Ok(component_future::Async::NothingToDo);
}
};
- match file.poll_write()? {
- futures::Async::Ready(()) => Ok(component_future::Async::DidWork),
- futures::Async::NotReady => {
- // ship all data to the server before actually ending
- if self.done && file.is_empty() {
- Ok(component_future::Async::Ready(()))
- } else {
- Ok(component_future::Async::NotReady)
- }
+ if writer.is_empty() {
+ // finish writing to the file before actually ending
+ if self.done {
+ Ok(component_future::Async::Ready(()))
+ } else {
+ Ok(component_future::Async::NothingToDo)
}
+ } else {
+ component_future::try_ready!(writer.poll_write());
+ Ok(component_future::Async::DidWork)
}
}
}