From 7f3c70998e6d4487a9d567c84aa2d0efac203fc7 Mon Sep 17 00:00:00 2001 From: Vika Date: Sun, 25 Aug 2024 20:25:33 +0300 Subject: Use a provided SoupSession for Micropub --- src/lib.rs | 10 +++++++--- src/micropub.rs | 12 +++++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 52a18ef..23b7be7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -44,7 +44,7 @@ pub struct App { } impl App { - async fn get_login_state(schema: &libsecret::Schema) -> Result, glib::Error> { + async fn get_login_state(schema: &libsecret::Schema, http: soup::Session) -> Result, glib::Error> { let mut retrievables = libsecret::password_search_future(Some(schema), { let mut attrs = std::collections::HashMap::default(); attrs.insert(crate::secrets::TOKEN_KIND, crate::secrets::ACCESS_TOKEN); @@ -92,6 +92,7 @@ impl App { }; let micropub = crate::micropub::Client::new( + http.clone(), micropub_uri, retrievable.retrieve_secret_future().await // SAFETY: see above @@ -202,11 +203,14 @@ impl AsyncComponent for App { sender: AsyncComponentSender, ) -> AsyncComponentParts { let secret_schema = crate::secrets::get_schema(); - let state = App::get_login_state(&secret_schema).await.unwrap(); let http = soup::Session::builder() .user_agent(concat!(env!("CARGO_PKG_NAME"),"/",env!("CARGO_PKG_VERSION")," ")) .build(); + let state = App::get_login_state( + &secret_schema, http.clone() + ).await.unwrap(); + let model = App { submit_busy_guard: None, @@ -284,7 +288,7 @@ impl AsyncComponent for App { } self.micropub = Some(crate::micropub::Client::new( - data.micropub.clone(), data.access_token.clone() + self.http.clone(), data.micropub.clone(), data.access_token.clone() )); }, Input::SubmitButtonPressed => { diff --git a/src/micropub.rs b/src/micropub.rs index e855459..dbd8f9a 100644 --- a/src/micropub.rs +++ b/src/micropub.rs @@ -6,7 +6,7 @@ pub struct Client { micropub: String, access_token: String, - //http: soup::Session, + http: soup::Session, } #[derive(Debug, thiserror::Error)] @@ -22,12 +22,12 @@ pub enum Error { } impl Client { - pub fn new(uri: glib::Uri, token: String) -> Self { + pub fn new(http: soup::Session, uri: glib::Uri, token: String) -> Self { Self { micropub: uri.to_string(), access_token: token, - //http: soup::Session::new() + http, } } @@ -42,8 +42,7 @@ impl Client { // TODO: create a SoupAuth subclass that allows pasting in a token headers.append("Authorization", &format!("Bearer {}", self.access_token)); - let http = soup::Session::new(); - let body = http.send_and_read_future(&exch, glib::Priority::DEFAULT).await?; + let body = self.http.send_and_read_future(&exch, glib::Priority::DEFAULT).await?; Ok(serde_json::from_slice(&body)?) } @@ -58,8 +57,7 @@ impl Client { Some(&glib::Bytes::from_owned(serde_json::to_vec(&post).unwrap())) ); - let http = soup::Session::new(); - let body = http.send_and_read_future(&exch, glib::Priority::DEFAULT).await?; + let body = self.http.send_and_read_future(&exch, glib::Priority::DEFAULT).await?; match exch.status() { soup::Status::Created | soup::Status::Accepted => { -- cgit 1.4.1