diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-12-11 01:20:17 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-12-11 01:20:17 +0100 |
| commit | 6e5f6d9b9c6fedb4ab80190c156595d321d33bbf (patch) | |
| tree | b6c2140e744fc3018ad08975afefad40386ebbc6 /import/src/plugins | |
| parent | e4f865e9da9d6660399e22a6fbeb5b84a749b07a (diff) | |
| download | jellything-6e5f6d9b9c6fedb4ab80190c156595d321d33bbf.tar jellything-6e5f6d9b9c6fedb4ab80190c156595d321d33bbf.tar.bz2 jellything-6e5f6d9b9c6fedb4ab80190c156595d321d33bbf.tar.zst | |
refactor import plugins part 3
Diffstat (limited to 'import/src/plugins')
| -rw-r--r-- | import/src/plugins/acoustid.rs | 3 | ||||
| -rw-r--r-- | import/src/plugins/misc.rs | 37 | ||||
| -rw-r--r-- | import/src/plugins/mod.rs | 20 | ||||
| -rw-r--r-- | import/src/plugins/trakt.rs | 2 |
4 files changed, 50 insertions, 12 deletions
diff --git a/import/src/plugins/acoustid.rs b/import/src/plugins/acoustid.rs index bf07f90..38e818c 100644 --- a/import/src/plugins/acoustid.rs +++ b/import/src/plugins/acoustid.rs @@ -167,6 +167,9 @@ impl ImportPlugin for AcoustID { } } fn media(&self, ct: &ImportContext, node: NodeID, path: &Path, _seg: &Segment) -> Result<()> { + if !ct.iflags.use_acoustid { + return Ok(()); + } let fp = acoustid_fingerprint(path)?; if let Some((atid, mbid)) = self.get_atid_mbid(&fp, &ct.rt)? { ct.db.update_node_init(node, |n| { diff --git a/import/src/plugins/misc.rs b/import/src/plugins/misc.rs index 6f2c18e..8d7028c 100644 --- a/import/src/plugins/misc.rs +++ b/import/src/plugins/misc.rs @@ -4,15 +4,17 @@ Copyright (C) 2025 metamuffin <metamuffin.org> */ use crate::plugins::{ImportContext, ImportPlugin, PluginInfo}; -use anyhow::{Result, bail}; +use anyhow::{Context, Result, bail}; use jellycache::{HashKey, cache_store}; use jellycommon::{Asset, NodeID, NodeKind, PictureSlot, Visibility}; use jellyremuxer::matroska::{AttachedFile, Segment}; use log::info; +use regex::Regex; use std::{ fs::{File, read_to_string}, io::Read, path::Path, + sync::LazyLock, }; pub struct ImageFiles; @@ -152,3 +154,36 @@ impl ImportPlugin for Children { Ok(()) } } + +static RE_EPISODE_FILENAME: LazyLock<Regex> = + LazyLock::new(|| Regex::new(r#"([sS](?<season>\d+))?([eE](?<episode>\d+))( (.+))?"#).unwrap()); + +pub struct EpisodeIndex; +impl ImportPlugin for EpisodeIndex { + fn info(&self) -> PluginInfo { + PluginInfo { + name: "episode-info", + handle_media: true, + ..Default::default() + } + } + fn media(&self, ct: &ImportContext, node: NodeID, path: &Path, _seg: &Segment) -> Result<()> { + let filename = path.file_name().unwrap().to_string_lossy(); + if let Some(cap) = RE_EPISODE_FILENAME.captures(&filename) { + if let Some(episode) = cap.name("episode").map(|m| m.as_str()) { + let season = cap.name("season").map(|m| m.as_str()); + let episode = episode.parse::<usize>().context("parse episode num")?; + let season = season + .unwrap_or("1") + .parse::<usize>() + .context("parse season num")?; + + ct.db.update_node_init(node, |node| { + node.index = Some(episode); + Ok(()) + })?; + } + } + Ok(()) + } +} diff --git a/import/src/plugins/mod.rs b/import/src/plugins/mod.rs index a5cc3dc..cf0da1c 100644 --- a/import/src/plugins/mod.rs +++ b/import/src/plugins/mod.rs @@ -15,6 +15,7 @@ pub mod vgmdb; pub mod wikidata; pub mod wikimedia_commons; +use crate::{ApiSecrets, InheritedFlags}; use anyhow::Result; use jellycommon::NodeID; use jellydb::Database; @@ -22,20 +23,19 @@ use jellyremuxer::matroska::Segment; use std::path::Path; use tokio::runtime::Handle; -use crate::ApiSecrets; - -pub struct ImportContext { - pub db: Database, - pub rt: Handle, +pub struct ImportContext<'a> { + pub db: &'a Database, + pub rt: &'a Handle, + pub iflags: InheritedFlags, } #[derive(Default, Clone, Copy)] pub struct PluginInfo { - name: &'static str, - handle_file: bool, - handle_media: bool, - handle_instruction: bool, - handle_process: bool, + pub name: &'static str, + pub handle_file: bool, + pub handle_media: bool, + pub handle_instruction: bool, + pub handle_process: bool, } pub trait ImportPlugin: Send + Sync { diff --git a/import/src/plugins/trakt.rs b/import/src/plugins/trakt.rs index 6d5b007..c062b01 100644 --- a/import/src/plugins/trakt.rs +++ b/import/src/plugins/trakt.rs @@ -385,7 +385,7 @@ impl Display for TraktKind { impl ImportPlugin for Trakt { fn info(&self) -> PluginInfo { PluginInfo { - name: "takt", + name: "trakt", handle_instruction: true, ..Default::default() } |