diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-12-10 17:52:41 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-12-10 17:52:41 +0100 |
| commit | e4f865e9da9d6660399e22a6fbeb5b84a749b07a (patch) | |
| tree | 4af69589e8850d8a2b0c88a10e43efe8c79cb8dc /import/src/plugins/mod.rs | |
| parent | a0cfd77b4d19c43a28c4d82072e6ff136e336af3 (diff) | |
| download | jellything-e4f865e9da9d6660399e22a6fbeb5b84a749b07a.tar jellything-e4f865e9da9d6660399e22a6fbeb5b84a749b07a.tar.bz2 jellything-e4f865e9da9d6660399e22a6fbeb5b84a749b07a.tar.zst | |
refactor import plugins part 2
Diffstat (limited to 'import/src/plugins/mod.rs')
| -rw-r--r-- | import/src/plugins/mod.rs | 53 |
1 files changed, 46 insertions, 7 deletions
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<Box<dyn ImportPlugin>> { + let mut plugins = Vec::<Box<dyn ImportPlugin>>::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 +} |