[reader] insert new item directly in reader

This commit is contained in:
zhang_ji 2016-06-27 14:29:28 +08:00
parent 4e6fc1a8c3
commit cd048bd95a
2 changed files with 11 additions and 13 deletions

View file

@ -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 => {

View file

@ -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<Event>>, // eventbox
tx: Sender<Item>, // sender to send the string read from command output
items: Arc<RwLock<Vec<Item>>>, // all items
}
impl Reader {
pub fn new(cmd: Option<&'static str>, eb: Arc<EventBox<Event>>, tx: Sender<Item>) -> Self {
Reader{cmd: cmd, eb: eb, tx: tx}
pub fn new(cmd: Option<&'static str>, eb: Arc<EventBox<Event>>, items: Arc<RwLock<Vec<Item>>>) -> 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; }
}