diff --git a/Cargo.lock b/Cargo.lock
index cd2894a..c19a7e3 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1534,6 +1534,15 @@ version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+[[package]]
+name = "linkify"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1dfa36d52c581e9ec783a7ce2a5e0143da6237be5811a0b3153fedfdbe9f780"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "lnurl-pay"
version = "0.3.0"
@@ -1762,6 +1771,7 @@ version = "0.1.5"
dependencies = [
"axum 0.7.5",
"clap",
+ "linkify",
"nostr-sdk",
"rss",
"serde",
diff --git a/Cargo.toml b/Cargo.toml
index d736206..18392f8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,3 +18,4 @@ tracing = "0.1.40"
tower-http = { version = "0.5.2", features = ["tracing", "trace"] }
service_conventions = "0.0.14"
+linkify = "0.10.0"
diff --git a/src/lib.rs b/src/lib.rs
index 53809bb..262b12d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -2,7 +2,7 @@ use nostr_sdk::prelude::*;
use rss::{Guid, Item, ItemBuilder};
pub fn event_to_item(e: Event) -> Item {
- let c = e.content.clone();
+ let c = linkify_content(e.content.clone());
let mut guid = Guid::default();
let event_bech32 = e.id.to_bech32().unwrap();
let event_link = format!("https://snort.social/e/{event_bech32}");
@@ -25,6 +25,19 @@ fn event_is_reply(e: &Event) -> bool {
})
}
+pub fn linkify_content(content: String) -> String {
+ let finder = linkify::LinkFinder::new();
+ let links: Vec<_> = finder.links(&content).collect();
+ let mut new_content = content.clone();
+
+ for l in links {
+ let link_str = l.as_str();
+ let anchor = format!("{link_str}");
+ new_content = new_content.replace(link_str, &anchor);
+ }
+ new_content
+}
+
pub fn filter_out_replies(v: Vec) -> Vec {
return v.into_iter().filter(|e| !event_is_reply(&e)).collect();
}