diff --git a/src/app/browser/window/tab/item/page/client/driver.rs b/src/app/browser/window/tab/item/page/client/driver.rs index 93418ad9..15844a8c 100644 --- a/src/app/browser/window/tab/item/page/client/driver.rs +++ b/src/app/browser/window/tab/item/page/client/driver.rs @@ -77,8 +77,12 @@ impl Driver { ) { match feature { Feature::Download { request } => match request { - Request::Gemini { uri } => { - gemini::request_async(self, uri.clone(), cancellable.clone(), move |result| { + Request::Gemini { uri } => gemini::request_async( + &self.profile, + &self.gemini, + uri.clone(), + cancellable.clone(), + move |result| { callback(match result { Ok(response) => Response::Download { base: uri.clone(), @@ -89,15 +93,19 @@ impl Driver { message: e.to_string(), }), }) - }) - } + }, + ), _ => callback(Response::Failure(Failure::Error { message: "Download feature yet not supported for this request".to_string(), })), // @TODO or maybe panic as unexpected }, Feature::Default { request } => match request { - Request::Gemini { uri } => { - gemini::request_async(self, uri.clone(), cancellable.clone(), move |result| { + Request::Gemini { uri } => gemini::request_async( + &self.profile, + &self.gemini, + uri.clone(), + cancellable.clone(), + move |result| { gemini::handle( result, uri.clone(), @@ -105,14 +113,18 @@ impl Driver { false, callback.clone(), ) - }) - } + }, + ), Request::Titan { .. } => todo!(), Request::Undefined => todo!(), }, Feature::Source { request } => match request { - Request::Gemini { uri } => { - gemini::request_async(self, uri.clone(), cancellable.clone(), move |result| { + Request::Gemini { uri } => gemini::request_async( + &self.profile, + &self.gemini, + uri.clone(), + cancellable.clone(), + move |result| { gemini::handle( result, uri.clone(), @@ -120,8 +132,8 @@ impl Driver { true, callback.clone(), ) - }) - } + }, + ), _ => callback(Response::Failure(Failure::Error { message: "Source view feature yet not supported for this request".to_string(), })), // @TODO or maybe panic as unexpected diff --git a/src/app/browser/window/tab/item/page/client/driver/gemini.rs b/src/app/browser/window/tab/item/page/client/driver/gemini.rs index cfb0858e..e3a356fd 100644 --- a/src/app/browser/window/tab/item/page/client/driver/gemini.rs +++ b/src/app/browser/window/tab/item/page/client/driver/gemini.rs @@ -1,6 +1,6 @@ use super::{ response::{Certificate, Failure, Input}, - Driver, Response, + Profile, Response, }; use gtk::{ gio::Cancellable, @@ -10,18 +10,20 @@ use std::rc::Rc; /// Shared request interface for Gemini protocol pub fn request_async( - driver: &Driver, + profile: &Rc, + client: &Rc, uri: Uri, cancellable: Cancellable, callback: impl Fn(Result) + 'static, ) { - driver.gemini.request_async( - ggemini::client::Request::gemini(uri.clone()), + let request = uri.to_string(); + client.request_async( + ggemini::client::Request::gemini(uri), Priority::DEFAULT, - cancellable.clone(), + cancellable, // Search for user certificate match request // * @TODO this feature does not support multi-protocol yet - match driver.profile.identity.gemini.match_scope(&uri.to_string()) { + match profile.identity.gemini.match_scope(&request) { Some(identity) => match identity.to_tls_certificate() { Ok(certificate) => Some(certificate), Err(_) => todo!(),