2025-07-03 11:25:23 -04:00
|
|
|
use super::db;
|
|
|
|
|
use db::Feed;
|
|
|
|
|
use iced::{
|
|
|
|
|
widget::{button, column, container, text},
|
|
|
|
|
Element,
|
|
|
|
|
Length::Fill,
|
|
|
|
|
};
|
2025-07-02 20:11:43 -04:00
|
|
|
pub fn user_interface() -> iced::Result {
|
|
|
|
|
iced::run(update, view)
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-03 11:25:23 -04:00
|
|
|
#[derive(Clone, Debug)]
|
|
|
|
|
enum Page {
|
|
|
|
|
home,
|
|
|
|
|
feed_view,
|
|
|
|
|
item_view,
|
|
|
|
|
testing,
|
2025-07-02 20:11:43 -04:00
|
|
|
}
|
|
|
|
|
|
2025-07-03 11:25:23 -04:00
|
|
|
struct State {
|
|
|
|
|
page: Page,
|
|
|
|
|
}
|
|
|
|
|
impl Default for State {
|
|
|
|
|
fn default() -> Self {
|
|
|
|
|
State { page: Page::home }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[derive(Debug, Clone)]
|
|
|
|
|
enum Message {
|
|
|
|
|
changePage(Page),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn update(state: &mut State, mes: Message) {
|
|
|
|
|
match mes {
|
|
|
|
|
Message::changePage(p) => state.page=p
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-02 20:11:43 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn view(state: &State) -> Element<'_, Message> {
|
2025-07-03 11:25:23 -04:00
|
|
|
match state.page {
|
|
|
|
|
Page::home => home(&state),
|
|
|
|
|
Page::feed_view => feeds(&state),
|
|
|
|
|
Page::item_view => item(&state),
|
|
|
|
|
Page::testing => testing(&state),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn home(state: &State) -> Element<'_, Message> {
|
|
|
|
|
container(column!(
|
|
|
|
|
list_feeds(),
|
|
|
|
|
button("Go to test!").on_press(Message::changePage(Page::testing))
|
|
|
|
|
))
|
|
|
|
|
.padding(15)
|
|
|
|
|
.height(Fill)
|
|
|
|
|
.width(Fill)
|
|
|
|
|
.into()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn list_feeds() -> iced::widget::Column<'static, Message> {
|
|
|
|
|
let feeds = db::get_feeds();
|
|
|
|
|
column(
|
|
|
|
|
feeds
|
|
|
|
|
.iter()
|
|
|
|
|
.map(|f| {
|
|
|
|
|
let title = f.title.clone();
|
|
|
|
|
let index = f.feedID;
|
|
|
|
|
text(title)
|
|
|
|
|
})
|
|
|
|
|
.map(Element::from),
|
|
|
|
|
)
|
|
|
|
|
.align_x(iced::Alignment::Start)
|
|
|
|
|
.spacing(5)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn feeds(state: &State) -> Element<'_, Message> {
|
|
|
|
|
container(list_feeds().padding(15))
|
|
|
|
|
.height(Fill)
|
|
|
|
|
.width(Fill)
|
|
|
|
|
.into()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn item(state: &State) -> Element<'_, Message> {
|
|
|
|
|
todo!()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn testing(state: &State) -> Element<'_, Message> {
|
|
|
|
|
column!(
|
|
|
|
|
iced::widget::text("Ayy lmao"),
|
|
|
|
|
button("go back!").on_press(Message::changePage(Page::home))
|
|
|
|
|
)
|
|
|
|
|
.spacing(5)
|
|
|
|
|
.into()
|
|
|
|
|
}
|