use log::info; use notmuch::ThreadSet; use seed::{prelude::*, 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, ) -> fetch::Result { Request::new(search(query, page, results_per_page)) .method(Method::Get) .fetch() .await? .check_status()? .json() .await } pub async fn refresh_request() -> fetch::Result<()> { let t = Request::new(refresh()) .method(Method::Get) .fetch() .await? .check_status()? .text() .await?; info!("refresh {t}"); Ok(()) } pub async fn show_pretty_request(tid: &str) -> fetch::Result { Request::new(show_pretty(tid)) .method(Method::Get) .fetch() .await? .check_status()? .json() .await }