use crate::net; use crate::ui::Page; use super::db; use super::ui; use iced::widget::markdown; use iced::widget::row; use iced::widget::scrollable; use iced::widget::Column; use iced::widget::Text; use iced::Theme; use iced::{ widget::{button, column, container, text}, Element, }; use crate::rss_content::Content; use ui::Message; pub fn list_feeds() -> iced::widget::Column<'static, Message> { let feeds = db::get_feeds(); column( 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(prefix.to_owned() + &f.title)) .on_press(Message::LoadFeed(f.feed_id)), button(text("Remove feed")).on_press(Message::RemoveFeed(f.feed_id)) ) }) .map(Element::from), ) .align_x(iced::Alignment::Start) .spacing(5) .padding(15) } pub fn list_items(feed_id: i64) -> iced::widget::Column<'static, Message> { let items: Vec = db::get_feed_items(feed_id); column( items .iter() .map(|i| button(text(i.title.clone())).on_press(Message::LoadItem(i.item_id))) .map(Element::from), ) .align_x(iced::Alignment::Start) .spacing(5) .padding(15) } pub fn content_area(content: &'_ Vec) -> iced::widget::Container<'_, Message> { let mut children: Vec> = Vec::new(); for c in content { match c { Content::MarkdownParsed(p) => { children.push(markdown(p, Theme::Dark).map(Message::LinkClicked)); } Content::Image(_) => { children.push(text("").size(32).into()); } Content::Audio(_) => { children.push(text("