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";
|
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
|
||||||
|
}
|
|
@ -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))
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue