From 7d06ba94044363aaef2aea4bb6570377449cb8d5 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 3 Jul 2025 11:25:23 -0400 Subject: [PATCH] Rebuilding UI logic, splitting into multiple components --- src/db.rs | 18 +++++----- src/main.rs | 2 -- src/ui.rs | 96 +++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 95 insertions(+), 21 deletions(-) diff --git a/src/db.rs b/src/db.rs index a8bbcd3..5e358eb 100644 --- a/src/db.rs +++ b/src/db.rs @@ -30,7 +30,7 @@ const feeds_table_create: &str = "CREATE TABLE IF NOT EXISTS 'feeds' ( 'description' TEXT, 'icon' BLOB, 'url' text not null unique on conflict replace, - 'subscribed' INTEGER, + 'subscribed' INTEGER NOT NULL default 0, 'last_updated' TEXT , PRIMARY KEY('feedID') );"; @@ -116,13 +116,13 @@ pub fn return_item() -> String { } pub struct Feed { - feedID: u8, - title: String, - description: Option, - icon: Option, - url: String, - subscribed: Option, //needs to be bool - last_updated: Option, + pub feedID: u8, + pub title: String, + pub description: Option, + pub icon: Option, + pub url: String, + pub subscribed: bool, + pub last_updated: Option, } pub fn get_feeds() -> Vec { @@ -136,7 +136,7 @@ pub fn get_feeds() -> Vec { description: row.get(2).unwrap(), icon: row.get(3).unwrap(), url: row.get(4).unwrap(), - subscribed: row.get(5).unwrap(), + subscribed: row.get::<_,bool>(5).unwrap(), last_updated: row.get(6).unwrap(), }) }).unwrap().collect(); diff --git a/src/main.rs b/src/main.rs index 0fe1791..5e34dee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,12 +4,10 @@ use net::load_rss; mod ui; mod html; mod db; -use db::Feed; mod files; pub fn main() -> iced::Result { db::initialize(); - db::get_feeds(); ui::user_interface() } diff --git a/src/ui.rs b/src/ui.rs index 4d53f58..f6f88b4 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -1,21 +1,97 @@ -use iced::{Element, Result}; +use super::db; +use db::Feed; +use iced::{ + widget::{button, column, container, text}, + Element, + Length::Fill, +}; pub fn user_interface() -> iced::Result { - iced::run(update, view) } -#[derive(Default)] -struct State{ - +#[derive(Clone, Debug)] +enum Page { + home, + feed_view, + item_view, + testing, } -#[derive(Debug,Clone)] -enum Message {} +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 + } + -fn update(state: &mut State,message: Message) { } fn view(state: &State) -> Element<'_, Message> { - iced::widget::text("Ayy lmao").into() -} \ No newline at end of file + 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() +}