mirror of
https://github.com/YGGverse/Yoda.git
synced 2026-03-31 16:45:27 +00:00
add header string dump, reorganize size struct
This commit is contained in:
parent
22efd3ef9d
commit
1c29639468
4 changed files with 72 additions and 43 deletions
|
|
@ -183,8 +183,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.borrow_mut();
|
||||
i
|
||||
.add_event(event_name.to_string())
|
||||
.unset_mime()
|
||||
.unset_size()
|
||||
.set_header(None)
|
||||
.set_mime(None)
|
||||
.set_size(None)
|
||||
.commit();
|
||||
|
||||
page.navigation.request.update_secondary_icon(&i)
|
||||
|
|
@ -216,8 +217,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.borrow_mut();
|
||||
i
|
||||
.add_event(EVENT_COMPLETED.to_string())
|
||||
.set_size(Some(input.as_bytes().len()), None)
|
||||
.unset_mime()
|
||||
.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 {
|
||||
|
|
@ -332,8 +334,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.borrow_mut();
|
||||
i
|
||||
.add_event("Parsing".to_string())
|
||||
.set_mime(Some(mime))
|
||||
.set_size(Some(success.as_header_bytes().len()), Some(data.len()));
|
||||
.set_header(Some(success.as_header_str().to_string()))
|
||||
.set_size(Some(buffer.len()))
|
||||
.set_mime(Some(mime));
|
||||
let w = if matches!(*feature, Feature::Source) {
|
||||
page.content.to_text_source(data)
|
||||
} else {
|
||||
|
|
@ -437,8 +440,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.borrow_mut();
|
||||
i
|
||||
.add_event(EVENT_COMPLETED.to_string())
|
||||
.set_header(Some(success.as_header_str().to_string()))
|
||||
.set_mime(Some(mime))
|
||||
.set_size(None, Some(buffer.byte_length()))
|
||||
.set_size(Some(buffer.byte_length()))
|
||||
.commit();
|
||||
page.navigation.request.update_secondary_icon(&i)
|
||||
}
|
||||
|
|
@ -487,8 +491,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.borrow_mut();
|
||||
i
|
||||
.add_event(EVENT_COMPLETED.to_string())
|
||||
.set_header(Some(success.as_header_str().to_string()))
|
||||
.set_mime(Some(mime.to_string()))
|
||||
.unset_size()
|
||||
.set_size(None)
|
||||
.commit();
|
||||
page.navigation.request.update_secondary_icon(&i)
|
||||
},
|
||||
|
|
@ -556,8 +561,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.take();
|
||||
i
|
||||
.add_event(EVENT_COMPLETED.to_string())
|
||||
.unset_mime()
|
||||
.unset_size()
|
||||
.set_header(Some(redirect.as_str().to_string()))
|
||||
.set_mime(None)
|
||||
.set_size(None)
|
||||
.commit();
|
||||
|
||||
page.navigation.request.info.replace(i.into_redirect());
|
||||
|
|
@ -579,8 +585,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.borrow_mut();
|
||||
i
|
||||
.add_event(EVENT_COMPLETED.to_string())
|
||||
.set_size(Some(certificate.as_bytes().len()), None)
|
||||
.unset_mime()
|
||||
.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
|
||||
|
|
@ -623,8 +630,9 @@ fn handle(
|
|||
let mut i = page.navigation.request.info.borrow_mut();
|
||||
i.add_event(EVENT_COMPLETED.to_string())
|
||||
.set_request(Some(uri.to_string()))
|
||||
.unset_mime()
|
||||
.unset_size()
|
||||
.set_header(None)
|
||||
.set_size(None)
|
||||
.set_mime(None)
|
||||
.commit();
|
||||
page.navigation.request.update_secondary_icon(&i)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
mod dialog;
|
||||
mod event;
|
||||
mod size;
|
||||
mod socket;
|
||||
|
||||
use super::Profile;
|
||||
use dialog::Dialog;
|
||||
use event::Event;
|
||||
use gtk::{gio::SocketAddress, prelude::IsA};
|
||||
use size::Size;
|
||||
use socket::Socket;
|
||||
|
||||
/// Common, shared `Page` information holder
|
||||
|
|
@ -16,6 +14,9 @@ use socket::Socket;
|
|||
pub struct Info {
|
||||
/// Hold page events like connection phase and parsing time
|
||||
event: Vec<Event>,
|
||||
/// Hold optional header string to dump it in the info dialog
|
||||
/// and calculate total size
|
||||
header: Option<String>,
|
||||
/// Mark holder as deprecated on handle begin
|
||||
/// * useful on some driver does not update status properly
|
||||
is_deprecated: bool,
|
||||
|
|
@ -27,7 +28,7 @@ pub struct Info {
|
|||
/// Key to relate data collected with the specific request
|
||||
request: Option<String>,
|
||||
/// Hold size info
|
||||
size: Size,
|
||||
size: Option<usize>,
|
||||
/// Optional socket details
|
||||
/// * useful also for geo-location feature
|
||||
socket: Option<Socket>,
|
||||
|
|
@ -40,11 +41,12 @@ impl Info {
|
|||
pub fn new() -> Self {
|
||||
Self {
|
||||
event: Vec::with_capacity(50), // estimated max events quantity for all drivers
|
||||
header: None,
|
||||
is_deprecated: false,
|
||||
mime: None,
|
||||
redirect: None,
|
||||
request: None,
|
||||
size: Size::default(),
|
||||
size: None,
|
||||
socket: None,
|
||||
}
|
||||
}
|
||||
|
|
@ -89,13 +91,13 @@ impl Info {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn set_mime(&mut self, mime: Option<String>) -> &mut Self {
|
||||
self.mime = mime;
|
||||
pub fn set_header(&mut self, header: Option<String>) -> &mut Self {
|
||||
self.header = header;
|
||||
self
|
||||
}
|
||||
|
||||
pub fn unset_mime(&mut self) -> &mut Self {
|
||||
self.mime = None;
|
||||
pub fn set_mime(&mut self, mime: Option<String>) -> &mut Self {
|
||||
self.mime = mime;
|
||||
self
|
||||
}
|
||||
|
||||
|
|
@ -116,13 +118,8 @@ impl Info {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn set_size(&mut self, header: Option<usize>, content: Option<usize>) -> &mut Self {
|
||||
self.size = Size { content, header };
|
||||
self
|
||||
}
|
||||
|
||||
pub fn unset_size(&mut self) -> &mut Self {
|
||||
self.size = Size::default();
|
||||
pub fn set_size(&mut self, size: Option<usize>) -> &mut Self {
|
||||
self.size = size;
|
||||
self
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,9 @@
|
|||
use super::{Info, Profile};
|
||||
use adw::{
|
||||
ActionRow, PreferencesDialog, PreferencesGroup, PreferencesPage,
|
||||
prelude::{ActionRowExt, PreferencesDialogExt, PreferencesGroupExt, PreferencesPageExt},
|
||||
prelude::{
|
||||
ActionRowExt, ExpanderRowExt, PreferencesDialogExt, PreferencesGroupExt, PreferencesPageExt,
|
||||
},
|
||||
};
|
||||
use gtk::glib::gformat;
|
||||
|
||||
|
|
@ -37,11 +39,11 @@ impl Dialog for PreferencesDialog {
|
|||
g
|
||||
});
|
||||
} // @TODO content language, header size, etc.
|
||||
if info.size.header.is_some() || info.size.content.is_some() {
|
||||
if info.size.is_some() || info.header.is_some() {
|
||||
p.add(&{
|
||||
use crate::tool::Format;
|
||||
/// Common `ActionRow` widget pattern
|
||||
fn r(title: &str, subtitle: &str) -> ActionRow {
|
||||
fn r(title: &str, subtitle: String) -> ActionRow {
|
||||
ActionRow::builder()
|
||||
.css_classes(["property"])
|
||||
.subtitle_selectable(true)
|
||||
|
|
@ -53,18 +55,45 @@ impl Dialog for PreferencesDialog {
|
|||
let g = PreferencesGroup::builder().title("Size").build();
|
||||
let mut i = 0; // count group members
|
||||
let mut t = 0; // count total size
|
||||
if let Some(ref h) = info.size.header {
|
||||
if let Some(ref h) = info.header {
|
||||
let l = h.len();
|
||||
i += 1;
|
||||
t += h;
|
||||
g.add(&r("Header", &h.bytes()))
|
||||
t += l;
|
||||
g.add(&{
|
||||
let e = adw::ExpanderRow::builder()
|
||||
/* @TODO this class does not work with `ExpanderRow`
|
||||
.css_classes(["property"]) */
|
||||
.enable_expansion(true)
|
||||
.expanded(false)
|
||||
.subtitle(l.bytes())
|
||||
.title_selectable(true)
|
||||
.title("Header")
|
||||
.build();
|
||||
e.add_row(
|
||||
>k::Label::builder()
|
||||
.css_classes(["dim-label", "caption"])
|
||||
.ellipsize(gtk::pango::EllipsizeMode::None)
|
||||
.halign(gtk::Align::Start)
|
||||
.label(h)
|
||||
.margin_bottom(2)
|
||||
.margin_end(12)
|
||||
.margin_start(12)
|
||||
.margin_top(14)
|
||||
.selectable(true)
|
||||
.valign(gtk::Align::Center)
|
||||
.wrap(false)
|
||||
.build(), // @TODO replace with `ActionRow` after fix empty subtitle issue
|
||||
);
|
||||
e
|
||||
})
|
||||
}
|
||||
if let Some(ref c) = info.size.content {
|
||||
if let Some(ref c) = info.size {
|
||||
i += 1;
|
||||
t += c;
|
||||
g.add(&r("Content", &c.bytes()))
|
||||
g.add(&r("Content", c.bytes()))
|
||||
}
|
||||
if i > 1 && t > 0 {
|
||||
g.add(&r("Total", &t.bytes()))
|
||||
g.add(&r("Total", t.bytes()))
|
||||
}
|
||||
g
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +0,0 @@
|
|||
#[derive(Default)]
|
||||
pub struct Size {
|
||||
pub content: Option<usize>,
|
||||
pub header: Option<usize>,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue