diff options
Diffstat (limited to 'import/src/lib.rs')
| -rw-r--r-- | import/src/lib.rs | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/import/src/lib.rs b/import/src/lib.rs index b31d356..7e402be 100644 --- a/import/src/lib.rs +++ b/import/src/lib.rs @@ -8,15 +8,17 @@ pub mod helpers; pub mod plugins; pub mod reporting; +pub mod source_rank; -use crate::plugins::{ - ImportPlugin, PluginContext, infojson::is_info_json, init_plugins, misc::is_cover, +use crate::{ + plugins::{ImportPlugin, PluginContext, infojson::is_info_json, init_plugins, misc::is_cover}, + source_rank::{ImportSource, SourceRanks}, }; use anyhow::{Context, Result, anyhow}; use jellycache::{Cache, HashKey}; use jellycommon::{ internal::{IM_MTIME, IM_PATH}, - jellyobject::{self, ObjectBuffer, Path as TagPath}, + jellyobject::{self, ObjectBuffer, Path as TagPath, Tag}, *, }; use jellydb::{Database, Filter, Query, RowNum, Sort}; @@ -153,6 +155,7 @@ pub async fn import_wrap(ic: ImportConfig, incremental: bool) -> Result<()> { fn import(ic: ImportConfig, rt: &Handle, incremental: bool) -> Result<()> { reporting::set_stage(format!("Initializing Plugins"), 0); let plugins = init_plugins(&ic.config.api); + let ranks = SourceRanks::new(); reporting::set_stage(format!("Indexing files"), 0); let files = Mutex::new(Vec::new()); @@ -171,7 +174,7 @@ fn import(ic: ImportConfig, rt: &Handle, incremental: bool) -> Result<()> { reporting::set_stage(format!("Importing files"), files.len()); files.into_par_iter().for_each(|(path, parent, iflags)| { reporting::set_task(format!("unknown: {path:?}")); - import_file(&ic, &rt, &nodes, &plugins, &path, parent, iflags); + import_file(&ic, &rt, &ranks, &nodes, &plugins, &path, parent, iflags); reporting::inc_finished(); reporting::set_task("idle".to_owned()); }); @@ -187,7 +190,7 @@ fn import(ic: ImportConfig, rt: &Handle, incremental: bool) -> Result<()> { swap(nodes.get_mut().unwrap(), &mut cur_nodes); cur_nodes.into_par_iter().for_each(|node| { reporting::set_task(format!("unknown: {node}")); - process_node(&ic, &rt, &plugins, &nodes, node); + process_node(&ic, &rt, &ranks, &plugins, &nodes, node); reporting::inc_finished(); reporting::set_task("idle".to_owned()); }); @@ -274,6 +277,7 @@ fn import_traverse( fn import_file( ic: &ImportConfig, rt: &Handle, + ranks: &SourceRanks, pending_nodes: &Mutex<HashSet<RowNum>>, plugins: &[Box<dyn ImportPlugin>], path: &Path, @@ -281,9 +285,13 @@ fn import_file( iflags: InheritedFlags, ) { let mut all_ok = true; - let ct = PluginContext { + let mut ct = PluginContext { ic, rt, + is: ImportSource { + tag: Tag::new(b"xxxx"), + ranks, + }, iflags, pending_nodes, }; @@ -299,6 +307,7 @@ fn import_file( for p in plugins { let inf = p.info(); if inf.handle_instruction { + ct.is.tag = inf.tag; reporting::set_task(format!("{}(inst): {path:?}", inf.name)); all_ok &= reporting::catch( p.instruction(&ct, parent, line) @@ -344,6 +353,7 @@ fn import_file( for p in plugins { let inf = p.info(); if inf.handle_instruction { + ct.is.tag = inf.tag; reporting::set_task(format!("{}(inst): {path:?}", inf.name)); all_ok &= reporting::catch( p.instruction(&ct, row, line) @@ -363,6 +373,7 @@ fn import_file( for p in plugins { let inf = p.info(); if inf.handle_media { + ct.is.tag = inf.tag; reporting::set_task(format!("{}(media): {path:?}", inf.name)); all_ok &= reporting::catch( p.media(&ct, row, path, &seg) @@ -375,6 +386,7 @@ fn import_file( for p in plugins { let inf = p.info(); if inf.handle_file { + ct.is.tag = inf.tag; reporting::set_task(format!("{}(file): {path:?}", inf.name)); all_ok &= reporting::catch( p.file(&ct, parent, path) @@ -393,6 +405,7 @@ fn import_file( fn process_node( dba: &ImportConfig, rt: &Handle, + ranks: &SourceRanks, plugins: &[Box<dyn ImportPlugin>], pending_nodes: &Mutex<HashSet<RowNum>>, node: RowNum, @@ -414,6 +427,10 @@ fn process_node( p.process( &PluginContext { ic: dba, + is: ImportSource { + tag: inf.tag, + ranks, + }, rt, iflags: InheritedFlags::default(), pending_nodes, |