diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-18 16:16:03 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-18 16:16:03 +0100 |
commit | 46ef75431e1d34c63a690726a8ef584d175ddd30 (patch) | |
tree | df36a2bfb9fe3e19ce9f76665b4770063a089423 /server/src/main.rs | |
parent | 5aa557e864bd2cf940e7164b7568e7e545817306 (diff) | |
download | jellything-46ef75431e1d34c63a690726a8ef584d175ddd30.tar jellything-46ef75431e1d34c63a690726a8ef584d175ddd30.tar.bz2 jellything-46ef75431e1d34c63a690726a8ef584d175ddd30.tar.zst |
restructure pages slightly
Diffstat (limited to 'server/src/main.rs')
-rw-r--r-- | server/src/main.rs | 74 |
1 files changed, 5 insertions, 69 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index a76d80b..438051f 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,69 +1,15 @@ #![feature(box_syntax)] -use crate::frontend::pages::MyError; -use anyhow::{anyhow, Context}; use database::Database; -use frontend::{ - pages::{home::page_home, node::page_library_node}, - style::{css_bundle, font_bundle}, -}; use jellyremuxer::RemuxerContext; use library::Library; -use log::{debug, warn}; -use rocket::{get, http::ContentType, launch, response::stream::ReaderStream, routes, State}; -use std::{path::PathBuf, sync::Arc}; -use tokio::io::{duplex, DuplexStream}; -use tokio_util::io::SyncIoBridge; +use rocket::launch; +use routes::build_rocket; +use std::sync::Arc; pub mod database; -pub mod frontend; pub mod library; - -#[get("/assets/style.css")] -async fn assets_style() -> (ContentType, String) { - (ContentType::CSS, css_bundle()) -} - -#[get("/assets/cantarell.woff2")] -async fn assets_font() -> (ContentType, Vec<u8>) { - (ContentType::WOFF2, font_bundle()) -} - -#[get("/stream/<path..>?<selection>")] -fn stream( - path: PathBuf, - selection: String, - state: &State<AppState>, -) -> Result<(ContentType, ReaderStream![DuplexStream]), MyError> { - let (a, b) = duplex(1024); - let path = path.to_str().unwrap().to_string(); - let item = state - .library - .nested(&path) - .context("retrieving library node")? - .get_item()?; - let remuxer = state.remuxer.clone(); - let selection = selection - .split(",") - .map(|e| e.parse().map_err(|_| anyhow!("invalid number"))) - .into_iter() - .collect::<Result<Vec<_>, _>>()?; - - let b = SyncIoBridge::new(b); - tokio::task::spawn_blocking(move || { - if let Err(e) = remuxer.generate_into( - b, - 0, - item.fs_path.parent().unwrap().to_path_buf(), - item.data.clone(), - selection, - ) { - warn!("stream stopped: {e}") - } - }); - debug!("starting stream"); - Ok((ContentType::WEBM, ReaderStream::one(a))) -} +pub mod routes; pub struct AppState { pub database: Database, @@ -81,15 +27,5 @@ fn rocket() -> _ { library: Library::open(&lib_path).unwrap(), database: Database::open(&db_path).unwrap(), }; - - rocket::build().manage(state).mount( - "/", - routes![ - page_home, - page_library_node, - assets_style, - assets_font, - stream - ], - ) + build_rocket(state) } |