From 560adff490eb5847db6f0969215ac7cf77a7aa8d Mon Sep 17 00:00:00 2001 From: yggverse Date: Thu, 27 Mar 2025 01:04:56 +0200 Subject: [PATCH] implement `Page::info::reset` method --- .../window/tab/item/client/driver/gemini.rs | 27 ++-------- .../tab/item/page/navigation/request/info.rs | 52 +++++++++++-------- 2 files changed, 35 insertions(+), 44 deletions(-) diff --git a/src/app/browser/window/tab/item/client/driver/gemini.rs b/src/app/browser/window/tab/item/client/driver/gemini.rs index 35f754f2..6d266275 100644 --- a/src/app/browser/window/tab/item/client/driver/gemini.rs +++ b/src/app/browser/window/tab/item/client/driver/gemini.rs @@ -39,7 +39,7 @@ impl Gemini { p.set_progress(match event { // 0.1 reserved for handle begin SocketClientEvent::Resolving => { - i.clear_events().add_event("Resolving".to_string()); + i.reset().add_event("Resolving".to_string()); 0.2 } SocketClientEvent::Resolved => { @@ -181,13 +181,7 @@ fn handle( /// * includes commit action! fn update_page_info(page: &Page, event_name: &str) { let mut i = page.navigation.request.info.borrow_mut(); - i - .add_event(event_name.to_string()) - .set_header(None) - .set_mime(None) - .set_size(None) - .commit(); - + i.add_event(event_name.to_string()).commit(); page.navigation.request.update_secondary_icon(&i) } // Update socket info at the point, where the connection is active yet @@ -197,10 +191,10 @@ fn handle( let mut i = page.navigation.request.info.borrow_mut(); i .set_request(Some(uri.to_string())) - .set_socket( + .set_socket(Some(( connection.socket_connection.local_address().unwrap(), connection.socket_connection.remote_address().unwrap() - ); + ))); // * unwrap fails only on `connection.socket_connection.is_closed()` // drop the panic as unexpected. } @@ -219,7 +213,6 @@ fn handle( .add_event(EVENT_COMPLETED.to_string()) .set_header(Some(input.as_str().to_string())) .set_size(Some(input.as_bytes().len())) - .set_mime(None) .commit(); page.navigation.request.update_secondary_icon(&i); match input { @@ -493,7 +486,6 @@ fn handle( .add_event(EVENT_COMPLETED.to_string()) .set_header(Some(success.as_header_str().to_string())) .set_mime(Some(mime.to_string())) - .set_size(None) .commit(); page.navigation.request.update_secondary_icon(&i) }, @@ -562,10 +554,7 @@ fn handle( i .add_event(EVENT_COMPLETED.to_string()) .set_header(Some(redirect.as_str().to_string())) - .set_mime(None) - .set_size(None) .commit(); - page.navigation.request.info.replace(match redirect { Redirect::Permanent { .. } => i.into_permanent_redirect(), Redirect::Temporary { .. } => i.into_temporary_redirect(), @@ -590,7 +579,6 @@ fn handle( .add_event(EVENT_COMPLETED.to_string()) .set_header(Some(certificate.as_str().to_string())) .set_size(Some(certificate.as_bytes().len())) - .set_mime(None) .commit(); page.navigation.request.update_secondary_icon(&i); // update page content widget @@ -631,12 +619,7 @@ fn handle( } redirects.replace(0); // reset let mut i = page.navigation.request.info.borrow_mut(); - i.add_event(EVENT_COMPLETED.to_string()) - .set_request(Some(uri.to_string())) - .set_header(None) - .set_size(None) - .set_mime(None) - .commit(); + i.add_event(EVENT_COMPLETED.to_string()).set_request(Some(uri.to_string())).commit(); page.navigation.request.update_secondary_icon(&i) } } diff --git a/src/app/browser/window/tab/item/page/navigation/request/info.rs b/src/app/browser/window/tab/item/page/navigation/request/info.rs index b11f657f..de0b94fe 100644 --- a/src/app/browser/window/tab/item/page/navigation/request/info.rs +++ b/src/app/browser/window/tab/item/page/navigation/request/info.rs @@ -53,6 +53,22 @@ impl Info { } } + /// Take `Self`, convert it into the new `Redirect` member, + /// * return new `Self` back + fn into_redirect(self, method: redirect::Method) -> Self { + let mut this = Self::new(); + this.redirect = Some(Box::new(Redirect { info: self, method })); + this + } + + pub fn into_permanent_redirect(self) -> Self { + self.into_redirect(redirect::Method::Permanent) + } + + pub fn into_temporary_redirect(self) -> Self { + self.into_redirect(redirect::Method::Temporary) + } + // Actions pub fn dialog(&self, parent: &impl IsA, profile: &Profile) { @@ -66,28 +82,24 @@ impl Info { } /// Mark `Self` as deprecated - /// * tip: usually called on page handler begin + /// * tip: usually called on page load begin, + /// to prevent driver implementation mistakes pub fn deprecate(&mut self) { self.is_deprecated = true; } // Setters - // * useful to update `Self` as chain of values + // * update `Self` in chain - /// Take `Self`, convert it into the redirect member, - /// then, return new `Self` back - pub fn into_redirect(self, method: redirect::Method) -> Self { - let mut this = Self::new(); - this.redirect = Some(Box::new(Redirect { info: self, method })); - this - } - - pub fn into_permanent_redirect(self) -> Self { - self.into_redirect(redirect::Method::Permanent) - } - - pub fn into_temporary_redirect(self) -> Self { - self.into_redirect(redirect::Method::Temporary) + /// Reset `Self` to the clean state + /// * this method keeps `Redirect` value! + pub fn reset(&mut self) -> &mut Self { + self.clear_events() + .set_header(None) + .set_mime(None) + .set_request(None) + .set_size(None) + .set_socket(None) } pub fn add_event(&mut self, name: String) -> &mut Self { @@ -110,12 +122,8 @@ impl Info { self } - pub fn set_socket( - &mut self, - local_address: SocketAddress, - remote_address: SocketAddress, - ) -> &mut Self { - self.socket = Some(Socket { + pub fn set_socket(&mut self, address: Option<(SocketAddress, SocketAddress)>) -> &mut Self { + self.socket = address.map(|(local_address, remote_address)| Socket { local_address, remote_address, });