aboutsummaryrefslogtreecommitdiff
path: root/import/src/plugins/mod.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-12-10 17:52:41 +0100
committermetamuffin <metamuffin@disroot.org>2025-12-10 17:52:41 +0100
commite4f865e9da9d6660399e22a6fbeb5b84a749b07a (patch)
tree4af69589e8850d8a2b0c88a10e43efe8c79cb8dc /import/src/plugins/mod.rs
parenta0cfd77b4d19c43a28c4d82072e6ff136e336af3 (diff)
downloadjellything-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.rs53
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
+}