aboutsummaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/src/lib.rs99
1 files changed, 39 insertions, 60 deletions
diff --git a/common/src/lib.rs b/common/src/lib.rs
index fd69d8f..bab1d79 100644
--- a/common/src/lib.rs
+++ b/common/src/lib.rs
@@ -1,69 +1,71 @@
-pub mod api;
pub mod r#impl;
use bincode::{Decode, Encode};
use serde::{Deserialize, Serialize};
-use std::{
- collections::BTreeMap,
- ops::{Deref, DerefMut},
- path::PathBuf,
-};
+use std::path::PathBuf;
#[derive(Debug, Clone, Deserialize, Serialize)]
-pub struct CommmonInfo {
- pub title: String,
- #[serde(default)]
- pub tagline: Option<String>,
- #[serde(default)]
- pub description: Option<String>,
- #[serde(default)]
- pub poster: Option<PathBuf>,
- #[serde(default)]
- pub backdrop: Option<PathBuf>,
- #[serde(default)]
- pub index: Option<usize>,
+pub struct Item {
+ pub public: ItemPublic,
+ pub private: ItemPrivate,
}
+#[rustfmt::skip]
#[derive(Debug, Clone, Deserialize, Serialize)]
-pub struct DirectoryInfo {
- #[serde(flatten)]
- pub common: CommmonInfo,
- #[serde(default)]
- pub kind: DirectoryKind,
+pub struct ItemPrivate {
+ #[serde(default)] pub poster: Option<PathBuf>,
+ #[serde(default)] pub backdrop: Option<PathBuf>,
+ #[serde(default)] pub source: Option<MediaSource>,
}
+#[rustfmt::skip]
#[derive(Debug, Clone, Deserialize, Serialize)]
-pub struct ItemInfo {
- #[serde(flatten)]
- pub common: CommmonInfo,
- pub duration: f64, // in seconds
- pub tracks: BTreeMap<usize, SourceTrack>,
+pub struct ItemPublic {
+ pub kind: ItemKind,
+ pub title: String,
+ #[serde(default)] pub tagline: Option<String>,
+ #[serde(default)] pub description: Option<String>,
+ #[serde(default)] pub poster: Option<PathBuf>,
+ #[serde(default)] pub backdrop: Option<PathBuf>,
+ #[serde(default)] pub index: Option<usize>,
+ #[serde(default)] pub media: Option<MediaInfo>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
-pub enum DirectoryKind {
- Folder,
+pub enum ItemKind {
+ Collection,
Series,
Show,
Season,
}
-impl Default for DirectoryKind {
- fn default() -> Self {
- Self::Folder
- }
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub enum MediaSource {
+ Local { tracks: Vec<LocalTrack> },
+ Remote { host: String, remote_id: String },
}
#[derive(Debug, Clone, Deserialize, Serialize)]
-pub struct SourceTrack {
+pub struct LocalTrack {
pub path: PathBuf,
- pub track_number: u64,
+ pub track: usize,
+ pub codec_private: Option<Vec<u8>>,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct MediaInfo {
+ pub duration: f64, // in seconds
+ pub tracks: Vec<SourceTrack>,
+}
+
+#[derive(Debug, Clone, Deserialize, Serialize)]
+pub struct SourceTrack {
pub kind: SourceTrackKind,
pub name: String,
pub codec: String,
pub language: String,
pub default_duration: Option<u64>,
- pub codec_private: Option<Vec<u8>>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
@@ -93,26 +95,3 @@ pub struct BlockIndex {
pub source_off: usize,
pub size: usize,
}
-
-impl Deref for ItemInfo {
- type Target = CommmonInfo;
- fn deref(&self) -> &Self::Target {
- &self.common
- }
-}
-impl Deref for DirectoryInfo {
- type Target = CommmonInfo;
- fn deref(&self) -> &Self::Target {
- &self.common
- }
-}
-impl DerefMut for ItemInfo {
- fn deref_mut(&mut self) -> &mut Self::Target {
- &mut self.common
- }
-}
-impl DerefMut for DirectoryInfo {
- fn deref_mut(&mut self) -> &mut Self::Target {
- &mut self.common
- }
-}