diff --git a/src/main.rs b/src/main.rs index b13f9e8c..0a8c7457 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,18 +36,19 @@ fn main() { let mut model = Model::new(curse); let eb = Arc::new(EventBox::new()); - let (tx_source, rx_source) = channel(); let (tx_matched, rx_matched) = channel(); - let eb_clone_reader = eb.clone(); - let mut reader = Reader::new(Some(&"find ."), eb_clone_reader, tx_source); - let eb_matcher = Arc::new(EventBox::new()); let eb_matcher_clone = eb_matcher.clone(); let eb_clone_matcher = eb.clone(); let items = model.items.clone(); let mut matcher = Matcher::new(items, tx_matched, eb_matcher_clone, eb_clone_matcher); + let eb_clone_reader = eb.clone(); + let items = model.items.clone(); + let mut reader = Reader::new(Some(&"find ."), eb_clone_reader, items); + + let eb_clone_input = eb.clone(); let mut input = Input::new(eb_clone_input); @@ -87,10 +88,6 @@ fn main() { match e { Event::EvReaderNewItem | Event::EvReaderFinished => { eb_matcher.set(Event::EvMatcherNewItem, Box::new(true)); - let mut items = model.items.write().unwrap(); - while let Ok(string) = rx_source.try_recv() { - items.push(string); - } } Event::EvMatcherUpdateProcess => { diff --git a/src/reader.rs b/src/reader.rs index 685e4b79..8f852d83 100644 --- a/src/reader.rs +++ b/src/reader.rs @@ -4,7 +4,7 @@ extern crate libc; use std::process::{Command, Stdio}; -use std::sync::Arc; +use std::sync::{Arc, RwLock}; use std::io::{stdin, BufRead, BufReader}; use std::sync::mpsc::Sender; use std::error::Error; @@ -15,13 +15,13 @@ use item::Item; pub struct Reader { cmd: Option<&'static str>, // command to invoke eb: Arc>, // eventbox - tx: Sender, // sender to send the string read from command output + items: Arc>>, // all items } impl Reader { - pub fn new(cmd: Option<&'static str>, eb: Arc>, tx: Sender) -> Self { - Reader{cmd: cmd, eb: eb, tx: tx} + pub fn new(cmd: Option<&'static str>, eb: Arc>, items: Arc>>) -> Self { + Reader{cmd: cmd, eb: eb, items: items} } // invoke find comand. @@ -59,7 +59,8 @@ impl Reader { input.pop(); } } - let _ = self.tx.send(Item::new(input)); + let mut items = self.items.write().unwrap(); + items.push(Item::new(input)); } Err(_err) => { break; } }