From 454feaeba5318b9ee923a37417b29d13b7bd442b Mon Sep 17 00:00:00 2001 From: yggverse Date: Thu, 26 Sep 2024 21:20:31 +0300 Subject: [PATCH] detect reader title on first header tag match --- .../tab/page/content/text/gemini/reader/mod.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/browser/main/tab/page/content/text/gemini/reader/mod.rs b/src/browser/main/tab/page/content/text/gemini/reader/mod.rs index cc4e4353..cc6f1afa 100644 --- a/src/browser/main/tab/page/content/text/gemini/reader/mod.rs +++ b/src/browser/main/tab/page/content/text/gemini/reader/mod.rs @@ -4,11 +4,13 @@ use parser::header::Header; use parser::plain::Plain; use gtk::{ + glib::GString, prelude::{StyleContextExt, WidgetExt}, Align, CssProvider, Label, STYLE_PROVIDER_PRIORITY_APPLICATION, }; pub struct Reader { + title: Option, css: CssProvider, widget: Label, } @@ -16,13 +18,23 @@ pub struct Reader { impl Reader { // Construct pub fn new(gemtext: &str) -> Self { + // Init title + let mut title = None; + // Init markup let mut markup = String::new(); for line in gemtext.lines() { // Is header if let Some(header) = Header::from(line) { + // Format markup.push_str(header.markup()); + + // Set title from first document header tag + if title == None { + title = Some(header.text().clone()); + } + continue; } @@ -58,10 +70,14 @@ impl Reader { .add_provider(&css, STYLE_PROVIDER_PRIORITY_APPLICATION); // Result - Self { css, widget } + Self { title, css, widget } } // Getters + pub fn title(&self) -> &Option { + &self.title + } + pub fn widget(&self) -> &Label { &self.widget }