mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-04-01 09:05:27 +00:00
actualize info member by commit, make update_page_info scope-dependent, set_request globally where it is possible
This commit is contained in:
parent
3d7818fbd6
commit
12df902983
2 changed files with 54 additions and 43 deletions
|
|
@ -177,16 +177,28 @@ fn handle(
|
||||||
let redirects = redirects.clone();
|
let redirects = redirects.clone();
|
||||||
move |result| match result {
|
move |result| match result {
|
||||||
Ok((response, connection)) => {
|
Ok((response, connection)) => {
|
||||||
|
/// Common page info pattern for some cases in the current scope
|
||||||
|
/// * 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_mime(None)
|
||||||
|
.set_size(None)
|
||||||
|
.commit()
|
||||||
|
}
|
||||||
// Update socket info at the point, where the connection is active yet
|
// Update socket info at the point, where the connection is active yet
|
||||||
|
// * also, actualize `request` as same everywhere below
|
||||||
{
|
{
|
||||||
use gtk::prelude::SocketConnectionExt;
|
use gtk::prelude::SocketConnectionExt;
|
||||||
let mut i = page.navigation.request.info.borrow_mut();
|
let mut i = page.navigation.request.info.borrow_mut();
|
||||||
i.set_socket(
|
i
|
||||||
connection.socket_connection.local_address().unwrap(),
|
.set_request(Some(uri.to_string()))
|
||||||
connection.socket_connection.remote_address().unwrap()
|
.set_socket(
|
||||||
);
|
connection.socket_connection.local_address().unwrap(),
|
||||||
// * unwrap fails only on `connection.socket_connection.is_closed()`
|
connection.socket_connection.remote_address().unwrap()
|
||||||
// drop the panic as unexpected.
|
);
|
||||||
|
// * unwrap fails only on `connection.socket_connection.is_closed()`
|
||||||
|
// drop the panic as unexpected.
|
||||||
}
|
}
|
||||||
// Handle response
|
// Handle response
|
||||||
match response {
|
match response {
|
||||||
|
|
@ -199,7 +211,7 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
match input {
|
match input {
|
||||||
// https://geminiprotocol.net/docs/protocol-specification.gmi#status-10
|
// https://geminiprotocol.net/docs/protocol-specification.gmi#status-10
|
||||||
Input::Default { message } => page.input.set_new_response(
|
Input::Default { message } => page.input.set_new_response(
|
||||||
|
|
@ -310,7 +322,6 @@ fn handle(
|
||||||
i
|
i
|
||||||
.add_event("Parsing".to_string())
|
.add_event("Parsing".to_string())
|
||||||
.set_mime(Some(success.mime().to_string()))
|
.set_mime(Some(success.mime().to_string()))
|
||||||
.set_request(Some(uri.to_string()))
|
|
||||||
.set_size(Some(data.len()));
|
.set_size(Some(data.len()));
|
||||||
let w = if matches!(*feature, Feature::Source) {
|
let w = if matches!(*feature, Feature::Source) {
|
||||||
page.content.to_text_source(data)
|
page.content.to_text_source(data)
|
||||||
|
|
@ -336,7 +347,9 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
i.add_event(EVENT_COMPLETED.to_string());
|
i
|
||||||
|
.add_event(EVENT_COMPLETED.to_string())
|
||||||
|
.commit();
|
||||||
},
|
},
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
let s = page.content.to_status_failure();
|
let s = page.content.to_status_failure();
|
||||||
|
|
@ -347,7 +360,7 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
Err((_, e)) => {
|
Err((_, e)) => {
|
||||||
|
|
@ -359,7 +372,7 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
|
@ -372,7 +385,7 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
@ -413,8 +426,8 @@ fn handle(
|
||||||
i
|
i
|
||||||
.add_event(EVENT_COMPLETED.to_string())
|
.add_event(EVENT_COMPLETED.to_string())
|
||||||
.set_mime(Some(success.mime().to_string()))
|
.set_mime(Some(success.mime().to_string()))
|
||||||
.set_request(Some(uri.to_string()))
|
.set_size(Some(buffer.byte_length()))
|
||||||
.set_size(Some(buffer.byte_length()));
|
.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
|
|
@ -426,8 +439,8 @@ fn handle(
|
||||||
i
|
i
|
||||||
.add_event(EVENT_COMPLETED.to_string())
|
.add_event(EVENT_COMPLETED.to_string())
|
||||||
.set_mime(Some(success.mime().to_string()))
|
.set_mime(Some(success.mime().to_string()))
|
||||||
.set_request(Some(uri.to_string()))
|
.set_size(None)
|
||||||
.set_size(None);
|
.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -453,8 +466,8 @@ fn handle(
|
||||||
i
|
i
|
||||||
.add_event(EVENT_COMPLETED.to_string())
|
.add_event(EVENT_COMPLETED.to_string())
|
||||||
.set_mime(Some(success.mime().to_string()))
|
.set_mime(Some(success.mime().to_string()))
|
||||||
.set_request(Some(uri.to_string()))
|
.set_size(None)
|
||||||
.set_size(None);
|
.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -478,8 +491,8 @@ fn handle(
|
||||||
i
|
i
|
||||||
.add_event(EVENT_COMPLETED.to_string())
|
.add_event(EVENT_COMPLETED.to_string())
|
||||||
.set_mime(Some(mime.to_string()))
|
.set_mime(Some(mime.to_string()))
|
||||||
.set_request(Some(uri.to_string()))
|
.set_size(None)
|
||||||
.set_size(None);
|
.commit();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -498,7 +511,7 @@ fn handle(
|
||||||
page.set_progress(0.0);
|
page.set_progress(0.0);
|
||||||
page.set_title(&s.title());
|
page.set_title(&s.title());
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
// Disallow external redirection by default as potentially unsafe
|
// Disallow external redirection by default as potentially unsafe
|
||||||
// even not specified, require follow confirmation @TODO optional
|
// even not specified, require follow confirmation @TODO optional
|
||||||
} else if uri.host() != target.host() {
|
} else if uri.host() != target.host() {
|
||||||
|
|
@ -523,7 +536,7 @@ fn handle(
|
||||||
page.set_progress(0.0);
|
page.set_progress(0.0);
|
||||||
page.set_title(t);
|
page.set_title(t);
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
} else {
|
} else {
|
||||||
let t = target.to_string();
|
let t = target.to_string();
|
||||||
if matches!(redirect, Redirect::Permanent { .. }) {
|
if matches!(redirect, Redirect::Permanent { .. }) {
|
||||||
|
|
@ -535,8 +548,8 @@ fn handle(
|
||||||
i
|
i
|
||||||
.add_event(EVENT_COMPLETED.to_string())
|
.add_event(EVENT_COMPLETED.to_string())
|
||||||
.set_mime(None)
|
.set_mime(None)
|
||||||
.set_request(Some(uri.to_string()))
|
.set_size(None)
|
||||||
.set_size(None);
|
.commit();
|
||||||
|
|
||||||
page.navigation.request.info.replace(i.into_redirect());
|
page.navigation.request.info.replace(i.into_redirect());
|
||||||
}
|
}
|
||||||
|
|
@ -549,7 +562,7 @@ fn handle(
|
||||||
page.set_progress(0.0);
|
page.set_progress(0.0);
|
||||||
page.set_title(&s.title());
|
page.set_title(&s.title());
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Response::Certificate(ref certificate) => match certificate {
|
Response::Certificate(ref certificate) => match certificate {
|
||||||
|
|
@ -567,7 +580,7 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Response::Failure(failure) => match failure {
|
Response::Failure(failure) => match failure {
|
||||||
|
|
@ -585,7 +598,7 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
if let Some(callback) = on_failure {
|
if let Some(callback) = on_failure {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
|
|
@ -605,7 +618,7 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED);
|
update_page_info(&page, EVENT_COMPLETED);
|
||||||
if let Some(callback) = on_failure {
|
if let Some(callback) = on_failure {
|
||||||
callback()
|
callback()
|
||||||
}
|
}
|
||||||
|
|
@ -623,18 +636,16 @@ fn handle(
|
||||||
page.snap_history();
|
page.snap_history();
|
||||||
}
|
}
|
||||||
redirects.replace(0); // reset
|
redirects.replace(0); // reset
|
||||||
update_page_info(&page, &uri, EVENT_COMPLETED)
|
{
|
||||||
|
let mut i = page.navigation.request.info.borrow_mut();
|
||||||
|
i.add_event(EVENT_COMPLETED.to_string())
|
||||||
|
.set_request(Some(uri.to_string()))
|
||||||
|
.set_mime(None)
|
||||||
|
.set_size(None)
|
||||||
|
.commit()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Apply common page info pattern
|
|
||||||
fn update_page_info(page: &Page, uri: &Uri, event_name: &str) {
|
|
||||||
let mut i = page.navigation.request.info.borrow_mut();
|
|
||||||
i.add_event(event_name.to_string())
|
|
||||||
.set_mime(None)
|
|
||||||
.set_request(Some(uri.to_string()))
|
|
||||||
.set_size(None);
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,11 @@ impl Info {
|
||||||
PreferencesDialog::info(self).present(parent)
|
PreferencesDialog::info(self).present(parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Actualize `Self`
|
||||||
|
pub fn commit(&mut self) {
|
||||||
|
self.is_deprecated = false;
|
||||||
|
}
|
||||||
|
|
||||||
/// Mark `Self` as deprecated
|
/// Mark `Self` as deprecated
|
||||||
/// * tip: usually called on page handler begin
|
/// * tip: usually called on page handler begin
|
||||||
pub fn deprecate(&mut self) {
|
pub fn deprecate(&mut self) {
|
||||||
|
|
@ -73,13 +78,11 @@ impl Info {
|
||||||
|
|
||||||
pub fn add_event(&mut self, name: String) -> &mut Self {
|
pub fn add_event(&mut self, name: String) -> &mut Self {
|
||||||
self.event.push(Event::now(name));
|
self.event.push(Event::now(name));
|
||||||
self.is_deprecated = false;
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_mime(&mut self, mime: Option<String>) -> &mut Self {
|
pub fn set_mime(&mut self, mime: Option<String>) -> &mut Self {
|
||||||
self.mime = mime;
|
self.mime = mime;
|
||||||
self.is_deprecated = false;
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,19 +95,16 @@ impl Info {
|
||||||
local_address,
|
local_address,
|
||||||
remote_address,
|
remote_address,
|
||||||
});
|
});
|
||||||
self.is_deprecated = false;
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_request(&mut self, request: Option<String>) -> &mut Self {
|
pub fn set_request(&mut self, request: Option<String>) -> &mut Self {
|
||||||
self.request = request;
|
self.request = request;
|
||||||
self.is_deprecated = false;
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_size(&mut self, size: Option<usize>) -> &mut Self {
|
pub fn set_size(&mut self, size: Option<usize>) -> &mut Self {
|
||||||
self.size = size;
|
self.size = size;
|
||||||
self.is_deprecated = false;
|
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue