summaryrefslogtreecommitdiff
path: root/src/status_cmd.rs
diff options
context:
space:
mode:
authorMax Verevkin <maxxverrr@gmail.com>2022-04-04 16:53:49 +0300
committerMax Verevkin <maxxverrr@gmail.com>2022-04-04 16:53:49 +0300
commitb759c7ec2ac5411f7dd254bb19a20c27a166e7e2 (patch)
tree750b9143ed9af2c8582a5200841e18ab0598e9c5 /src/status_cmd.rs
parent41b54360ff917a261d3f6f752e3c2c51edada773 (diff)
downloadi3bar-mango-b759c7ec2ac5411f7dd254bb19a20c27a166e7e2.tar.gz
dont use line buffering when using json protocol
Diffstat (limited to 'src/status_cmd.rs')
-rw-r--r--src/status_cmd.rs22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/status_cmd.rs b/src/status_cmd.rs
index 53c3873..e77e4b2 100644
--- a/src/status_cmd.rs
+++ b/src/status_cmd.rs
@@ -1,13 +1,12 @@
use crate::Surface;
use std::cell::RefCell;
use std::io::Result;
-use std::io::Write;
+use std::io::{BufRead, BufReader, Write};
use std::os::unix::prelude::{AsRawFd, RawFd};
-use std::process::{Child, ChildStdin, ChildStdout, Command, Stdio};
+use std::process::{ChildStdin, ChildStdout, Command, Stdio};
use std::rc::Rc;
use crate::i3bar_protocol::{Block, Event, Protocol};
-use crate::lines_buffer::LinesBuffer;
use crate::pointer_btn::PointerBtn;
#[derive(Clone)]
@@ -16,9 +15,7 @@ pub struct StatusCmd {
}
struct Inner {
- #[allow(dead_code)]
- child: Child,
- output: LinesBuffer<ChildStdout>,
+ output: BufReader<ChildStdout>,
input: ChildStdin,
protocol: Protocol,
blocks: Rc<RefCell<Vec<Block>>>,
@@ -27,16 +24,16 @@ struct Inner {
impl AsRawFd for StatusCmd {
fn as_raw_fd(&self) -> RawFd {
- self.inner.borrow().output.inner().as_raw_fd()
+ self.inner.borrow().output.get_ref().as_raw_fd()
}
}
impl Inner {
pub fn notify_available(&mut self) -> Result<()> {
- self.output.fill_buf()?;
- for line in &mut self.output {
- self.protocol.process_line(line)?;
- }
+ let buf = self.output.fill_buf()?;
+ self.protocol.process_new_bytes(buf)?;
+ let consumed = buf.len();
+ self.output.consume(consumed);
if let Some(new_blocks) = self.protocol.get_blocks() {
*self.blocks.borrow_mut() = new_blocks;
for s in &mut *self.surfaces.borrow_mut() {
@@ -58,11 +55,10 @@ impl StatusCmd {
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.spawn()?;
- let output = LinesBuffer::new(child.stdout.take().unwrap());
+ let output = BufReader::new(child.stdout.take().unwrap());
let input = child.stdin.take().unwrap();
Ok(Self {
inner: Rc::new(RefCell::new(Inner {
- child,
output,
input,
protocol: Protocol::Unknown,