diff --git a/meli/src/mail/view/envelope.rs b/meli/src/mail/view/envelope.rs index a9ae0ef0..ad87fd9a 100644 --- a/meli/src/mail/view/envelope.rs +++ b/meli/src/mail/view/envelope.rs @@ -1530,13 +1530,9 @@ impl Component for EnvelopeView { context .replies .push_back(UIEvent::StatusEvent(StatusEvent::BufClear)); - let body_text = &self.body_text; let links = &self.links; let (_kind, url) = { - if let Some(l) = links - .get(lidx) - .and_then(|l| Some((l.kind, body_text.get(l.start..l.end)?))) - { + if let Some(l) = links.get(lidx).map(|l| (l.kind, l.value.as_str())) { l } else { context.replies.push_back(UIEvent::StatusEvent( diff --git a/meli/src/mail/view/types.rs b/meli/src/mail/view/types.rs index 5ac19743..63ea9ccb 100644 --- a/meli/src/mail/view/types.rs +++ b/meli/src/mail/view/types.rs @@ -73,11 +73,12 @@ pub enum LinkKind { Email, } -#[derive(Eq, PartialEq, Copy, Clone, Debug)] +#[derive(Eq, PartialEq, Clone, Debug)] pub struct Link { pub start: usize, pub end: usize, - pub kind: self::LinkKind, + pub value: String, + pub kind: LinkKind, } #[derive(Debug, Default)] @@ -169,21 +170,16 @@ impl ViewOptions { *links = finder .links(&text) .filter_map(|l| { - if *l.kind() == linkify::LinkKind::Url { - Some(Link { - start: l.start(), - end: l.end(), - kind: LinkKind::Url, - }) - } else if *l.kind() == linkify::LinkKind::Email { - Some(Link { - start: l.start(), - end: l.end(), - kind: LinkKind::Email, - }) - } else { - None - } + Some(Link { + start: l.start(), + end: l.end(), + value: l.as_str().to_string(), + kind: match l.kind() { + linkify::LinkKind::Url => LinkKind::Url, + linkify::LinkKind::Email => LinkKind::Email, + _ => return None, + }, + }) }) .collect::>(); }