From e4f865e9da9d6660399e22a6fbeb5b84a749b07a Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 10 Dec 2025 17:52:41 +0100 Subject: refactor import plugins part 2 --- import/src/plugins/mod.rs | 53 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 7 deletions(-) (limited to 'import/src/plugins/mod.rs') diff --git a/import/src/plugins/mod.rs b/import/src/plugins/mod.rs index 47fcfbf..a5cc3dc 100644 --- a/import/src/plugins/mod.rs +++ b/import/src/plugins/mod.rs @@ -5,6 +5,8 @@ */ pub mod acoustid; pub mod infojson; +pub mod media_info; +pub mod misc; pub mod musicbrainz; pub mod tags; pub mod tmdb; @@ -12,23 +14,32 @@ pub mod trakt; pub mod vgmdb; pub mod wikidata; pub mod wikimedia_commons; -pub mod media_info; -pub mod misc; - -use std::path::Path; use anyhow::Result; use jellycommon::NodeID; use jellydb::Database; 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 trait ImportPlugin { +#[derive(Default, Clone, Copy)] +pub struct PluginInfo { + name: &'static str, + handle_file: bool, + handle_media: bool, + handle_instruction: bool, + handle_process: bool, +} + +pub trait ImportPlugin: Send + Sync { + fn info(&self) -> PluginInfo; fn file(&self, ct: &ImportContext, parent: NodeID, path: &Path) -> Result<()> { let _ = (ct, parent, path); Ok(()) @@ -37,12 +48,40 @@ pub trait ImportPlugin { let _ = (ct, node, path, seg); Ok(()) } - fn import_instruction(&self, ct: &ImportContext, node: NodeID, line: &str) -> Result<()> { + fn instruction(&self, ct: &ImportContext, node: NodeID, line: &str) -> Result<()> { let _ = (ct, node, line); Ok(()) } - fn process_node(&self, ct: &ImportContext, node: NodeID) -> Result<()> { + fn process(&self, ct: &ImportContext, node: NodeID) -> Result<()> { let _ = (ct, node); Ok(()) } } + +pub fn init_plugins(secrets: &ApiSecrets) -> Vec> { + let mut plugins = Vec::>::new(); + + plugins.push(Box::new(misc::General)); + plugins.push(Box::new(misc::Children)); + plugins.push(Box::new(misc::ImageAttachments)); + plugins.push(Box::new(misc::ImageFiles)); + plugins.push(Box::new(tags::Tags)); + plugins.push(Box::new(media_info::MediaInfo)); + + if let Some(s) = &secrets.trakt { + plugins.push(Box::new(trakt::Trakt::new(&s))); + } + if let Some(s) = &secrets.tmdb { + plugins.push(Box::new(tmdb::Tmdb::new(&s))); // deps: trakt + } + + if let Some(s) = &secrets.acoustid { + plugins.push(Box::new(acoustid::AcoustID::new(&s))); + } + plugins.push(Box::new(musicbrainz::MusicBrainz::new())); // deps: acoustid + plugins.push(Box::new(wikidata::Wikidata::new())); // deps: musicbrainz + plugins.push(Box::new(wikimedia_commons::WikimediaCommons::new())); // deps: wikidata + plugins.push(Box::new(vgmdb::Vgmdb::new())); // deps: wikidata + + plugins +} -- cgit v1.3