mirror of
https://github.com/YGGverse/Yoda.git
synced 2025-02-05 16:04:15 +00:00
fix lookup
query detection
This commit is contained in:
parent
0c8d1e47c9
commit
8d3c4319c6
@ -86,7 +86,7 @@ impl Client {
|
|||||||
Error::Unsupported => callback(Response::Failure(Failure::Error {
|
Error::Unsupported => callback(Response::Failure(Failure::Error {
|
||||||
message: "Request scheme yet not supported".to_string(),
|
message: "Request scheme yet not supported".to_string(),
|
||||||
})),
|
})),
|
||||||
// try async resolver
|
// try async resolver (slow method)
|
||||||
_ => Request::lookup(query, Some(&cancellable), |result| {
|
_ => Request::lookup(query, Some(&cancellable), |result| {
|
||||||
callback(match result {
|
callback(match result {
|
||||||
// redirection with scheme auto-complete or default search provider
|
// redirection with scheme auto-complete or default search provider
|
||||||
|
@ -78,34 +78,36 @@ impl Request {
|
|||||||
prelude::{NetworkAddressExt, ResolverExt},
|
prelude::{NetworkAddressExt, ResolverExt},
|
||||||
};
|
};
|
||||||
|
|
||||||
const DEFAULT_SCHEME: &str = "gemini://";
|
const DEFAULT_SCHEME: &str = "gemini";
|
||||||
const DEFAULT_PORT: u16 = 1965;
|
const DEFAULT_PORT: u16 = 1965;
|
||||||
const TIMEOUT: u32 = 1000;
|
const TIMEOUT: u32 = 250; // ms
|
||||||
|
|
||||||
let request = match query.trim().strip_prefix(DEFAULT_SCHEME) {
|
let query = query.trim();
|
||||||
Some(postfix) => format!("{DEFAULT_SCHEME}{postfix}"),
|
|
||||||
None => query.to_string(),
|
match Uri::parse(query, UriFlags::NONE) {
|
||||||
};
|
Ok(uri) => callback(Self::from_uri(uri, None, None)),
|
||||||
|
Err(_) => {
|
||||||
|
// try default scheme suggestion
|
||||||
|
let suggestion = format!("{DEFAULT_SCHEME}://{query}");
|
||||||
|
|
||||||
let resolver = Resolver::default();
|
let resolver = Resolver::default();
|
||||||
resolver.set_timeout(TIMEOUT);
|
resolver.set_timeout(TIMEOUT);
|
||||||
|
|
||||||
match NetworkAddress::parse_uri(&request, DEFAULT_PORT) {
|
match NetworkAddress::parse_uri(&suggestion, DEFAULT_PORT) {
|
||||||
Ok(connectable) => resolver.lookup_by_name_async(
|
Ok(connectable) => resolver.lookup_by_name_async(
|
||||||
&connectable.hostname(),
|
&connectable.hostname(),
|
||||||
cancellable,
|
cancellable,
|
||||||
move |resolve| {
|
move |resolve| {
|
||||||
callback(if resolve.is_ok() {
|
callback(if resolve.is_ok() {
|
||||||
match Uri::parse(&request, UriFlags::NONE) {
|
Self::parse(&suggestion, None)
|
||||||
Ok(uri) => Self::from_uri(uri, None, None),
|
|
||||||
Err(e) => Err(Error::Glib(e)),
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Ok(Self::search(&request))
|
Ok(Self::search(&suggestion))
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Err(_) => callback(Ok(Self::search(&request))), // @TODO not completed yet, fix invalid URI issue
|
Err(_) => callback(Ok(Self::search(&suggestion))),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user