diff --git a/src/main.rs b/src/main.rs index 16bf853..be9b350 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,12 +25,17 @@ enum Action { None, Up, Down, + Open, Quit, } fn main() { - let response = phetch("phkt.io", 70, "/"); - let links = parse(&response); + phetch_and_print("phkt.io", "70", "/"); +} + +fn phetch_and_print(host: &str, port: &str, selector: &str) { + let response = phetch(host, port, selector); + let links = parse_links(&response); println!("{:?}", links); let mut cursor = Cursor { link: 0 }; loop { @@ -46,13 +51,37 @@ fn main() { cursor.link += 1; } } + Action::Open => { + if cursor.link > 0 && cursor.link - 1 < links.len() { + println!("OPEN: {:?}", links[cursor.link - 1]); + let link = &links[cursor.link - 1]; + phetch_and_print(link.host, link.port, link.selector); + } + } Action::Quit => return, _ => {} } } } -fn parse<'res>(response: &'res str) -> Vec { +fn phetch(host: &str, port: &str, selector: &str) -> String { + let mut out = String::new(); + TcpStream::connect(format!("{}:{}", host, port)) + .and_then(|mut stream| { + stream.write(format!("{}\r\n", selector).as_ref()); + Ok(stream) + }) + .and_then(|mut stream| { + stream.read_to_string(&mut out); + Ok(()) + }) + .map_err(|err| { + eprintln!("err: {}", err); + }); + out +} + +fn parse_links<'res>(response: &'res str) -> Vec { let mut links: Vec = Vec::new(); let mut start = true; let mut is_link = false; @@ -115,9 +144,7 @@ fn user_input() -> Action { match c.unwrap() { Key::Ctrl('c') | Key::Char('q') => return Action::Quit, - Key::Char('\n') => { - input.clear(); - } + Key::Char('\n') => return Action::Open, Key::Char(c) => input.push(c), Key::Alt(c) => print!("Alt-{}", c), Key::Up | Key::Ctrl('p') => return Action::Up, @@ -137,23 +164,6 @@ fn user_input() -> Action { Action::None } -fn phetch(host: &str, port: i8, selector: &str) -> String { - let mut out = String::new(); - TcpStream::connect(format!("{}:{}", host, port)) - .and_then(|mut stream| { - stream.write(format!("{}\r\n", selector).as_ref()); - Ok(stream) - }) - .and_then(|mut stream| { - stream.read_to_string(&mut out); - Ok(()) - }) - .map_err(|err| { - eprintln!("err: {}", err); - }); - out -} - fn render(buf: &str, cur: &Cursor) { // let clear = ""; let clear = "\x1B[2J\x1B[H"; @@ -232,7 +242,7 @@ fn draw(buf: &str, cur: &Cursor) -> String { } else { out.push(c); if c == '\n' { - start = true + start = true; } } }