Rebuilding UI logic, splitting into multiple components

This commit is contained in:
Gabriel 2025-07-03 11:25:23 -04:00
parent 2a40fe9beb
commit 7d06ba9404
3 changed files with 95 additions and 21 deletions

View file

@ -30,7 +30,7 @@ const feeds_table_create: &str = "CREATE TABLE IF NOT EXISTS 'feeds' (
'description' TEXT, 'description' TEXT,
'icon' BLOB, 'icon' BLOB,
'url' text not null unique on conflict replace, 'url' text not null unique on conflict replace,
'subscribed' INTEGER, 'subscribed' INTEGER NOT NULL default 0,
'last_updated' TEXT , 'last_updated' TEXT ,
PRIMARY KEY('feedID') PRIMARY KEY('feedID')
);"; );";
@ -116,13 +116,13 @@ pub fn return_item() -> String {
} }
pub struct Feed { pub struct Feed {
feedID: u8, pub feedID: u8,
title: String, pub title: String,
description: Option<String>, pub description: Option<String>,
icon: Option<String>, pub icon: Option<String>,
url: String, pub url: String,
subscribed: Option<String>, //needs to be bool pub subscribed: bool,
last_updated: Option<String>, pub last_updated: Option<String>,
} }
pub fn get_feeds() -> Vec<Feed> { pub fn get_feeds() -> Vec<Feed> {
@ -136,7 +136,7 @@ pub fn get_feeds() -> Vec<Feed> {
description: row.get(2).unwrap(), description: row.get(2).unwrap(),
icon: row.get(3).unwrap(), icon: row.get(3).unwrap(),
url: row.get(4).unwrap(), url: row.get(4).unwrap(),
subscribed: row.get(5).unwrap(), subscribed: row.get::<_,bool>(5).unwrap(),
last_updated: row.get(6).unwrap(), last_updated: row.get(6).unwrap(),
}) })
}).unwrap().collect(); }).unwrap().collect();

View file

@ -4,12 +4,10 @@ use net::load_rss;
mod ui; mod ui;
mod html; mod html;
mod db; mod db;
use db::Feed;
mod files; mod files;
pub fn main() -> iced::Result { pub fn main() -> iced::Result {
db::initialize(); db::initialize();
db::get_feeds();
ui::user_interface() ui::user_interface()
} }

View file

@ -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 { pub fn user_interface() -> iced::Result {
iced::run(update, view) iced::run(update, view)
} }
#[derive(Default)] #[derive(Clone, Debug)]
struct State{ enum Page {
home,
feed_view,
item_view,
testing,
} }
#[derive(Debug,Clone)] struct State {
enum Message {} 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> { fn view(state: &State) -> Element<'_, Message> {
iced::widget::text("Ayy lmao").into() 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()
} }