diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-05 21:17:54 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-05 21:17:54 +0100 |
| commit | 8ec94477fb5efae62dcfee31cede87eb400bf02d (patch) | |
| tree | e36ec2227076a8857495647f6abcb9883f154d6f /import | |
| parent | 65ca3f3450d0067668111f6e13cc3089768c9efe (diff) | |
| download | jellything-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.rs | 82 | ||||
| -rw-r--r-- | import/src/plugins/acoustid.rs | 6 | ||||
| -rw-r--r-- | import/src/plugins/infojson.rs | 10 | ||||
| -rw-r--r-- | import/src/plugins/media_info.rs | 8 | ||||
| -rw-r--r-- | import/src/plugins/misc.rs | 6 | ||||
| -rw-r--r-- | import/src/plugins/mod.rs | 2 | ||||
| -rw-r--r-- | import/src/plugins/tags.rs | 2 | ||||
| -rw-r--r-- | import/src/plugins/tmdb.rs | 10 | ||||
| -rw-r--r-- | import/src/plugins/trakt.rs | 10 |
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) |