diff --git a/src/net.rs b/src/net.rs index 052522c..ad60100 100644 --- a/src/net.rs +++ b/src/net.rs @@ -9,14 +9,14 @@ const DEFAULT_TOR_PROXY: &str = "socks5h://127.0.0.1:9050"; const DEFAULT_I2P_PROXY: &str = "socks5h://127.0.0.1:4447"; #[derive(PartialEq)] -enum Network { +pub enum Network { Clearnet, Tor, I2P, Unknown, } -fn url_network(url: &str) -> Network { +pub fn url_network(url: &str) -> Network { match Url::parse(url) { Ok(u) => match u.host() { Some(host) => { @@ -183,3 +183,39 @@ pub fn download_image(url: &str) -> Option { } } } + +const MEDIA_FORMATS: [&str; 15] = [ + ".mp3", ".wav", ".ogg", ".flac", ".ogv", ".opus", ".webm", ".mp4", ".mkv", ".mov", ".webp", + ".gif", ".png", ".jpg", ".pdf", +]; + +fn is_media(link: &str) -> bool { + for f in MEDIA_FORMATS { + match link.find(f) { + Some(_) => { + return true; + } + None => {} + } + } + + false +} + + +pub fn parse_links(content: &str) -> Vec { + let mut result = Vec::new(); + let frag = Html::parse_fragment(content); + let link_selector = Selector::parse("a").unwrap(); + for link in frag.select(&link_selector) { + if let Some(href) = link.value().attr("href") { + if is_media(href) == false { + result.push(href.to_owned()); + } + /*if is_feed(href) { + result.push(href.to_owned()); + }*/ + } + } + result +} \ No newline at end of file diff --git a/src/widgets.rs b/src/widgets.rs index 211968c..d47c38b 100644 --- a/src/widgets.rs +++ b/src/widgets.rs @@ -1,3 +1,5 @@ +use crate::net; + use super::db; use super::ui; use iced::widget::markdown; @@ -19,8 +21,15 @@ pub fn list_feeds() -> iced::widget::Column<'static, Message> { feeds .iter() .map(|f| { + let n = net::url_network(&f.url); + let prefix = match n { + net::Network::Clearnet => {""} + net::Network::Tor => {"Tor: "} + net::Network::I2P => {"I2P: "} + _ => {""} + }; row!( - button(text(f.title.clone())).on_press(Message::LoadFeed(f.feed_id)), + button(text(prefix.to_owned() + &f.title)).on_press(Message::LoadFeed(f.feed_id)), button(text("Remove feed")).on_press(Message::RemoveFeed(f.feed_id)) ) })