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 {
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

View File

@ -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<Profile>,
client: &Rc<ggemini::Client>,
uri: Uri,
cancellable: Cancellable,
callback: impl Fn(Result<ggemini::client::Response, ggemini::client::Error>) + '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!(),