diff --git a/src/main.rs b/src/main.rs index 510e23b..7adc913 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use phetch::{ - args, gopher, + args, gopher, menu, ui::{Mode, UI}, }; use std::{env, process}; @@ -127,14 +127,9 @@ fn print_plain(url: &str, tls: bool, tor: bool) -> i32 { match gopher::fetch_url(url, tls, tor) { Ok((_, response)) => match typ { gopher::Type::Menu => { - // TODO use parse_line() - for line in response.trim_end_matches(".\r\n").lines() { - let line = line.trim_end_matches('\r'); - if let Some(desc) = line.splitn(2, '\t').nth(0) { - let desc = desc.trim(); - out.push_str(&desc[1..]); - out.push('\n'); - } + for line in menu::parse(url, response).lines { + out.push_str(&line.text); + out.push('\n'); } } gopher::Type::Text => println!("{}", response.trim_end_matches(".\r\n")), diff --git a/src/menu.rs b/src/menu.rs index 2ef8121..7479d1e 100644 --- a/src/menu.rs +++ b/src/menu.rs @@ -117,7 +117,7 @@ impl Menu { Menu { tls, tor, - ..Self::parse(url, response) + ..parse(url, response) } } @@ -758,47 +758,47 @@ impl Menu { _ => Action::Keypress(key), } } +} - /// Parse gopher response into a Menu object. - pub fn parse(url: &str, raw: String) -> Menu { - let mut lines = vec![]; - let mut links = vec![]; - let mut longest = 0; +/// Parse gopher response into a Menu object. +pub fn parse(url: &str, raw: String) -> Menu { + let mut lines = vec![]; + let mut links = vec![]; + let mut longest = 0; - for line in raw.split_terminator('\n') { - // Check for Gopher's weird "end of response" message. - if line == ".\r" || line == "." { - break; - } + for line in raw.split_terminator('\n') { + // Check for Gopher's weird "end of response" message. + if line == ".\r" || line == "." { + break; + } - if let Some(mut line) = parse_line(line) { - if line.text.len() > longest { - longest = line.text.len(); - } - if line.typ.is_link() { - line.link = links.len(); - links.push(lines.len()); - } - lines.push(line); + if let Some(mut line) = parse_line(line) { + if line.text.len() > longest { + longest = line.text.len(); + } + if line.typ.is_link() { + line.link = links.len(); + links.push(lines.len()); } + lines.push(line); } + } - Menu { - url: url.into(), - lines, - links, - longest, - raw, - input: String::new(), - link: 0, - mode: Default::default(), - scroll: 0, - searching: false, - size: (0, 0), - tls: false, - tor: false, - wide: false, - } + Menu { + url: url.into(), + lines, + links, + longest, + raw, + input: String::new(), + link: 0, + mode: Default::default(), + scroll: 0, + searching: false, + size: (0, 0), + tls: false, + tor: false, + wide: false, } } @@ -871,7 +871,7 @@ mod tests { macro_rules! parse { ($s:literal) => { - Menu::parse("test", $s.to_string()); + parse("test", $s.to_string()); }; }