mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-02 01:25:27 +00:00
reorganize trait methods
This commit is contained in:
parent
3f34b76053
commit
6945aaebc5
1 changed files with 39 additions and 54 deletions
|
|
@ -49,7 +49,7 @@ pub trait Request {
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
|
|
||||||
fn strip_prefix(&self) -> GString;
|
fn prefix_less(&self) -> GString;
|
||||||
fn download(&self) -> GString;
|
fn download(&self) -> GString;
|
||||||
fn source(&self) -> GString;
|
fn source(&self) -> GString;
|
||||||
fn uri(&self) -> Option<Uri>;
|
fn uri(&self) -> Option<Uri>;
|
||||||
|
|
@ -93,11 +93,7 @@ impl Request for Entry {
|
||||||
move |this| {
|
move |this| {
|
||||||
// Update actions
|
// Update actions
|
||||||
item_action.reload.set_enabled(!this.text().is_empty());
|
item_action.reload.set_enabled(!this.text().is_empty());
|
||||||
item_action
|
item_action.home.set_enabled(this.home().is_some());
|
||||||
.home
|
|
||||||
.set_enabled(uri(&this.text()).is_some_and(|uri| {
|
|
||||||
uri.path().len() > 1 || uri.query().is_some() || uri.fragment().is_some()
|
|
||||||
}));
|
|
||||||
|
|
||||||
// Update primary icon
|
// Update primary icon
|
||||||
this.update(&profile)
|
this.update(&profile)
|
||||||
|
|
@ -225,7 +221,7 @@ impl Request for Entry {
|
||||||
self.set_primary_icon_activatable(true);
|
self.set_primary_icon_activatable(true);
|
||||||
self.set_primary_icon_sensitive(true);
|
self.set_primary_icon_sensitive(true);
|
||||||
self.set_primary_icon_name(Some(name));
|
self.set_primary_icon_name(Some(name));
|
||||||
if profile.identity.get(&strip_prefix(self.text())).is_some() {
|
if profile.identity.get(&self.prefix_less()).is_some() {
|
||||||
self.first_child().unwrap().add_css_class("success"); // @TODO handle
|
self.first_child().unwrap().add_css_class("success"); // @TODO handle
|
||||||
self.set_primary_icon_tooltip_text(Some(tooltip.1));
|
self.set_primary_icon_tooltip_text(Some(tooltip.1));
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -257,29 +253,59 @@ impl Request for Entry {
|
||||||
|
|
||||||
/// Get current request value without system prefix
|
/// Get current request value without system prefix
|
||||||
/// * the `prefix` is not `scheme`
|
/// * the `prefix` is not `scheme`
|
||||||
fn strip_prefix(&self) -> GString {
|
fn prefix_less(&self) -> GString {
|
||||||
strip_prefix(self.text())
|
let mut request = self.text();
|
||||||
|
|
||||||
|
if let Some(postfix) = request.strip_prefix(PREFIX_SOURCE) {
|
||||||
|
request = postfix.into()
|
||||||
|
}
|
||||||
|
if let Some(postfix) = request.strip_prefix(PREFIX_DOWNLOAD) {
|
||||||
|
request = postfix.into()
|
||||||
|
}
|
||||||
|
request
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get request value with formatted `download` prefix
|
/// Get request value with formatted `download` prefix
|
||||||
fn download(&self) -> GString {
|
fn download(&self) -> GString {
|
||||||
gformat!("{PREFIX_DOWNLOAD}{}", self.strip_prefix())
|
gformat!("{PREFIX_DOWNLOAD}{}", self.prefix_less())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get request value with formatted `source` prefix
|
/// Get request value with formatted `source` prefix
|
||||||
fn source(&self) -> GString {
|
fn source(&self) -> GString {
|
||||||
gformat!("{PREFIX_SOURCE}{}", self.strip_prefix())
|
gformat!("{PREFIX_SOURCE}{}", self.prefix_less())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Try get current request value as [Uri](https://docs.gtk.org/glib/struct.Uri.html)
|
/// Try get current request value as [Uri](https://docs.gtk.org/glib/struct.Uri.html)
|
||||||
/// * `strip_prefix` on parse
|
/// * `strip_prefix` on parse
|
||||||
fn uri(&self) -> Option<Uri> {
|
fn uri(&self) -> Option<Uri> {
|
||||||
uri(&strip_prefix(self.text()))
|
match Uri::parse(&self.prefix_less(), UriFlags::NONE) {
|
||||||
|
Ok(uri) => Some(uri),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Try build home [Uri](https://docs.gtk.org/glib/struct.Uri.html) for `Self`
|
/// Try build home [Uri](https://docs.gtk.org/glib/struct.Uri.html) for `Self`
|
||||||
|
/// * return `None` if current request already match home or Uri not parsable
|
||||||
fn home(&self) -> Option<Uri> {
|
fn home(&self) -> Option<Uri> {
|
||||||
home(self.uri())
|
let uri = self.uri()?;
|
||||||
|
if uri.path().len() > 1 || uri.query().is_some() || uri.fragment().is_some() {
|
||||||
|
Some(Uri::build(
|
||||||
|
UriFlags::NONE,
|
||||||
|
&if uri.scheme() == "titan" {
|
||||||
|
GString::from("gemini")
|
||||||
|
} else {
|
||||||
|
uri.scheme()
|
||||||
|
},
|
||||||
|
uri.userinfo().as_deref(),
|
||||||
|
uri.host().as_deref(),
|
||||||
|
uri.port(),
|
||||||
|
"/",
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -297,44 +323,3 @@ pub fn migrate(tx: &Transaction) -> Result<(), String> {
|
||||||
// Success
|
// Success
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Strip system prefix from request string
|
|
||||||
/// * the `prefix` is not `scheme`
|
|
||||||
fn strip_prefix(mut request: GString) -> GString {
|
|
||||||
if let Some(postfix) = request.strip_prefix(PREFIX_SOURCE) {
|
|
||||||
request = postfix.into()
|
|
||||||
};
|
|
||||||
|
|
||||||
if let Some(postfix) = request.strip_prefix(PREFIX_DOWNLOAD) {
|
|
||||||
request = postfix.into()
|
|
||||||
};
|
|
||||||
|
|
||||||
request
|
|
||||||
} // @TODO move prefix features to page client
|
|
||||||
|
|
||||||
fn uri(value: &str) -> Option<Uri> {
|
|
||||||
match Uri::parse(value, UriFlags::NONE) {
|
|
||||||
Ok(uri) => Some(uri),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Parse home [Uri](https://docs.gtk.org/glib/struct.Uri.html) for `subject`
|
|
||||||
fn home(subject: Option<Uri>) -> Option<Uri> {
|
|
||||||
subject.map(|uri| {
|
|
||||||
Uri::build(
|
|
||||||
UriFlags::NONE,
|
|
||||||
&if uri.scheme() == "titan" {
|
|
||||||
GString::from("gemini")
|
|
||||||
} else {
|
|
||||||
uri.scheme()
|
|
||||||
},
|
|
||||||
uri.userinfo().as_deref(),
|
|
||||||
uri.host().as_deref(),
|
|
||||||
uri.port(),
|
|
||||||
"/",
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue