delegate to driver implementation required references only

This commit is contained in:
yggverse 2025-01-17 04:38:47 +02:00
parent 1d8b3b27b3
commit dabff4f4cb
2 changed files with 32 additions and 18 deletions

View File

@ -77,8 +77,12 @@ impl Driver {
) { ) {
match feature { match feature {
Feature::Download { request } => match request { Feature::Download { request } => match request {
Request::Gemini { uri } => { Request::Gemini { uri } => gemini::request_async(
gemini::request_async(self, uri.clone(), cancellable.clone(), move |result| { &self.profile,
&self.gemini,
uri.clone(),
cancellable.clone(),
move |result| {
callback(match result { callback(match result {
Ok(response) => Response::Download { Ok(response) => Response::Download {
base: uri.clone(), base: uri.clone(),
@ -89,15 +93,19 @@ impl Driver {
message: e.to_string(), message: e.to_string(),
}), }),
}) })
}) },
} ),
_ => callback(Response::Failure(Failure::Error { _ => callback(Response::Failure(Failure::Error {
message: "Download feature yet not supported for this request".to_string(), message: "Download feature yet not supported for this request".to_string(),
})), // @TODO or maybe panic as unexpected })), // @TODO or maybe panic as unexpected
}, },
Feature::Default { request } => match request { Feature::Default { request } => match request {
Request::Gemini { uri } => { Request::Gemini { uri } => gemini::request_async(
gemini::request_async(self, uri.clone(), cancellable.clone(), move |result| { &self.profile,
&self.gemini,
uri.clone(),
cancellable.clone(),
move |result| {
gemini::handle( gemini::handle(
result, result,
uri.clone(), uri.clone(),
@ -105,14 +113,18 @@ impl Driver {
false, false,
callback.clone(), callback.clone(),
) )
}) },
} ),
Request::Titan { .. } => todo!(), Request::Titan { .. } => todo!(),
Request::Undefined => todo!(), Request::Undefined => todo!(),
}, },
Feature::Source { request } => match request { Feature::Source { request } => match request {
Request::Gemini { uri } => { Request::Gemini { uri } => gemini::request_async(
gemini::request_async(self, uri.clone(), cancellable.clone(), move |result| { &self.profile,
&self.gemini,
uri.clone(),
cancellable.clone(),
move |result| {
gemini::handle( gemini::handle(
result, result,
uri.clone(), uri.clone(),
@ -120,8 +132,8 @@ impl Driver {
true, true,
callback.clone(), callback.clone(),
) )
}) },
} ),
_ => callback(Response::Failure(Failure::Error { _ => callback(Response::Failure(Failure::Error {
message: "Source view feature yet not supported for this request".to_string(), message: "Source view feature yet not supported for this request".to_string(),
})), // @TODO or maybe panic as unexpected })), // @TODO or maybe panic as unexpected

View File

@ -1,6 +1,6 @@
use super::{ use super::{
response::{Certificate, Failure, Input}, response::{Certificate, Failure, Input},
Driver, Response, Profile, Response,
}; };
use gtk::{ use gtk::{
gio::Cancellable, gio::Cancellable,
@ -10,18 +10,20 @@ use std::rc::Rc;
/// Shared request interface for Gemini protocol /// Shared request interface for Gemini protocol
pub fn request_async( pub fn request_async(
driver: &Driver, profile: &Rc<Profile>,
client: &Rc<ggemini::Client>,
uri: Uri, uri: Uri,
cancellable: Cancellable, cancellable: Cancellable,
callback: impl Fn(Result<ggemini::client::Response, ggemini::client::Error>) + 'static, callback: impl Fn(Result<ggemini::client::Response, ggemini::client::Error>) + 'static,
) { ) {
driver.gemini.request_async( let request = uri.to_string();
ggemini::client::Request::gemini(uri.clone()), client.request_async(
ggemini::client::Request::gemini(uri),
Priority::DEFAULT, Priority::DEFAULT,
cancellable.clone(), cancellable,
// Search for user certificate match request // Search for user certificate match request
// * @TODO this feature does not support multi-protocol yet // * @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() { Some(identity) => match identity.to_tls_certificate() {
Ok(certificate) => Some(certificate), Ok(certificate) => Some(certificate),
Err(_) => todo!(), Err(_) => todo!(),