get UI to display darknet links differently (proof of concept)
This commit is contained in:
parent
01a5bdac40
commit
240cb19589
2 changed files with 48 additions and 3 deletions
40
src/net.rs
40
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<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
|
||||
}
|
|
@ -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))
|
||||
)
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue