aboutsummaryrefslogtreecommitdiff
path: root/import/src/plugins
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-12-11 01:20:17 +0100
committermetamuffin <metamuffin@disroot.org>2025-12-11 01:20:17 +0100
commit6e5f6d9b9c6fedb4ab80190c156595d321d33bbf (patch)
treeb6c2140e744fc3018ad08975afefad40386ebbc6 /import/src/plugins
parente4f865e9da9d6660399e22a6fbeb5b84a749b07a (diff)
downloadjellything-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.rs3
-rw-r--r--import/src/plugins/misc.rs37
-rw-r--r--import/src/plugins/mod.rs20
-rw-r--r--import/src/plugins/trakt.rs2
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()
}