get UI to display darknet links differently (proof of concept)

This commit is contained in:
Gabriel 2025-08-06 01:15:13 -04:00
parent 01a5bdac40
commit 240cb19589
2 changed files with 48 additions and 3 deletions

View file

@ -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"; const DEFAULT_I2P_PROXY: &str = "socks5h://127.0.0.1:4447";
#[derive(PartialEq)] #[derive(PartialEq)]
enum Network { pub enum Network {
Clearnet, Clearnet,
Tor, Tor,
I2P, I2P,
Unknown, Unknown,
} }
fn url_network(url: &str) -> Network { pub fn url_network(url: &str) -> Network {
match Url::parse(url) { match Url::parse(url) {
Ok(u) => match u.host() { Ok(u) => match u.host() {
Some(host) => { Some(host) => {
@ -183,3 +183,39 @@ pub fn download_image(url: &str) -> Option<iced::widget::image::Handle> {
} }
} }
} }
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<String> {
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
}

View file

@ -1,3 +1,5 @@
use crate::net;
use super::db; use super::db;
use super::ui; use super::ui;
use iced::widget::markdown; use iced::widget::markdown;
@ -19,8 +21,15 @@ pub fn list_feeds() -> iced::widget::Column<'static, Message> {
feeds feeds
.iter() .iter()
.map(|f| { .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!( 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)) button(text("Remove feed")).on_press(Message::RemoveFeed(f.feed_id))
) )
}) })