aboutsummaryrefslogtreecommitdiff
path: root/import/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'import/src/lib.rs')
-rw-r--r--import/src/lib.rs29
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,