mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-02-04 23:44:13 +00:00
return Uri
as Result
to handle redirect on error
This commit is contained in:
parent
130f66deff
commit
436899a248
@ -48,24 +48,33 @@ impl Client {
|
|||||||
let driver = self.driver.clone();
|
let driver = self.driver.clone();
|
||||||
let subject = self.subject.clone();
|
let subject = self.subject.clone();
|
||||||
// route by scheme parsed
|
// route by scheme parsed
|
||||||
move |feature, cancellable, uri| match uri.scheme().as_str() {
|
move |feature, cancellable, result| match result {
|
||||||
"gemini" => driver
|
Ok(uri) => match uri.scheme().as_str() {
|
||||||
.gemini
|
"gemini" => driver
|
||||||
.handle(uri, feature, cancellable, is_snap_history),
|
.gemini
|
||||||
scheme => {
|
.handle(uri, feature, cancellable, is_snap_history),
|
||||||
// no scheme match driver, complete with failure message
|
scheme => {
|
||||||
let status = subject.page.content.to_status_failure();
|
// no scheme match driver, complete with failure message
|
||||||
status.set_description(Some(&format!("Scheme `{scheme}` yet not supported")));
|
let status = subject.page.content.to_status_failure();
|
||||||
subject.page.title.replace(status.title());
|
status
|
||||||
subject
|
.set_description(Some(&format!("Scheme `{scheme}` yet not supported")));
|
||||||
.page
|
subject.page.title.replace(status.title());
|
||||||
.navigation
|
subject
|
||||||
.request
|
.page
|
||||||
.widget
|
.navigation
|
||||||
.entry
|
.request
|
||||||
.set_progress_fraction(0.0);
|
.widget
|
||||||
subject.tab_page.set_loading(false);
|
.entry
|
||||||
}
|
.set_progress_fraction(0.0);
|
||||||
|
subject.tab_page.set_loading(false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// begin redirection to new address suggested
|
||||||
|
Err(uri) => subject
|
||||||
|
.page
|
||||||
|
.tab_action
|
||||||
|
.load
|
||||||
|
.activate(Some(&uri.to_string()), false),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -87,12 +96,11 @@ impl Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Create request using async DNS resolver (slow method)
|
/// Create request using async DNS resolver (slow method)
|
||||||
/// * useful for scheme-less requests, before apply search redirect
|
/// * return suggestion [Uri](https://docs.gtk.org/glib/struct.Uri.html) on failure (to handle as redirect)
|
||||||
/// * the `query` should not contain `feature` prefix
|
|
||||||
fn lookup(
|
fn lookup(
|
||||||
query: &str,
|
query: &str,
|
||||||
cancellable: Cancellable,
|
cancellable: Cancellable,
|
||||||
callback: impl FnOnce(Feature, Cancellable, Uri) + 'static,
|
callback: impl FnOnce(Feature, Cancellable, Result<Uri, Uri>) + 'static,
|
||||||
) {
|
) {
|
||||||
use gtk::{
|
use gtk::{
|
||||||
gio::{NetworkAddress, Resolver},
|
gio::{NetworkAddress, Resolver},
|
||||||
@ -106,7 +114,7 @@ fn lookup(
|
|||||||
let (feature, query) = Feature::parse(query.trim());
|
let (feature, query) = Feature::parse(query.trim());
|
||||||
|
|
||||||
match Uri::parse(query, UriFlags::NONE) {
|
match Uri::parse(query, UriFlags::NONE) {
|
||||||
Ok(uri) => callback(feature, cancellable, uri),
|
Ok(uri) => callback(feature, cancellable, Ok(uri)),
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
// try default scheme suggestion
|
// try default scheme suggestion
|
||||||
let suggestion = format!("{DEFAULT_SCHEME}://{query}");
|
let suggestion = format!("{DEFAULT_SCHEME}://{query}");
|
||||||
@ -124,16 +132,16 @@ fn lookup(
|
|||||||
cancellable,
|
cancellable,
|
||||||
if resolve.is_ok() {
|
if resolve.is_ok() {
|
||||||
match Uri::parse(&suggestion, UriFlags::NONE) {
|
match Uri::parse(&suggestion, UriFlags::NONE) {
|
||||||
Ok(uri) => uri,
|
Ok(uri) => Err(uri),
|
||||||
Err(_) => search(&suggestion),
|
Err(_) => Err(search(&suggestion)),
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
search(&suggestion)
|
Err(search(&suggestion))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Err(_) => callback(feature, cancellable, search(&suggestion)),
|
Err(_) => callback(feature, cancellable, Err(search(&suggestion))),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user