aboutsummaryrefslogtreecommitdiff
path: root/import
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-02-05 21:17:54 +0100
committermetamuffin <metamuffin@disroot.org>2026-02-05 21:17:54 +0100
commit8ec94477fb5efae62dcfee31cede87eb400bf02d (patch)
treee36ec2227076a8857495647f6abcb9883f154d6f /import
parent65ca3f3450d0067668111f6e13cc3089768c9efe (diff)
downloadjellything-8ec94477fb5efae62dcfee31cede87eb400bf02d.tar
jellything-8ec94477fb5efae62dcfee31cede87eb400bf02d.tar.bz2
jellything-8ec94477fb5efae62dcfee31cede87eb400bf02d.tar.zst
migrate import to new db trait
Diffstat (limited to 'import')
-rw-r--r--import/src/lib.rs82
-rw-r--r--import/src/plugins/acoustid.rs6
-rw-r--r--import/src/plugins/infojson.rs10
-rw-r--r--import/src/plugins/media_info.rs8
-rw-r--r--import/src/plugins/misc.rs6
-rw-r--r--import/src/plugins/mod.rs2
-rw-r--r--import/src/plugins/tags.rs2
-rw-r--r--import/src/plugins/tmdb.rs10
-rw-r--r--import/src/plugins/trakt.rs10
9 files changed, 57 insertions, 79 deletions
diff --git a/import/src/lib.rs b/import/src/lib.rs
index bb401d3..4ad7f25 100644
--- a/import/src/lib.rs
+++ b/import/src/lib.rs
@@ -18,11 +18,7 @@ use jellycommon::{
jellyobject::{self, ObjectBuffer, Path as TagPath, fields},
*,
};
-use jellydb::{
- kv::Store,
- query::{Filter, Query, Sort},
- table::{RowNum, Table},
-};
+use jellydb::{Database, Filter, Query, RowNum, Sort};
use jellyremuxer::{
demuxers::create_demuxer_autodetect,
matroska::{self, AttachedFile, Segment},
@@ -86,9 +82,7 @@ pub fn is_importing() -> bool {
#[derive(Clone)]
pub struct ImportConfig {
pub cache: Arc<Cache>,
- pub db: Arc<dyn Store>,
- pub nodes: Arc<Table>,
- pub import_meta: Arc<Table>,
+ pub db: Arc<dyn Database>,
}
fields! {
@@ -110,9 +104,9 @@ impl ImportConfig {
mut update: impl FnMut(ObjectBuffer) -> ObjectBuffer,
) -> Result<()> {
self.db.transaction(&mut |txn| {
- let ob_before = self.nodes.get(txn, node)?.unwrap();
+ let ob_before = txn.get(node)?.unwrap();
let ob_after = update(ob_before);
- self.nodes.update(txn, node, ob_after)?;
+ txn.update(node, ob_after)?;
Ok(())
})?;
Ok(())
@@ -124,25 +118,23 @@ impl ImportConfig {
) -> Result<RowNum> {
let mut row = 0;
self.db.transaction(&mut |txn| {
- row = match self.nodes.query_single(txn, node_slug_query(slug))? {
+ row = match txn.query_single(node_slug_query(slug))? {
Some(r) => r,
- None => self
- .nodes
- .insert(txn, ObjectBuffer::new(&mut [(NO_SLUG.0, &slug)]))?,
+ None => txn.insert(ObjectBuffer::new(&mut [(NO_SLUG.0, &slug)]))?,
};
- let node = self.nodes.get(txn, row)?.unwrap();
+ let node = txn.get(row)?.unwrap();
let node = update(node);
let node = node.as_object().insert(NO_SLUG, slug);
- self.nodes.update(txn, row, node)?;
+ txn.update(row, node)?;
Ok(())
})?;
Ok(row)
}
pub fn get_node(&self, node: RowNum) -> Result<Option<ObjectBuffer>> {
let mut buf = None;
- self.db.read_transaction(&mut |txn| {
- buf = self.nodes.get(txn, node)?;
+ self.db.transaction(&mut |txn| {
+ buf = txn.get(node)?;
Ok(())
})?;
Ok(buf)
@@ -420,8 +412,8 @@ fn process_node(
node: RowNum,
) {
let mut slug = String::new();
- reporting::catch(dba.db.read_transaction(&mut |txn| {
- let no = dba.nodes.get(txn, node)?.unwrap();
+ reporting::catch(dba.db.transaction(&mut |txn| {
+ let no = txn.get(node)?.unwrap();
if let Some(s) = no.as_object().get(NO_SLUG) {
slug = s.to_owned();
}
@@ -452,20 +444,17 @@ fn compare_mtime(dba: &ImportConfig, path: &Path) -> Result<bool> {
let meta = path.metadata()?;
let mtime = meta.modified()?.duration_since(UNIX_EPOCH)?.as_secs();
let mut was_changed = false;
- dba.db.read_transaction(&mut |txn| {
- match dba.import_meta.query_single(
- txn,
- Query {
- filter: Filter::Match(
- TagPath(vec![IM_PATH.0]),
- path.as_os_str().as_encoded_bytes().to_vec(),
- ),
- sort: Sort::None,
- },
- )? {
+ dba.db.transaction(&mut |txn| {
+ match txn.query_single(Query {
+ filter: Filter::Match(
+ TagPath(vec![IM_PATH.0]),
+ path.as_os_str().as_encoded_bytes().to_vec(),
+ ),
+ sort: Sort::None,
+ })? {
None => was_changed = true,
Some(row) => {
- let meta = dba.import_meta.get(txn, row)?.unwrap();
+ let meta = txn.get(row)?.unwrap();
let prev_mtime = meta.as_object().get(IM_MTIME).unwrap_or_default();
was_changed = mtime > prev_mtime
}
@@ -479,26 +468,23 @@ fn update_mtime(dba: &ImportConfig, path: &Path) -> Result<()> {
let meta = path.metadata()?;
let mtime = meta.modified()?.duration_since(UNIX_EPOCH)?.as_secs();
dba.db.transaction(&mut |txn| {
- let row = match dba.import_meta.query_single(
- txn,
- Query {
- filter: Filter::Match(
- TagPath(vec![IM_PATH.0]),
- path.as_os_str().as_encoded_bytes().to_vec(),
- ),
- sort: Sort::None,
- },
- )? {
+ let row = match txn.query_single(Query {
+ filter: Filter::Match(
+ TagPath(vec![IM_PATH.0]),
+ path.as_os_str().as_encoded_bytes().to_vec(),
+ ),
+ sort: Sort::None,
+ })? {
Some(row) => row,
- None => dba.import_meta.insert(
- txn,
- ObjectBuffer::new(&mut [(IM_PATH.0, &path.as_os_str().as_encoded_bytes())]),
- )?,
+ None => txn.insert(ObjectBuffer::new(&mut [(
+ IM_PATH.0,
+ &path.as_os_str().as_encoded_bytes(),
+ )]))?,
};
- let mut ob = dba.import_meta.get(txn, row)?.unwrap();
+ let mut ob = txn.get(row)?.unwrap();
ob = ob.as_object().insert(IM_MTIME, mtime);
- dba.import_meta.update(txn, row, ob)?;
+ txn.update(row, ob)?;
Ok(())
})?;
diff --git a/import/src/plugins/acoustid.rs b/import/src/plugins/acoustid.rs
index c184468..81bf359 100644
--- a/import/src/plugins/acoustid.rs
+++ b/import/src/plugins/acoustid.rs
@@ -12,7 +12,7 @@ use jellycache::{Cache, HashKey};
use jellycommon::{
IDENT_ACOUST_ID_TRACK, IDENT_MUSICBRAINZ_RECORDING, NO_IDENTIFIERS, jellyobject::Object,
};
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use jellyremuxer::matroska::Segment;
use log::info;
use reqwest::{
@@ -187,7 +187,7 @@ impl ImportPlugin for AcoustID {
if let Some((atid, mbid)) = self.get_atid_mbid(&ct.dba.cache, &fp, &ct.rt)? {
ct.dba.db.transaction(&mut |txn| {
- let ob = ct.dba.nodes.get(txn, node)?.unwrap();
+ let ob = txn.get(node)?.unwrap();
let ob = ob.as_object();
let ob = ob.insert(
NO_IDENTIFIERS,
@@ -198,7 +198,7 @@ impl ImportPlugin for AcoustID {
.insert(IDENT_MUSICBRAINZ_RECORDING, &mbid)
.as_object(),
);
- ct.dba.nodes.update(txn, node, ob)?;
+ txn.update(node, ob)?;
Ok(())
});
};
diff --git a/import/src/plugins/infojson.rs b/import/src/plugins/infojson.rs
index e03a5f7..3a48ce8 100644
--- a/import/src/plugins/infojson.rs
+++ b/import/src/plugins/infojson.rs
@@ -7,7 +7,7 @@ use crate::plugins::{ImportPlugin, PluginContext, PluginInfo};
use anyhow::{Context, Result, anyhow};
use chrono::{Utc, format::Parsed};
use jellycommon::*;
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use jellyremuxer::matroska::{AttachedFile, Segment};
use log::info;
use serde::{Deserialize, Serialize};
@@ -176,7 +176,7 @@ impl ImportPlugin for Infojson {
let title = clean_uploader_name(&data.title);
ct.dba.db.transaction(&mut |txn| {
- let mut node = ct.dba.nodes.get(txn, parent)?.unwrap();
+ let mut node = txn.get(parent)?.unwrap();
node = node.as_object().insert(NO_KIND, KIND_CHANNEL);
node = node.as_object().insert(NO_TITLE, title);
if let Some(cid) = &data.channel_id {
@@ -198,7 +198,7 @@ impl ImportPlugin for Infojson {
});
}
- ct.dba.nodes.update(txn, parent, node)
+ txn.update(parent, node)
})
}
@@ -237,7 +237,7 @@ impl ImportPlugin for Infojson {
};
ct.dba.db.transaction(&mut |txn| {
- let mut node = ct.dba.nodes.get(txn, row)?.unwrap();
+ let mut node = txn.get(row)?.unwrap();
node = node.as_object().insert(NO_KIND, kind);
node = node.as_object().insert(NO_TITLE, &infojson.title);
if let Some(title) = &infojson.alt_title
@@ -290,7 +290,7 @@ impl ImportPlugin for Infojson {
_ => (),
};
- ct.dba.nodes.update(txn, row, node)
+ txn.update(row, node)
})?;
}
Ok(())
diff --git a/import/src/plugins/media_info.rs b/import/src/plugins/media_info.rs
index f1f56bb..05beb8f 100644
--- a/import/src/plugins/media_info.rs
+++ b/import/src/plugins/media_info.rs
@@ -4,13 +4,13 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
-use crate::plugins::{PluginContext, ImportPlugin, PluginInfo};
+use crate::plugins::{ImportPlugin, PluginContext, PluginInfo};
use anyhow::Result;
use jellycommon::{
jellyobject::{Object, ObjectBuffer},
*,
};
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use jellyremuxer::matroska::{Segment, TrackType};
use std::path::Path;
@@ -26,7 +26,7 @@ impl ImportPlugin for MediaInfo {
fn media(&self, ct: &PluginContext, row: RowNum, path: &Path, seg: &Segment) -> Result<()> {
let size = path.metadata()?.len();
ct.dba.db.transaction(&mut |txn| {
- let mut node = ct.dba.nodes.get(txn, row)?.unwrap();
+ let mut node = txn.get(row)?.unwrap();
if let Some(tracks) = &seg.tracks {
node = node.as_object().extend_object(
NO_TRACK,
@@ -109,7 +109,7 @@ impl ImportPlugin for MediaInfo {
);
node = node.as_object().insert(NO_STORAGE_SIZE, size);
- ct.dba.nodes.update(txn, row, node)?;
+ txn.update(row, node)?;
Ok(())
})
diff --git a/import/src/plugins/misc.rs b/import/src/plugins/misc.rs
index 6a8caa6..d929935 100644
--- a/import/src/plugins/misc.rs
+++ b/import/src/plugins/misc.rs
@@ -7,7 +7,7 @@ use crate::plugins::{ImportPlugin, PluginContext, PluginInfo};
use anyhow::{Context, Result, bail};
use jellycache::HashKey;
use jellycommon::{jellyobject::inspect::Inspector, *};
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use jellyremuxer::matroska::{AttachedFile, Segment};
use log::info;
use regex::Regex;
@@ -43,11 +43,11 @@ impl ImportPlugin for ImageFiles {
},
)?;
ct.dba.db.transaction(&mut |txn| {
- let mut node = ct.dba.nodes.get(txn, row)?.unwrap();
+ let mut node = txn.get(row)?.unwrap();
node = node
.as_object()
.update(NO_PICTURES, |picts| picts.insert(slot, &asset));
- ct.dba.nodes.update(txn, row, node)?;
+ txn.update(row, node)?;
Ok(())
})?;
Ok(())
diff --git a/import/src/plugins/mod.rs b/import/src/plugins/mod.rs
index d70c6e1..b351a17 100644
--- a/import/src/plugins/mod.rs
+++ b/import/src/plugins/mod.rs
@@ -17,7 +17,7 @@ pub mod wikimedia_commons;
use crate::{ApiSecrets, ImportConfig, InheritedFlags};
use anyhow::Result;
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use jellyremuxer::matroska::Segment;
use std::{collections::HashSet, path::Path, sync::Mutex};
use tokio::runtime::Handle;
diff --git a/import/src/plugins/tags.rs b/import/src/plugins/tags.rs
index e0652d4..d1e6a81 100644
--- a/import/src/plugins/tags.rs
+++ b/import/src/plugins/tags.rs
@@ -7,7 +7,7 @@
use crate::plugins::{PluginContext, ImportPlugin, PluginInfo};
use anyhow::Result;
use jellycommon::*;
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use jellyremuxer::matroska::Segment;
use std::{collections::HashMap, path::Path};
diff --git a/import/src/plugins/tmdb.rs b/import/src/plugins/tmdb.rs
index ea32c40..e9e92d4 100644
--- a/import/src/plugins/tmdb.rs
+++ b/import/src/plugins/tmdb.rs
@@ -11,7 +11,7 @@ use anyhow::{Context, Result, anyhow, bail};
use chrono::{Utc, format::Parsed};
use jellycache::{Cache, EscapeKey, HashKey};
use jellycommon::*;
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use log::info;
use reqwest::{
Client, ClientBuilder,
@@ -268,13 +268,9 @@ impl Tmdb {
return Ok(());
};
let mut series_id = None;
- ct.dba.db.read_transaction(&mut |txn| {
+ ct.dba.db.transaction(&mut |txn| {
for parent in data.iter(NO_PARENT) {
- let parent_data = ct
- .dba
- .nodes
- .get(txn, parent)?
- .ok_or(anyhow!("parent missing"))?;
+ let parent_data = txn.get(parent)?.ok_or(anyhow!("parent missing"))?;
if let Some(id) = parent_data
.as_object()
.get(NO_IDENTIFIERS)
diff --git a/import/src/plugins/trakt.rs b/import/src/plugins/trakt.rs
index 2cb063d..ebbe879 100644
--- a/import/src/plugins/trakt.rs
+++ b/import/src/plugins/trakt.rs
@@ -10,7 +10,7 @@ use crate::{
use anyhow::{Context, Result, anyhow, bail};
use jellycache::{Cache, HashKey};
use jellycommon::{jellyobject::Tag, *};
-use jellydb::table::RowNum;
+use jellydb::RowNum;
use log::info;
use reqwest::{
Client, ClientBuilder,
@@ -527,13 +527,9 @@ impl Trakt {
return Ok(());
};
let mut show_id = None;
- ct.dba.db.read_transaction(&mut |txn| {
+ ct.dba.db.transaction(&mut |txn| {
for parent in node_data.iter(NO_PARENT) {
- let parent_data = ct
- .dba
- .nodes
- .get(txn, parent)?
- .ok_or(anyhow!("parent missing"))?;
+ let parent_data = txn.get(parent)?.ok_or(anyhow!("parent missing"))?;
if let Some(id) = parent_data
.as_object()
.get(NO_IDENTIFIERS)