diff --git a/Cargo.lock b/Cargo.lock index 299944e..58aa83f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4140,7 +4140,9 @@ dependencies = [ "base64", "bytes", "encoding_rs", + "futures-channel", "futures-core", + "futures-util", "h2", "http", "http-body", diff --git a/Cargo.toml b/Cargo.toml index ec0c0ca..211b56d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] -reqwest = "0.13.3" +reqwest = { version = "0.13.3", features = ["blocking"] } serde = "1.0.228" serde_derive = "1.0.228" serde_json = "1.0.145" diff --git a/src/main.rs b/src/main.rs index e4f166b..adcc551 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ mod rutracker; use slint::{ModelRc, StandardListViewItem, VecModel}; +use std::cell::RefCell; use std::error::Error; use std::rc::Rc; @@ -9,23 +10,49 @@ slint::include_modules!(); fn main() -> Result<(), Box> { let ui = AppWindow::new()?; + let response = Rc::new(RefCell::new(None)); + let items = Rc::new(RefCell::new(Vec::::new())); - ui.on_request_text_input(|text| { + let value = items.clone(); + ui.on_request_text_input(move |text| { println!("User input: {}", text); - let _response = rutracker::search(&text); + *response.borrow_mut() = Some(rutracker::search(&text)); + //let response = rutracker::search(&text); + let response = response.borrow(); + + let new_items: Vec = response + .iter() + .map(|r| { + let text = match r { + Ok(value) => value.to_string(), + Err(err) => format!("Error: {}", err), + }; + StandardListViewItem::from(text.as_str()) + }) + .collect(); + + *value.borrow_mut() = new_items; }); let table_vec: Vec> = vec![]; let table_model = Rc::new(VecModel::from(table_vec)); - let test = "test"; ui.set_table_data(table_model.to_owned().into()); ui.on_add_row({ + //let response = response.clone(); + //move || { + // if let Some(_resp) = items.borrow().as_ref() { + // table_model.push(VecModel::from_slice(&[StandardListViewItem::from( + // //slint::SharedString::from(_resp), + // StandardListViewItem::from(_resp), + // )])); + // } + let items = items.clone(); move || { - table_model.push(VecModel::from_slice(&[ - StandardListViewItem::from(slint::SharedString::from(test)), - //StandardListViewItem::from(""), - ])); + let items = items.borrow(); + for item in items.iter() { + table_model.push(VecModel::from_slice(&[item.clone()])); + } } }); diff --git a/src/rutracker.rs b/src/rutracker.rs index 993da85..d41ee22 100644 --- a/src/rutracker.rs +++ b/src/rutracker.rs @@ -23,6 +23,6 @@ pub async fn search(value: &str) -> Result { serde_json::from_value(item.clone()).expect("Failed to deserialize"); println!("{:?}", software); } - println!("{:?}", data); + //println!("{:?}", data); Ok(v) }