From 97b22fd09cdcc05ceb94a44d10a91d8cfc32934e Mon Sep 17 00:00:00 2001 From: yggverse Date: Sat, 22 Mar 2025 05:46:42 +0200 Subject: [PATCH] draft redirection chain widget --- .../tab/item/page/navigation/request/info.rs | 4 ++ .../page/navigation/request/info/dialog.rs | 39 ++++++++++++------- 2 files changed, 28 insertions(+), 15 deletions(-) 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 0f3185e0..b79ea045 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 @@ -106,6 +106,10 @@ impl Info { // Getters + pub fn request(&self) -> Option<&str> { + self.request.as_deref() + } + pub fn matches(&self, request: &str) -> bool { self.request.as_ref().is_some_and(|r| r == request) } diff --git a/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs b/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs index 973d24e7..543ece8b 100644 --- a/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs +++ b/src/app/browser/window/tab/item/page/navigation/request/info/dialog.rs @@ -55,14 +55,25 @@ impl Dialog for PreferencesDialog { } // @TODO header size, total size, etc. p }); - if let Some(ref redirect) = info.redirect { + if info.redirect.is_some() { d.add(&{ - PreferencesPage::builder() + let g = PreferencesGroup::new(); + let p = PreferencesPage::builder() .title("Redirect") .icon_name("insert-link-symbolic") - .build() - }); - // @TODO recursive lookup + .build(); + p.add(&{ + fn chain(g: &PreferencesGroup, i: &Info) { + g.add(&ActionRow::builder().title(i.request().unwrap()).build()); + if let Some(ref r) = i.redirect { + chain(g, r) + } + } + chain(&g, info); + g + }); + p + }) // @TODO reverse, time total } if !info.event.is_empty() { d.add(&{ @@ -75,24 +86,22 @@ impl Dialog for PreferencesDialog { let e = &info.event[0]; let t = e.time(); let n = e.name(); - g.add(&{ - let r = ActionRow::builder() + g.add( + &ActionRow::builder() .subtitle(t.format_iso8601().unwrap()) .title(n) - .build(); - r - }); + .build(), + ); for e in &info.event[1..] { - g.add(&{ - let r = ActionRow::builder() + g.add( + &ActionRow::builder() .subtitle(gtk::glib::gformat!( "{} ms", e.time().difference(t).as_milliseconds() )) .title(e.name()) - .build(); - r - }) + .build(), + ) } g });