diff --git a/src/app/browser/window/tab/item/page/navigation.rs b/src/app/browser/window/tab/item/page/navigation.rs index 6278be2d..8a47fccb 100644 --- a/src/app/browser/window/tab/item/page/navigation.rs +++ b/src/app/browser/window/tab/item/page/navigation.rs @@ -17,7 +17,6 @@ use crate::app::browser::window::tab::item::Action as TabAction; use crate::app::browser::window::Action as WindowAction; use crate::app::browser::Action as BrowserAction; use crate::Profile; -use gtk::prelude::EditableExt; use sqlite::Transaction; use std::rc::Rc; @@ -36,14 +35,14 @@ impl Navigation { profile: Rc, action: (Rc, Rc, Rc), ) -> Self { - // Init components + // init children components let home = Rc::new(Home::new(action.1.clone())); let history = Rc::new(History::new(action.1.clone())); let reload = Rc::new(Reload::new(action.1.clone())); let request = Rc::new(Request::new((action.0, action.2))); let bookmark = Rc::new(Bookmark::new(action.1)); - // Init widget + // init main widget let widget = Rc::new(Widget::new( &home.widget.gobject, &history.widget.gobject, @@ -52,7 +51,7 @@ impl Navigation { &bookmark.widget.gobject, )); - // Done + // done Self { bookmark, history, @@ -67,13 +66,15 @@ impl Navigation { // Actions pub fn update(&self, progress_fraction: Option) { - let request_text = self.request.widget.entry.text(); + // init shared request value + let request = self.request.strip_prefix(); + // update children components self.bookmark - .update(self.profile.bookmark.get(&request_text).is_ok()); + .update(self.profile.bookmark.get(&request).is_ok()); self.history.update(); - self.home.update(&request_text); - self.reload.update(!request_text.is_empty()); + self.home.update(self.request.uri().as_ref()); + self.reload.update(!request.is_empty()); self.request.update( progress_fraction, self.profile @@ -81,7 +82,7 @@ impl Navigation { .gemini .auth .memory - .match_scope(&request_text) + .match_scope(&request) .is_some(), ); } diff --git a/src/app/browser/window/tab/item/page/navigation/home.rs b/src/app/browser/window/tab/item/page/navigation/home.rs index 52a4b720..9ada51c2 100644 --- a/src/app/browser/window/tab/item/page/navigation/home.rs +++ b/src/app/browser/window/tab/item/page/navigation/home.rs @@ -3,7 +3,7 @@ mod widget; use widget::Widget; use crate::app::browser::window::action::Action as WindowAction; -use gtk::glib::{gformat, GString, Uri, UriFlags}; +use gtk::glib::{gformat, GString, Uri}; use std::{cell::RefCell, rc::Rc}; pub struct Home { @@ -23,13 +23,13 @@ impl Home { } // Actions - pub fn update(&self, request: &str) { - let has_home = match Uri::parse(request, UriFlags::NONE) { - Ok(uri) => { + pub fn update(&self, request: Option<&Uri>) { + let has_home = match request { + Some(uri) => { self.uri.replace(Some(uri.clone())); uri.path().len() > 1 } - _ => { + None => { self.uri.replace(None); false } diff --git a/src/app/browser/window/tab/item/page/navigation/request.rs b/src/app/browser/window/tab/item/page/navigation/request.rs index 503a6935..694c3d6b 100644 --- a/src/app/browser/window/tab/item/page/navigation/request.rs +++ b/src/app/browser/window/tab/item/page/navigation/request.rs @@ -124,8 +124,9 @@ impl Request { // Getters /// Get current request value in [Uri](https://docs.gtk.org/glib/struct.Uri.html) format + /// * `strip_prefix` on parse pub fn uri(&self) -> Option { - match Uri::parse(&self.widget.entry.text(), UriFlags::NONE) { + match Uri::parse(&strip_prefix(self.widget.entry.text()), UriFlags::NONE) { Ok(uri) => Some(uri), _ => None, } @@ -134,17 +135,7 @@ impl Request { /// Get current request value without system prefix /// * the `prefix` is not `scheme` pub fn strip_prefix(&self) -> GString { - let mut text = self.widget.entry.text(); - - if let Some(postfix) = text.strip_prefix("source:") { - text = postfix.into() - }; - - if let Some(postfix) = text.strip_prefix("download:") { - text = postfix.into() - }; - - text + strip_prefix(self.widget.entry.text()) } /// Get request value in `download:` format @@ -188,6 +179,20 @@ impl Request { // Tools +/// Strip system prefix from request string +/// * the `prefix` is not `scheme` +pub fn strip_prefix(mut request: GString) -> GString { + if let Some(postfix) = request.strip_prefix("source:") { + request = postfix.into() + }; + + if let Some(postfix) = request.strip_prefix("download:") { + request = postfix.into() + }; + + request +} + pub fn migrate(tx: &Transaction) -> Result<(), String> { // Migrate self components if let Err(e) = database::init(tx) {