use gloo_net::{http::Request, Error}; use log::info; use notmuch::ThreadSet; use seed::Url; const BASE_URL: &str = "/api"; pub fn refresh() -> String { format!("{BASE_URL}/refresh") } pub fn search(query: &str, page: usize, results_per_page: usize) -> String { let query = Url::encode_uri_component(query); format!("{BASE_URL}/search/{query}?page={page}&results_per_page={results_per_page}") } pub fn show_pretty(tid: &str) -> String { format!("{BASE_URL}/show/{tid}/pretty") } pub fn original(message_id: &str) -> String { format!("{BASE_URL}/original/{message_id}") } pub mod urls { use seed::Url; pub fn search(query: &str, page: usize) -> Url { let query = Url::encode_uri_component(query); if page > 0 { Url::new().set_hash_path(["s", &query, &format!("p{page}")]) } else { Url::new().set_hash_path(["s", &query]) } } pub fn thread(tid: &str) -> Url { Url::new().set_hash_path(["t", tid]) } } pub async fn search_request( query: &str, page: usize, results_per_page: usize, ) -> Result { Request::get(&search(query, page, results_per_page)) .send() .await? .json() .await } pub async fn refresh_request() -> Result<(), Error> { let t = Request::get(&refresh()).send().await?.text().await?; info!("refresh {t}"); Ok(()) } pub async fn show_pretty_request(tid: &str) -> Result { Request::get(&show_pretty(tid)).send().await?.json().await }