rss-reader written in rust
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990pub mod channels;pub mod db;pub mod items;
use axum::{ Router, extract::State, response::{Html, IntoResponse}, routing::get,};use clap::{Parser, Subcommand};use std::error::Error;// use tokio::time::{self, Duration};use turso::Connection;
use crate::channels::{create_channel, get_channels, list_channels};use crate::items::list_items;
#[derive(Parser)]#[command(version, about, long_about = None)]struct Cli { #[command(subcommand)] command: Option<Commands>,}
#[derive(Subcommand)]enum Commands { Reset {}, Refresh {},}
async fn root(State(conn): State<Connection>) -> impl IntoResponse { let channels: String = get_channels(&conn) .await .unwrap() .iter() .map(|channel| { format!( "<li><a href=\"{}\">{}</a></li>", channel.link, channel.title ) }) .collect();
Html(format!( "<html><body><h1>puppycat</h1><h2>subscribed</h2><ul>{channels}</li></html>" ))}
#[tokio::main]async fn main() -> Result<(), Box<dyn Error>> { let cli = Cli::parse();
match &cli.command { Some(Commands::Reset {}) => { let conn = db::connect().await.unwrap(); db::reset(&conn).await?; } Some(Commands::Refresh {}) => { let conn = db::connect().await.unwrap(); channels::refresh_all(&conn).await?; } None => { let conn = db::connect().await.unwrap(); db::initialize(&conn).await?;
let app = Router::new() .route("/", get(root)) .route("/api/channels", get(list_channels).post(create_channel)) .route("/api/items", get(list_items)) .with_state(conn);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); println!("puppycat listening on http://0.0.0.0:3000"); // tokio::spawn(async move { // let mut interval = time::interval(Duration::from_secs(1)); // loop { // interval.tick().await; // println!("1 second");
// // TODO: POLL RSS FEEDS AND UPDATE itemS. OBV SHORTER DURATION // } // }); axum::serve(listener, app).await?; } }
Ok(())}