aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs32
1 files changed, 19 insertions, 13 deletions
diff --git a/src/main.rs b/src/main.rs
index 85d25e7..25e6e32 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -6,7 +6,9 @@ extern crate serde_json;
6extern crate lazy_static; 6extern crate lazy_static;
7 7
8use cursive::traits::*; 8use cursive::traits::*;
9use cursive::views::{Dialog, DummyView, EditView, LinearLayout, OnEventView, SelectView, TextView}; 9use cursive::views::{
10 Dialog, DummyView, EditView, LinearLayout, OnEventView, SelectView, TextView,
11};
10use cursive::Cursive; 12use cursive::Cursive;
11 13
12use serde_json::Value; 14use serde_json::Value;
@@ -28,8 +30,6 @@ lazy_static! {
28} 30}
29 31
30fn main() { 32fn main() {
31 parse_arguments();
32
33 // Initial setup 33 // Initial setup
34 let mut main = Cursive::default(); 34 let mut main = Cursive::default();
35 35
@@ -39,6 +39,12 @@ fn main() {
39 main.add_global_callback('q', |s| s.quit()); 39 main.add_global_callback('q', |s| s.quit());
40 main.add_global_callback('s', |s| search(s)); 40 main.add_global_callback('s', |s| search(s));
41 41
42 main.add_layer(TextView::new(
43 "Hit s to search
44Hit q to quit
45Hit t to pop layer",
46 ));
47
42 main.run(); 48 main.run();
43} 49}
44 50
@@ -66,7 +72,10 @@ fn parse_arguments() -> Configuration {
66 std::process::exit(0); 72 std::process::exit(0);
67 } 73 }
68 74
69 let lang = matches.value_of("lang").unwrap_or("en").to_string(); 75 let lang = matches
76 .value_of("lang")
77 .or(option_env!("LANG").map(|s| s.split_at(2).0))
78 .unwrap_or("en");
70 let wiki_url = matches 79 let wiki_url = matches
71 .value_of("URL") 80 .value_of("URL")
72 .unwrap_or(&format!("https://{}.wikipedia.org", lang)) 81 .unwrap_or(&format!("https://{}.wikipedia.org", lang))
@@ -104,7 +113,8 @@ fn search(s: &mut Cursive) {
104 Dialog::around(EditView::new().on_submit(go).with_id("search")) 113 Dialog::around(EditView::new().on_submit(go).with_id("search"))
105 .title("Search for a page") 114 .title("Search for a page")
106 .button("Go", |s| { 115 .button("Go", |s| {
107 let search_txt = s.call_on_id("search", |v: &mut EditView| v.get_content()) 116 let search_txt = s
117 .call_on_id("search", |v: &mut EditView| v.get_content())
108 .unwrap(); 118 .unwrap();
109 go(s, &search_txt); 119 go(s, &search_txt);
110 }) 120 })
@@ -117,16 +127,12 @@ fn search(s: &mut Cursive) {
117 127
118fn on_submit(s: &mut Cursive, name: &str) { 128fn on_submit(s: &mut Cursive, name: &str) {
119 // get article data 129 // get article data
120 let heading: String = name.to_string(); 130 let url = query_url_gen(name);
121 let url = query_url_gen(&name.replace(" ", "_"));
122 let mut extract = String::new(); 131 let mut extract = String::new();
123 let mut link_vec: Vec<String> = vec![]; 132 let mut link_vec: Vec<String> = vec![];
124 133
125 let mut res = reqwest::get(&url).unwrap(); 134 let mut res = reqwest::get(url).unwrap();
126 let v: Value = match serde_json::from_str(&res.text().unwrap()) { 135 let v: Value = res.json().expect("Failed to parse json");
127 Ok(x) => x,
128 Err(x) => panic!("Failed to parse json\nReceived error {}", x),
129 };
130 136
131 match get_extract(&v) { 137 match get_extract(&v) {
132 Ok(x) => extract = x, 138 Ok(x) => extract = x,
@@ -156,6 +162,6 @@ fn on_submit(s: &mut Cursive, name: &str) {
156 ).on_event('t', |s| match s.pop_layer() { 162 ).on_event('t', |s| match s.pop_layer() {
157 _ => (), 163 _ => (),
158 }), 164 }),
159 ).title(heading), 165 ).title(name),
160 ); 166 );
161} 167}