aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-01-11 23:22:09 +0100
committermetamuffin <metamuffin@disroot.org>2023-01-11 23:22:09 +0100
commitc52ee8ef7391a11ddbe64dacc37666eca9128deb (patch)
tree430ac1d844f6f69fe69b21644d7b7918dffd3a4b /server
parent43e986b5e626b339095c118fa79ba6cd011aeb9f (diff)
downloadjellything-c52ee8ef7391a11ddbe64dacc37666eca9128deb.tar
jellything-c52ee8ef7391a11ddbe64dacc37666eca9128deb.tar.bz2
jellything-c52ee8ef7391a11ddbe64dacc37666eca9128deb.tar.zst
it works!
Diffstat (limited to 'server')
-rw-r--r--server/src/library.rs2
-rw-r--r--server/src/main.rs50
2 files changed, 26 insertions, 26 deletions
diff --git a/server/src/library.rs b/server/src/library.rs
index 4bded8a..a59635b 100644
--- a/server/src/library.rs
+++ b/server/src/library.rs
@@ -93,8 +93,6 @@ impl Node {
.read_dir()?
.filter_map(|e| {
let e = e.unwrap();
- eprintln!("{:?}", e.path());
- eprintln!("{:?}", e.path().extension());
if (e.path().extension() == Some(OsStr::new("json"))
&& e.path().file_name() != Some(OsStr::new("directory.json")))
|| e.metadata().unwrap().is_dir()
diff --git a/server/src/main.rs b/server/src/main.rs
index 3f8d241..5a9c6cf 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -5,10 +5,20 @@ use database::Database;
use frontend::pages::{home::page_home, node::page_library_node};
use jellyremuxer::{RemuxerContext, SendWriter};
use library::Library;
-use log::debug;
-use rocket::{get, http::ContentType, launch, response::stream::ByteStream, routes, State};
+use log::{debug, warn};
+use rocket::{
+ get,
+ http::ContentType,
+ launch,
+ response::stream::{ByteStream, ReaderStream},
+ routes, State,
+};
use std::{fs::read_to_string, sync::Arc};
-use tokio::sync::mpsc;
+use tokio::{
+ io::{duplex, DuplexStream},
+ sync::mpsc,
+};
+use tokio_util::io::SyncIoBridge;
pub mod database;
pub mod frontend;
@@ -30,32 +40,24 @@ async fn assets_style() -> (ContentType, String) {
fn stream(
selection: String,
state: &State<AppState>,
-) -> Result<(ContentType, ByteStream![Vec<u8>]), MyError> {
- let (tx, mut rx) = mpsc::channel(16);
+) -> Result<(ContentType, ReaderStream![DuplexStream]), MyError> {
+ let (a, b) = duplex(8196);
let item = state.library.nested("mili-bento-box-bivouac")?.get_item()?;
- debug!("generating matroska");
let remuxer = state.remuxer.clone();
+
+ let b = SyncIoBridge::new(b);
tokio::task::spawn_blocking(move || {
- remuxer
- .generate_into(
- SendWriter(tx),
- // SyncIoBridge()
- item.fs_path.parent().unwrap().to_path_buf(),
- item.data.clone(),
- selection.split(",").map(|e| e.parse().unwrap()).collect(),
- )
- .unwrap();
+ if let Err(e) = remuxer.generate_into(
+ b,
+ item.fs_path.parent().unwrap().to_path_buf(),
+ item.data.clone(),
+ selection.split(",").map(|e| e.parse().unwrap()).collect(),
+ ) {
+ warn!("stream stopped: {e}")
+ }
});
debug!("starting stream");
- Ok((
- ContentType::WEBM,
- ByteStream! {
- while let Some(x) = rx.recv().await {
- debug!("yield {x:?}");
- yield x
- }
- },
- ))
+ Ok((ContentType::WEBM, ReaderStream::one(a)))
}
pub struct AppState {