aboutsummaryrefslogtreecommitdiff
path: root/server/src/main.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-18 16:16:03 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-18 16:16:03 +0100
commit46ef75431e1d34c63a690726a8ef584d175ddd30 (patch)
treedf36a2bfb9fe3e19ce9f76665b4770063a089423 /server/src/main.rs
parent5aa557e864bd2cf940e7164b7568e7e545817306 (diff)
downloadjellything-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.rs74
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)
}