mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-02 09:35:28 +00:00
handle undefined scheme route
This commit is contained in:
parent
5570b6fa85
commit
130f66deff
1 changed files with 22 additions and 19 deletions
|
|
@ -9,7 +9,7 @@ use feature::Feature;
|
||||||
use gtk::{
|
use gtk::{
|
||||||
gio::Cancellable,
|
gio::Cancellable,
|
||||||
glib::{Uri, UriFlags},
|
glib::{Uri, UriFlags},
|
||||||
prelude::CancellableExt,
|
prelude::{CancellableExt, EntryExt},
|
||||||
};
|
};
|
||||||
use std::{cell::Cell, rc::Rc};
|
use std::{cell::Cell, rc::Rc};
|
||||||
use subject::Subject;
|
use subject::Subject;
|
||||||
|
|
@ -30,6 +30,7 @@ impl Client {
|
||||||
page: page.clone(),
|
page: page.clone(),
|
||||||
tab_page: tab_page.clone(),
|
tab_page: tab_page.clone(),
|
||||||
});
|
});
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
cancellable: Cell::new(Cancellable::new()),
|
cancellable: Cell::new(Cancellable::new()),
|
||||||
driver: Rc::new(Driver::build(&subject)),
|
driver: Rc::new(Driver::build(&subject)),
|
||||||
|
|
@ -45,8 +46,26 @@ impl Client {
|
||||||
// run async resolver to detect Uri, scheme-less host, or search query
|
// run async resolver to detect Uri, scheme-less host, or search query
|
||||||
lookup(request, self.cancellable(), {
|
lookup(request, self.cancellable(), {
|
||||||
let driver = self.driver.clone();
|
let driver = self.driver.clone();
|
||||||
move |feature, cancellable, uri| {
|
let subject = self.subject.clone();
|
||||||
route(driver, feature, cancellable, uri, is_snap_history)
|
// route by scheme parsed
|
||||||
|
move |feature, cancellable, uri| match uri.scheme().as_str() {
|
||||||
|
"gemini" => driver
|
||||||
|
.gemini
|
||||||
|
.handle(uri, feature, cancellable, is_snap_history),
|
||||||
|
scheme => {
|
||||||
|
// no scheme match driver, complete with failure message
|
||||||
|
let status = subject.page.content.to_status_failure();
|
||||||
|
status.set_description(Some(&format!("Scheme `{scheme}` yet not supported")));
|
||||||
|
subject.page.title.replace(status.title());
|
||||||
|
subject
|
||||||
|
.page
|
||||||
|
.navigation
|
||||||
|
.request
|
||||||
|
.widget
|
||||||
|
.entry
|
||||||
|
.set_progress_fraction(0.0);
|
||||||
|
subject.tab_page.set_loading(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -120,22 +139,6 @@ fn lookup(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Route request (resolved by `lookup` function)
|
|
||||||
fn route(
|
|
||||||
driver: Rc<Driver>,
|
|
||||||
feature: Feature,
|
|
||||||
cancellable: Cancellable,
|
|
||||||
uri: Uri,
|
|
||||||
is_snap_history: bool,
|
|
||||||
) {
|
|
||||||
match uri.scheme().as_str() {
|
|
||||||
"gemini" => driver
|
|
||||||
.gemini
|
|
||||||
.handle(uri, feature, cancellable, is_snap_history),
|
|
||||||
_ => todo!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Convert `query` to default search provider [Uri](https://docs.gtk.org/glib/struct.Uri.html)
|
/// Convert `query` to default search provider [Uri](https://docs.gtk.org/glib/struct.Uri.html)
|
||||||
fn search(query: &str) -> Uri {
|
fn search(query: &str) -> Uri {
|
||||||
Uri::build(
|
Uri::build(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue