diff --git a/Cargo.lock b/Cargo.lock index c36bd86..c44b33c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -477,17 +477,6 @@ dependencies = [ "time 0.1.45", ] -[[package]] -name = "cookie" -version = "0.16.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" -dependencies = [ - "percent-encoding 2.3.1", - "time 0.3.30", - "version_check 0.9.4", -] - [[package]] name = "cookie" version = "0.18.0" @@ -633,15 +622,6 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" -[[package]] -name = "dbg" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4677188513e0e9d7adced5997cf9a1e7a3c996c994f90093325c5332c1a8b221" -dependencies = [ - "version_check 0.1.5", -] - [[package]] name = "deranged" version = "0.3.10" @@ -1092,6 +1072,27 @@ dependencies = [ "web-sys", ] +[[package]] +name = "gloo-net" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ac9e8288ae2c632fa9f8657ac70bfe38a1530f345282d7ba66a1f70b72b7dc4" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils 0.2.0", + "http", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + [[package]] name = "gloo-timers" version = "0.2.6" @@ -1117,6 +1118,19 @@ dependencies = [ "web-sys", ] +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "graphql-introspection-query" version = "0.2.0" @@ -1563,11 +1577,12 @@ dependencies = [ "chrono", "console_error_panic_hook", "console_log", + "gloo-net", "graphql_client", "itertools", "log 0.4.20", "notmuch", - "seed 0.9.2", + "seed 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)", "seed_hooks", "serde", "serde_json", @@ -2112,6 +2127,26 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2 1.0.70", + "quote 1.0.33", + "syn 2.0.39", +] + [[package]] name = "pin-project-lite" version = "0.2.13" @@ -2614,24 +2649,21 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "seed" -version = "0.9.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9352d75dd253803ce05722fe3acaafffc461d4faeaf0ebe0d8bf831059482e21" +checksum = "9c0e296ea0569d20467e9a1df3cb6ed66ce3b791a7eaf1e1110ae231f75e2b46" dependencies = [ - "console_error_panic_hook", - "cookie 0.16.2", - "dbg", "enclose", "futures", "getrandom", "gloo-file", "gloo-timers", - "gloo-utils", + "gloo-utils 0.1.7", "indexmap 1.9.3", "js-sys", "rand", "serde", - "serde_json", + "serde-wasm-bindgen", "uuid", "version_check 0.9.4", "wasm-bindgen", @@ -2649,7 +2681,7 @@ dependencies = [ "getrandom", "gloo-file", "gloo-timers", - "gloo-utils", + "gloo-utils 0.1.7", "indexmap 1.9.3", "js-sys", "rand", @@ -2669,7 +2701,7 @@ dependencies = [ "derive_more", "gloo-timers", "lazy_static", - "seed 0.10.0", + "seed 0.10.0 (git+https://github.com/seed-rs/seed.git?branch=master)", "wasm-bindgen", "web-sys", ] @@ -2689,6 +2721,17 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde-wasm-bindgen" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + [[package]] name = "serde_derive" version = "1.0.193" @@ -3535,8 +3578,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" dependencies = [ "cfg-if 1.0.0", - "serde", - "serde_json", "wasm-bindgen-macro", ] diff --git a/web/Cargo.toml b/web/Cargo.toml index 303f551..8f6c4f3 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -18,7 +18,8 @@ wasm-bindgen-test = "0.3.33" [dependencies] console_error_panic_hook = "0.1.7" log = "0.4.17" -seed = "0.9.2" +seed = { version = "0.10.0", features = ["routing"] } +#seed = "0.9.2" console_log = {git = "http://git-private.h.xinu.tv/wathiede/console_log.git"} serde = { version = "1.0.147", features = ["derive"] } notmuch = {path = "../notmuch"} @@ -30,6 +31,7 @@ chrono = "0.4.31" graphql_client = "0.13.0" thiserror = "1.0.50" seed_hooks = { git = "https://github.com/seed-rs/styles_hooks", package = "seed_hooks", branch = "main" } +gloo-net = { version = "0.4.0", features = ["json", "serde_json"] } [package.metadata.wasm-pack.profile.release] diff --git a/web/src/api.rs b/web/src/api.rs index def0045..ffaddf5 100644 --- a/web/src/api.rs +++ b/web/src/api.rs @@ -1,6 +1,7 @@ +use gloo_net::{http::Request, Error}; use log::info; use notmuch::ThreadSet; -use seed::{prelude::*, Url}; +use seed::Url; const BASE_URL: &str = "/api"; pub fn refresh() -> String { @@ -35,34 +36,20 @@ 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() +) -> Result { + Request::get(&search(query, page, results_per_page)) + .send() .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?; +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) -> fetch::Result { - Request::new(show_pretty(tid)) - .method(Method::Get) - .fetch() - .await? - .check_status()? - .json() - .await +pub async fn show_pretty_request(tid: &str) -> Result { + Request::get(&show_pretty(tid)).send().await?.json().await } diff --git a/web/src/graphql.rs b/web/src/graphql.rs index 13d6ff9..e719986 100644 --- a/web/src/graphql.rs +++ b/web/src/graphql.rs @@ -1,8 +1,5 @@ +use gloo_net::{http::Request, Error}; use graphql_client::GraphQLQuery; -use seed::{ - fetch, - fetch::{Header, Method, Request}, -}; use serde::{de::DeserializeOwned, Serialize}; // The paths are relative to the directory where your `Cargo.toml` is located. @@ -23,21 +20,18 @@ pub struct FrontPageQuery; )] pub struct ShowThreadQuery; -pub async fn send_graphql(body: Body) -> fetch::Result> +pub async fn send_graphql(body: Body) -> Result, Error> where Body: Serialize, Resp: DeserializeOwned + 'static, { use web_sys::RequestMode; - Request::new("/graphql/") - .method(Method::Post) - .header(Header::content_type("application/json")) + Request::post("/graphql/") .mode(RequestMode::Cors) .json(&body)? - .fetch() + .send() .await? - .check_status()? .json() .await } diff --git a/web/src/lib.rs b/web/src/lib.rs index ff5ed38..24f8a4c 100644 --- a/web/src/lib.rs +++ b/web/src/lib.rs @@ -4,7 +4,7 @@ #![allow(clippy::wildcard_imports)] use log::Level; -use seed::prelude::*; +use seed::{prelude::wasm_bindgen, App}; mod api; mod consts; diff --git a/web/src/state.rs b/web/src/state.rs index 2be3972..14521d7 100644 --- a/web/src/state.rs +++ b/web/src/state.rs @@ -1,7 +1,7 @@ use graphql_client::GraphQLQuery; use log::{debug, error, info}; use notmuch::ThreadSet; -use seed::{prelude::*, *}; +use seed::{app::subs, prelude::*, *}; use thiserror::Error; use crate::{ @@ -321,7 +321,7 @@ pub enum UIError { #[error("No error, this should never be presented to user")] NoError, #[error("failed to fetch {0}: {1:?}")] - FetchError(&'static str, FetchError), + FetchError(&'static str, gloo_net::Error), #[error("{0} error decoding: {1:?}")] FetchDecodeError(&'static str, Vec), #[error("no data or errors for {0}")] @@ -363,15 +363,15 @@ pub enum Msg { OnResize, // Tell the server to update state RefreshStart, - RefreshDone(Option), + RefreshDone(Option), SearchRequest { query: String, page: usize, results_per_page: usize, }, - SearchResult(fetch::Result), + SearchResult(Result), ShowPrettyRequest(String), - ShowPrettyResult(fetch::Result), + ShowPrettyResult(Result), NextPage, PreviousPage, UpdateQuery(String), @@ -385,12 +385,12 @@ pub enum Msg { last: Option, }, FrontPageResult( - fetch::Result>, + Result, gloo_net::Error>, ), ShowThreadRequest { thread_id: String, }, ShowThreadResult( - fetch::Result>, + Result, gloo_net::Error>, ), } diff --git a/web/src/view/mod.rs b/web/src/view/mod.rs index acc69e3..e0673c2 100644 --- a/web/src/view/mod.rs +++ b/web/src/view/mod.rs @@ -5,7 +5,7 @@ use std::{ use chrono::{DateTime, Datelike, Duration, Local, Utc}; use itertools::Itertools; -use log::info; +use log::{error, info}; use seed::{prelude::*, *}; use wasm_timer::Instant;