diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-11 18:14:24 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-11 18:14:24 +0100 |
commit | 0737008c5c649f0ce33719fb9126b284d76c9807 (patch) | |
tree | 55f3bfe31079269cdec2c00b7be0c29c62c792dd | |
parent | 948700d35f0eddbc2e0fd29548991e687362983d (diff) | |
download | jellything-0737008c5c649f0ce33719fb9126b284d76c9807.tar jellything-0737008c5c649f0ce33719fb9126b284d76c9807.tar.bz2 jellything-0737008c5c649f0ce33719fb9126b284d76c9807.tar.zst |
modularize!
-rw-r--r-- | Cargo.lock | 90 | ||||
-rw-r--r-- | Cargo.toml | 2 | ||||
-rw-r--r-- | common/Cargo.toml | 7 | ||||
-rw-r--r-- | common/src/lib.rs | 39 | ||||
-rw-r--r-- | remuxer/Cargo.toml | 11 | ||||
-rw-r--r-- | remuxer/src/lib.rs | 9 | ||||
-rw-r--r-- | server/Cargo.toml | 2 | ||||
-rw-r--r-- | server/src/library.rs | 18 | ||||
-rw-r--r-- | server/src/main.rs | 1 | ||||
-rw-r--r-- | server/src/metadata.rs | 11 | ||||
-rw-r--r-- | tools/Cargo.toml | 16 | ||||
-rw-r--r-- | tools/src/bin/gen_meta.rs | 4 |
12 files changed, 191 insertions, 19 deletions
@@ -313,6 +313,35 @@ dependencies = [ ] [[package]] +name = "ebml-iterable" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b31d12a9ba3afb88aeef98a2d2547d26d0668b5a53f1f0452fc950a05873c078" +dependencies = [ + "ebml-iterable-specification", + "ebml-iterable-specification-derive", + "futures", +] + +[[package]] +name = "ebml-iterable-specification" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a991c9097272fc3be18a90f467da4d8148e65a9f83f4c61eddc60a6924ce1fc4" + +[[package]] +name = "ebml-iterable-specification-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bc71e6e4c22b398a106956e6b29839a6e9b5e9d0a902f98e90d2c59855316ed" +dependencies = [ + "ebml-iterable-specification", + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "either" version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -414,6 +443,7 @@ checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0" dependencies = [ "futures-channel", "futures-core", + "futures-executor", "futures-io", "futures-sink", "futures-task", @@ -437,12 +467,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" [[package]] +name = "futures-executor" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] name = "futures-io" version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" [[package]] +name = "futures-macro" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] name = "futures-sink" version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -463,6 +515,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-io", + "futures-macro", "futures-sink", "futures-task", "memchr", @@ -719,12 +772,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] +name = "jellycommon" +version = "0.1.0" +dependencies = [ + "serde", +] + +[[package]] +name = "jellyremuxer" +version = "0.1.0" +dependencies = [ + "anyhow", + "jellycommon", + "log", + "webm-iterable", +] + +[[package]] name = "jellything" version = "0.1.0" dependencies = [ "anyhow", "chashmap", "env_logger", + "jellycommon", "log", "markup", "rocket", @@ -736,6 +807,16 @@ dependencies = [ ] [[package]] +name = "jellytools" +version = "0.1.0" +dependencies = [ + "anyhow", + "jellycommon", + "log", + "webm-iterable", +] + +[[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1816,6 +1897,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] +name = "webm-iterable" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7896d663d20a8ca015e3ace5dc58d38b2b9924cc34affa6c75be031f3bbf07" +dependencies = [ + "ebml-iterable", +] + +[[package]] name = "winapi" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1,2 +1,2 @@ [workspace] -members = ["server"] +members = ["server", "remuxer", "common", "tools"] diff --git a/common/Cargo.toml b/common/Cargo.toml new file mode 100644 index 0000000..de089d6 --- /dev/null +++ b/common/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "jellycommon" +version = "0.1.0" +edition = "2021" + +[dependencies] +serde = { version = "1.0.152", features = ["derive"] } diff --git a/common/src/lib.rs b/common/src/lib.rs new file mode 100644 index 0000000..6c8bceb --- /dev/null +++ b/common/src/lib.rs @@ -0,0 +1,39 @@ +use std::{collections::BTreeMap, path::PathBuf}; + +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct DirectoryInfo { + pub name: String, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct ItemInfo { + pub title: String, + pub source: Vec<Source>, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub struct Source { + file: PathBuf, + tracks: BTreeMap<u64, SourceTrack>, +} + +#[derive(Debug, Clone, Deserialize, Serialize)] +pub enum SourceTrack { + Video { + name: String, + codec: String, + width: usize, + height: usize, + }, + Audio { + channels: usize, + codec: String, + sample_rate: f64, + language: String, + }, + Subtitles { + language: String, + }, +} diff --git a/remuxer/Cargo.toml b/remuxer/Cargo.toml new file mode 100644 index 0000000..4870c25 --- /dev/null +++ b/remuxer/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "jellyremuxer" +version = "0.1.0" +edition = "2021" + +[dependencies] +jellycommon = { path = "../common" } + +webm-iterable = "0.4.2" +log = "0.4.17" +anyhow = "1.0.68" diff --git a/remuxer/src/lib.rs b/remuxer/src/lib.rs new file mode 100644 index 0000000..69a6f4b --- /dev/null +++ b/remuxer/src/lib.rs @@ -0,0 +1,9 @@ +use std::path::PathBuf; + +use jellycommon::Source; + +pub struct RemuxerContext {} + +impl RemuxerContext { + pub fn generate(&self, path_base: PathBuf, source: Source) {} +} diff --git a/server/Cargo.toml b/server/Cargo.toml index 70b8752..4128b40 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -4,6 +4,8 @@ version = "0.1.0" edition = "2021" [dependencies] +jellycommon = { path = "../common" } + serde = { version = "1.0.152", features = ["derive"] } serde_json = "1.0.91" diff --git a/server/src/library.rs b/server/src/library.rs index 0c42a73..f33508f 100644 --- a/server/src/library.rs +++ b/server/src/library.rs @@ -1,5 +1,5 @@ -use crate::metadata::{DirectoryInfo, ItemInfo}; use anyhow::{anyhow, bail, Context, Ok}; +use jellycommon::{DirectoryInfo, ItemInfo}; use std::{ffi::OsStr, fs::File, path::PathBuf, sync::Arc}; pub struct Library { @@ -84,8 +84,16 @@ impl Node { let children = path .read_dir()? - .map(|e| e.unwrap().path()) - .filter(|e| e.extension() != Some(OsStr::new("json"))) + .filter_map(|e| { + let e = e.unwrap(); + if e.path().extension() == Some(OsStr::new("metadata.json")) + || e.metadata().unwrap().is_dir() + { + Some(e.path()) + } else { + None + } + }) .map(|e| { Node::from_path(e.clone(), lib_path.clone(), false) .context(format!("loading {e:?}")) @@ -101,9 +109,7 @@ impl Node { })) .into()) } else if path.is_file() { - let mpath = path.clone().with_extension("metadata.json"); - let datafile = File::open(mpath.clone()) - .context(format!("metadata missing, tried path {mpath:?}"))?; + let datafile = File::open(path.clone()).context("cant load metadata")?; let data: ItemInfo = serde_json::from_reader(datafile).context("invalid metadata")?; let identifier = path .with_extension("") diff --git a/server/src/main.rs b/server/src/main.rs index b7a3249..855e278 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -10,7 +10,6 @@ use std::fs::read_to_string; pub mod database; pub mod frontend; pub mod library; -pub mod metadata; #[get("/assets/style.css")] async fn assets_style() -> (ContentType, String) { diff --git a/server/src/metadata.rs b/server/src/metadata.rs deleted file mode 100644 index ff45af2..0000000 --- a/server/src/metadata.rs +++ /dev/null @@ -1,11 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct DirectoryInfo { - pub name: String, -} - -#[derive(Debug, Clone, Deserialize, Serialize)] -pub struct ItemInfo { - pub title: String, -} diff --git a/tools/Cargo.toml b/tools/Cargo.toml new file mode 100644 index 0000000..239aae8 --- /dev/null +++ b/tools/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "jellytools" +version = "0.1.0" +edition = "2021" + +[dependencies] +jellycommon = { path = "../common" } + +webm-iterable = "0.4.2" +log = "0.4.17" +anyhow = "1.0.68" + + +[[bin]] +path = "src/bin/gen_meta.rs" +name = "jellything-gen-meta" diff --git a/tools/src/bin/gen_meta.rs b/tools/src/bin/gen_meta.rs new file mode 100644 index 0000000..3783460 --- /dev/null +++ b/tools/src/bin/gen_meta.rs @@ -0,0 +1,4 @@ + +fn main() { + +} |