mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-03-13 06:01:21 +00:00
try autocomplete scheme if the request match local filename
This commit is contained in:
parent
9fe6713bc8
commit
be9e55a4cf
@ -129,7 +129,7 @@ impl Window {
|
||||
action.open.on_activate({
|
||||
let tab = tab.clone();
|
||||
move |position, request| {
|
||||
tab.open(position, &request, true);
|
||||
tab.open(position, request, true);
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -54,7 +54,7 @@ impl Open {
|
||||
// Actions
|
||||
|
||||
/// Formatted action connector for external implementation
|
||||
pub fn on_activate(&self, callback: impl Fn(Option<i32>, String) + 'static) -> SignalHandlerId {
|
||||
pub fn on_activate(&self, callback: impl Fn(Option<i32>, &str) + 'static) -> SignalHandlerId {
|
||||
use gtk::{prelude::FileExt, FileDialog, Window};
|
||||
use std::rc::Rc;
|
||||
|
||||
@ -80,7 +80,7 @@ impl Open {
|
||||
} else {
|
||||
Some(state)
|
||||
},
|
||||
format!("file://{}", file.path().unwrap().to_str().unwrap()),
|
||||
file.path().unwrap().to_str().unwrap(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -57,34 +57,42 @@ impl Client {
|
||||
snap_history(&self.page, None);
|
||||
}
|
||||
|
||||
// run async resolver to detect Uri, scheme-less host, or search query
|
||||
lookup(&self.profile, request, self.cancellable(), {
|
||||
let driver = self.driver.clone();
|
||||
let page = self.page.clone();
|
||||
move |feature, cancellable, result| {
|
||||
match result {
|
||||
// route by scheme
|
||||
Ok(uri) => match uri.scheme().as_str() {
|
||||
"file" => driver.file.handle(uri, feature, cancellable),
|
||||
"gemini" | "titan" => driver.gemini.handle(uri, feature, cancellable),
|
||||
scheme => {
|
||||
// no scheme match driver, complete with failure message
|
||||
let status = page.content.to_status_failure();
|
||||
status.set_description(Some(&format!(
|
||||
"Scheme `{scheme}` yet not supported"
|
||||
)));
|
||||
page.set_title(&status.title());
|
||||
page.set_progress(0.0);
|
||||
}
|
||||
},
|
||||
// begin redirection to new address suggested
|
||||
Err(uri) => page
|
||||
.item_action
|
||||
.load
|
||||
.activate(Some(&uri.to_string()), false),
|
||||
// try autocomplete scheme if the request match local filename
|
||||
if std::path::Path::new(&request).exists() {
|
||||
self.page
|
||||
.item_action
|
||||
.load
|
||||
.activate(Some(&format!("file://{request}")), is_snap_history)
|
||||
} else {
|
||||
// run async resolver to detect Uri, scheme-less host, or search query
|
||||
lookup(&self.profile, request, self.cancellable(), {
|
||||
let driver = self.driver.clone();
|
||||
let page = self.page.clone();
|
||||
move |feature, cancellable, result| {
|
||||
match result {
|
||||
// route by scheme
|
||||
Ok(uri) => match uri.scheme().as_str() {
|
||||
"file" => driver.file.handle(uri, feature, cancellable),
|
||||
"gemini" | "titan" => driver.gemini.handle(uri, feature, cancellable),
|
||||
scheme => {
|
||||
// no scheme match driver, complete with failure message
|
||||
let status = page.content.to_status_failure();
|
||||
status.set_description(Some(&format!(
|
||||
"Scheme `{scheme}` yet not supported"
|
||||
)));
|
||||
page.set_title(&status.title());
|
||||
page.set_progress(0.0);
|
||||
}
|
||||
},
|
||||
// begin redirection to new address suggested
|
||||
Err(uri) => page
|
||||
.item_action
|
||||
.load
|
||||
.activate(Some(&uri.to_string()), false),
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Get new [Cancellable](https://docs.gtk.org/gio/class.Cancellable.html) by cancel previous one
|
||||
|
Loading…
x
Reference in New Issue
Block a user