diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 438e805..16e33a3 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -609,9 +609,9 @@ dependencies = [ [[package]] name = "dalet" -version = "1.0.0-pre.12" +version = "1.0.0-pre.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb1baee9a3c3f0f6aed8cb4cf29331717227cb92dd6204e2df963dd315d69c1" +checksum = "bf04981045a3b665c3b52a753a72f976489aac293462363375767d91b1ae74fb" dependencies = [ "clap", "enum-procs", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index aa53205..2267a1f 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -26,7 +26,7 @@ tauri = { version = "1", features = [ ] } serde = { version = "1", features = ["derive"] } serde_json = "1" -dalet = "1.0.0-pre.12" +dalet = "1.0.0-pre.14" tokio = { version = "1.39.2", features = ["full"] } tokio-rustls = { version = "0.26.0", default-features = false, features = [ diff --git a/src-tauri/src/process_input/process_data.rs b/src-tauri/src/process_input/process_data.rs index 4651213..4d68e0c 100644 --- a/src-tauri/src/process_input/process_data.rs +++ b/src-tauri/src/process_input/process_data.rs @@ -1,9 +1,16 @@ use bytes::Bytes; -use dalet::{daletl::DlPage, parsers::gemtext::parse_gemtext, typed::Tag::*}; +use dalet::{ + daletl::DlPage, + parsers::gemtext::parse_gemtext, + typed::{ResolveTitle, Tag::*}, +}; use mime::Mime; use std::str; -use crate::types::{VigiError, VigiOutput}; +use crate::{ + types::{VigiError, VigiOutput}, + utils::truncate, +}; pub async fn process_data(mime: Mime, data: Bytes) -> Result { let result = match (mime.type_().as_str(), mime.subtype().as_str()) { @@ -27,13 +34,10 @@ async fn process_text(data: &str) -> VigiOutput { } async fn process_gemini(data: &str) -> Result { - let mut truncated = data.to_owned(); - truncated.truncate(50); + let truncated = truncate(data, 20); let page = parse_gemtext(data).map_err(|_| VigiError::Parse)?; - let output = DlPage::from(page).data; + let title = page.resolve_title().unwrap_or(truncated.to_owned()); - let res = VigiOutput::new(truncated, output); - - Ok(res) + Ok(VigiOutput::new(title.to_owned(), DlPage::from(page).data)) } diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index 46d991b..03a9d1f 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -57,3 +57,10 @@ pub fn write_tabs(path: &PathBuf, tabs: &Vec) -> Result<(), VigiError> { ) .map_err(|_| VigiError::StateUpdate) } + +pub fn truncate(s: &str, max_chars: usize) -> &str { + match s.char_indices().nth(max_chars) { + Some((idx, _)) => &s[..idx], + None => s, + } +}