aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock90
-rw-r--r--Cargo.toml2
-rw-r--r--common/Cargo.toml7
-rw-r--r--common/src/lib.rs39
-rw-r--r--remuxer/Cargo.toml11
-rw-r--r--remuxer/src/lib.rs9
-rw-r--r--server/Cargo.toml2
-rw-r--r--server/src/library.rs18
-rw-r--r--server/src/main.rs1
-rw-r--r--server/src/metadata.rs11
-rw-r--r--tools/Cargo.toml16
-rw-r--r--tools/src/bin/gen_meta.rs4
12 files changed, 191 insertions, 19 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 1e3c6ab..b6cd2ad 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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"
diff --git a/Cargo.toml b/Cargo.toml
index cae9660..10bb8cd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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() {
+
+}