aboutsummaryrefslogtreecommitdiff
path: root/import/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'import/src/plugins')
-rw-r--r--import/src/plugins/acoustid.rs10
-rw-r--r--import/src/plugins/infojson.rs42
-rw-r--r--import/src/plugins/media_info.rs108
-rw-r--r--import/src/plugins/misc.rs31
-rw-r--r--import/src/plugins/musicbrainz.rs45
-rw-r--r--import/src/plugins/omdb.rs21
-rw-r--r--import/src/plugins/tags.rs10
-rw-r--r--import/src/plugins/tmdb.rs53
-rw-r--r--import/src/plugins/trakt.rs80
-rw-r--r--import/src/plugins/vgmdb.rs8
-rw-r--r--import/src/plugins/wikidata.rs8
11 files changed, 181 insertions, 235 deletions
diff --git a/import/src/plugins/acoustid.rs b/import/src/plugins/acoustid.rs
index e0d1a96..caeeea5 100644
--- a/import/src/plugins/acoustid.rs
+++ b/import/src/plugins/acoustid.rs
@@ -192,10 +192,12 @@ impl ImportPlugin for AcoustID {
};
ct.ic.update_node(node, |node| {
- node.as_object().update(NO_IDENTIFIERS, |ids| {
- ids.insert_s(ct.is, IDENT_ACOUST_ID_TRACK, &atid)
- .as_object()
- .insert_s(ct.is, IDENT_MUSICBRAINZ_RECORDING, &mbid)
+ node.update(NO_IDENTIFIERS, |ids| {
+ ids.insert_s(ct.is, IDENT_ACOUST_ID_TRACK, &atid).insert_s(
+ ct.is,
+ IDENT_MUSICBRAINZ_RECORDING,
+ &mbid,
+ )
})
})?;
diff --git a/import/src/plugins/infojson.rs b/import/src/plugins/infojson.rs
index 8a3ba5d..dfa5279 100644
--- a/import/src/plugins/infojson.rs
+++ b/import/src/plugins/infojson.rs
@@ -181,23 +181,23 @@ impl ImportPlugin for Infojson {
ct.ic.db.transaction(&mut |txn| {
let mut node = txn.get(parent)?.unwrap();
- node = node.as_object().insert_s(ct.is, NO_KIND, KIND_CHANNEL);
- node = node.as_object().insert_s(ct.is, NO_TITLE, title);
+ node = node.insert_s(ct.is, NO_KIND, KIND_CHANNEL);
+ node = node.insert_s(ct.is, NO_TITLE, title);
if let Some(cid) = &data.channel_id {
- node = node.as_object().update(NO_IDENTIFIERS, |ids| {
+ node = node.update(NO_IDENTIFIERS, |ids| {
ids.insert_s(ct.is, IDENT_YOUTUBE_CHANNEL, &cid)
});
}
if let Some(uid) = &data.uploader_id {
- node = node.as_object().update(NO_IDENTIFIERS, |ids| {
+ node = node.update(NO_IDENTIFIERS, |ids| {
ids.insert_s(ct.is, IDENT_YOUTUBE_CHANNEL_HANDLE, &uid)
})
}
if let Some(desc) = &data.description {
- node = node.as_object().insert_s(ct.is, NO_DESCRIPTION, &desc);
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &desc);
}
if let Some(followers) = data.channel_follower_count {
- node = node.as_object().update(NO_RATINGS, |rat| {
+ node = node.update(NO_RATINGS, |rat| {
rat.insert_s(ct.is, RTYP_YOUTUBE_SUBSCRIBERS, followers as f64)
});
}
@@ -242,45 +242,41 @@ impl ImportPlugin for Infojson {
ct.ic.db.transaction(&mut |txn| {
let mut node = txn.get(row)?.unwrap();
- node = node.as_object().insert_s(ct.is, NO_KIND, kind);
- node = node.as_object().insert_s(ct.is, NO_TITLE, &infojson.title);
+ node = node.insert_s(ct.is, NO_KIND, kind);
+ node = node.insert_s(ct.is, NO_TITLE, &infojson.title);
if let Some(title) = &infojson.alt_title
&& title != &infojson.title
- && !node.as_object().has(NO_SUBTITLE.0)
+ && !node.has(NO_SUBTITLE.0)
{
- node = node.as_object().insert_s(ct.is, NO_SUBTITLE, &title);
+ node = node.insert_s(ct.is, NO_SUBTITLE, &title);
}
if let Some(up) = &infojson.uploader
- && !node.as_object().has(NO_SUBTITLE.0)
+ && !node.has(NO_SUBTITLE.0)
{
- node = node
- .as_object()
- .insert_s(ct.is, NO_SUBTITLE, &clean_uploader_name(&up));
+ node = node.insert_s(ct.is, NO_SUBTITLE, &clean_uploader_name(&up));
}
if let Some(desc) = &infojson.description {
- node = node.as_object().insert_s(ct.is, NO_DESCRIPTION, &desc);
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &desc);
}
if let Some(tag) = infojson.tags.clone() {
- node = node
- .as_object()
- .extend(NO_TAG, tag.iter().map(String::as_str));
+ node = node.extend(NO_TAG, tag.iter().map(String::as_str));
}
if let Some(rd) = release_date {
- node = node.as_object().insert_s(ct.is, NO_RELEASEDATE, rd);
+ node = node.insert_s(ct.is, NO_RELEASEDATE, rd);
}
match infojson.extractor.as_str() {
"youtube" => {
- node = node.as_object().update(NO_IDENTIFIERS, |rat| {
+ node = node.update(NO_IDENTIFIERS, |rat| {
rat.insert_s(ct.is, IDENT_YOUTUBE_VIDEO, &infojson.id)
});
- node = node.as_object().update(NO_RATINGS, |rat| {
+ node = node.update(NO_RATINGS, |rat| {
rat.insert_s(
ct.is,
RTYP_YOUTUBE_VIEWS,
infojson.view_count.unwrap_or_default() as f64,
)
});
- node = node.as_object().update(NO_RATINGS, |rat| {
+ node = node.update(NO_RATINGS, |rat| {
rat.insert_s(
ct.is,
RTYP_YOUTUBE_LIKES,
@@ -289,7 +285,7 @@ impl ImportPlugin for Infojson {
});
}
"Bandcamp" => {
- node = node.as_object().update(NO_IDENTIFIERS, |rat| {
+ node = node.update(NO_IDENTIFIERS, |rat| {
rat.insert_s(ct.is, IDENT_BANDCAMP, &infojson.id)
});
}
diff --git a/import/src/plugins/media_info.rs b/import/src/plugins/media_info.rs
index f21386e..5daa3ba 100644
--- a/import/src/plugins/media_info.rs
+++ b/import/src/plugins/media_info.rs
@@ -9,10 +9,7 @@ use crate::{
source_rank::ObjectImportSourceExt,
};
use anyhow::Result;
-use jellycommon::{
- jellyobject::{Object, ObjectBuffer},
- *,
-};
+use jellycommon::{jellyobject::OBB, *};
use jellydb::RowNum;
use jellyremuxer::matroska::{Segment, TrackType};
use std::path::Path;
@@ -32,84 +29,83 @@ impl ImportPlugin for MediaInfo {
ct.ic.db.transaction(&mut |txn| {
let mut node = txn.get(row)?.unwrap();
if let Some(tracks) = &seg.tracks {
- node = node.as_object().extend_object(
+ node = node.extend_object(
NO_TRACK,
TR_SOURCE.0,
- tracks.entries.iter().map(|t| {
- let mut track = ObjectBuffer::empty();
- track = track.as_object().insert(TR_CODEC, &t.codec_id);
- track = track.as_object().insert(TR_LANGUAGE, t.language.as_str());
- if let Some(name) = &t.name {
- track = track.as_object().insert(TR_NAME, name);
- }
- track = track.as_object().insert(
- TR_KIND,
- match t.track_type {
- TrackType::Audio => TRKIND_AUDIO,
- TrackType::Video => TRKIND_VIDEO,
- TrackType::Subtitle => TRKIND_TEXT,
- _ => TRKIND_UNKNOWN,
- },
- );
- if let Some(v) = &t.video {
- track = track
- .as_object()
- .insert(TR_PIXEL_WIDTH, v.pixel_width as u32);
- track = track
- .as_object()
- .insert(TR_PIXEL_HEIGHT, v.pixel_height as u32);
- if let Some(fr) = v.frame_rate {
- track = track.as_object().insert(TR_RATE, fr);
+ &tracks
+ .entries
+ .iter()
+ .map(|t| {
+ let mut track = OBB::new();
+ track.push(TR_CODEC, &t.codec_id);
+ track.push(TR_LANGUAGE, &t.language);
+ if let Some(name) = &t.name {
+ track.push(TR_NAME, name);
+ }
+ track.push(
+ TR_KIND,
+ match t.track_type {
+ TrackType::Audio => TRKIND_AUDIO,
+ TrackType::Video => TRKIND_VIDEO,
+ TrackType::Subtitle => TRKIND_TEXT,
+ _ => TRKIND_UNKNOWN,
+ },
+ );
+ if let Some(v) = &t.video {
+ track.push(TR_PIXEL_WIDTH, v.pixel_width as u32);
+ track.push(TR_PIXEL_HEIGHT, v.pixel_height as u32);
+ if let Some(fr) = v.frame_rate {
+ track.push(TR_RATE, fr);
+ }
}
- }
- if let Some(a) = &t.audio {
- track = track.as_object().insert(TR_CHANNELS, a.channels as u32);
- track = track.as_object().insert(TR_RATE, a.sampling_frequency);
- if let Some(d) = a.bit_depth {
- track = track.as_object().insert(TR_BIT_DEPTH, d as u32);
+ if let Some(a) = &t.audio {
+ track.push(TR_CHANNELS, a.channels as u32);
+ track.push(TR_RATE, a.sampling_frequency);
+ if let Some(d) = a.bit_depth {
+ track.push(TR_BIT_DEPTH, d as u32);
+ }
}
- }
- let source = Object::EMPTY
- .insert(TRSOURCE_LOCAL_PATH, &path.to_string_lossy())
- .as_object()
- .insert(TRSOURCE_LOCAL_TRACKNUM, t.track_number);
- track = track.as_object().insert(TR_SOURCE, source.as_object());
+ let source = OBB::new()
+ .with(TRSOURCE_LOCAL_PATH, &path.to_string_lossy())
+ .with(TRSOURCE_LOCAL_TRACKNUM, t.track_number)
+ .finish();
+ track.push(TR_SOURCE, &source);
- track
- }),
+ track.finish()
+ })
+ .collect::<Vec<_>>(),
);
}
if let Some(chapters) = &seg.chapters {
- node = node.as_object().extend_object(
+ node = node.extend_object(
NO_CHAPTER,
CH_NAME.0,
- chapters
+ &chapters
.edition_entries
.iter()
.flat_map(|e| &e.chapter_atoms)
.map(|cha| {
- let mut chapter = ObjectBuffer::empty();
- chapter = chapter
- .as_object()
- .insert(CH_START, cha.time_start as f64 * 1e-9);
+ let mut chapter = OBB::new();
+ chapter.push(CH_START, cha.time_start as f64 * 1e-9);
if let Some(end) = cha.time_end {
- chapter = chapter.as_object().insert(CH_END, end as f64 * 1e-9);
+ chapter.push(CH_END, end as f64 * 1e-9);
}
if let Some(display) = cha.displays.iter().next() {
- chapter = chapter.as_object().insert(CH_NAME, &display.string);
+ chapter.push(CH_NAME, &display.string);
}
- chapter
- }),
+ chapter.finish()
+ })
+ .collect::<Vec<_>>(),
);
}
let runtime = fix_invalid_runtime(
seg.info.duration.unwrap_or_default() * seg.info.timestamp_scale as f64 * 1e-9,
);
- node = node.as_object().insert_s(ct.is, NO_DURATION, runtime);
- node = node.as_object().insert_s(ct.is, NO_STORAGE_SIZE, size);
+ node = node.insert_s(ct.is, NO_DURATION, runtime);
+ node = node.insert_s(ct.is, NO_STORAGE_SIZE, size);
txn.update(row, node)?;
diff --git a/import/src/plugins/misc.rs b/import/src/plugins/misc.rs
index 2c56dae..db9a8ab 100644
--- a/import/src/plugins/misc.rs
+++ b/import/src/plugins/misc.rs
@@ -49,9 +49,7 @@ impl ImportPlugin for ImageFiles {
)?;
ct.ic.db.transaction(&mut |txn| {
let mut node = txn.get(row)?.unwrap();
- node = node
- .as_object()
- .update(NO_PICTURES, |picts| picts.insert_s(ct.is, slot, &asset));
+ node = node.update(NO_PICTURES, |picts| picts.insert_s(ct.is, slot, &asset));
txn.update(row, node)?;
Ok(())
})?;
@@ -84,7 +82,7 @@ impl ImportPlugin for ImageAttachments {
};
ct.ic.update_node(row, |node| {
- node.as_object().update(NO_PICTURES, |picts| {
+ node.update(NO_PICTURES, |picts| {
picts.insert_s(ct.is, PICT_COVER, &cover)
})
})?;
@@ -105,13 +103,12 @@ impl ImportPlugin for General {
fn instruction(&self, ct: &PluginContext, node: RowNum, line: &str) -> Result<()> {
if line == "hidden" {
ct.ic.update_node(node, |node| {
- node.as_object().insert_s(ct.is, NO_VISIBILITY, VISI_HIDDEN)
+ node.insert_s(ct.is, NO_VISIBILITY, VISI_HIDDEN)
})?;
}
if line == "reduced" {
ct.ic.update_node(node, |node| {
- node.as_object()
- .insert_s(ct.is, NO_VISIBILITY, VISI_REDUCED)
+ node.insert_s(ct.is, NO_VISIBILITY, VISI_REDUCED)
})?;
}
if let Some(kind) = line.strip_prefix("kind-").or(line.strip_prefix("kind=")) {
@@ -129,18 +126,16 @@ impl ImportPlugin for General {
_ => bail!("unknown node kind"),
};
ct.ic
- .update_node(node, |node| node.as_object().insert_s(ct.is, NO_KIND, kind))?;
+ .update_node(node, |node| node.insert_s(ct.is, NO_KIND, kind))?;
}
if let Some(title) = line.strip_prefix("title=") {
- ct.ic.update_node(node, |node| {
- node.as_object().insert_s(ct.is, NO_TITLE, title)
- })?;
+ ct.ic
+ .update_node(node, |node| node.insert_s(ct.is, NO_TITLE, title))?;
}
if let Some(index) = line.strip_prefix("index=") {
let index = index.parse().context("parse index")?;
- ct.ic.update_node(node, |node| {
- node.as_object().insert_s(ct.is, NO_INDEX, index)
- })?;
+ ct.ic
+ .update_node(node, |node| node.insert_s(ct.is, NO_INDEX, index))?;
}
Ok(())
}
@@ -166,7 +161,7 @@ impl ImportPlugin for Children {
continue;
}
ct.ic
- .update_node_slug(line, |n| n.as_object().extend(NO_PARENT, [parent]))?;
+ .update_node_slug(line, |n| n.extend(NO_PARENT, [parent]))?;
}
}
Ok(())
@@ -198,9 +193,9 @@ impl ImportPlugin for EpisodeIndex {
.context("parse season num")?;
ct.ic.update_node(node, |mut node| {
- node = node.as_object().insert_s(ct.is, NO_SEASON_INDEX, season);
- node = node.as_object().insert_s(ct.is, NO_INDEX, episode);
- node = node.as_object().insert_s(ct.is, NO_KIND, KIND_EPISODE);
+ node = node.insert_s(ct.is, NO_SEASON_INDEX, season);
+ node = node.insert_s(ct.is, NO_INDEX, episode);
+ node = node.insert_s(ct.is, NO_KIND, KIND_EPISODE);
node
})?;
}
diff --git a/import/src/plugins/musicbrainz.rs b/import/src/plugins/musicbrainz.rs
index ec44d11..deed38b 100644
--- a/import/src/plugins/musicbrainz.rs
+++ b/import/src/plugins/musicbrainz.rs
@@ -15,7 +15,10 @@ use crate::{
};
use anyhow::{Context, Result};
use jellycache::Cache;
-use jellycommon::{jellyobject::ObjectBuffer, *};
+use jellycommon::{
+ jellyobject::{EMPTY, OBB},
+ *,
+};
use jellydb::RowNum;
use log::info;
use reqwest::{
@@ -354,11 +357,11 @@ impl ImportPlugin for MusicBrainz {
impl MusicBrainz {
fn process_recording(&self, ct: &PluginContext, node_row: RowNum) -> Result<()> {
let data = ct.ic.get_node(node_row)?.unwrap();
- let data = data.as_object();
+ let data = data;
let Some(mbid) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_MUSICBRAINZ_RECORDING)
else {
return Ok(());
@@ -369,13 +372,11 @@ impl MusicBrainz {
ct.ic.db.transaction(&mut |txn| {
let mut node = txn.get(node_row)?.unwrap();
- node = node.as_object().insert_s(ct.is, NO_TITLE, &rec.title);
+ node = node.insert_s(ct.is, NO_TITLE, &rec.title);
if let Some(a) = rec.artist_credit.first() {
- node = node
- .as_object()
- .insert_s(ct.is, NO_SUBTITLE, &a.artist.name);
+ node = node.insert_s(ct.is, NO_SUBTITLE, &a.artist.name);
}
- node = node.as_object().update(NO_IDENTIFIERS, |ids| {
+ node = node.update(NO_IDENTIFIERS, |ids| {
ids.insert_multi(
IDENT_ISRC,
&rec.isrcs.iter().map(|e| e.as_str()).collect::<Vec<_>>(),
@@ -401,21 +402,19 @@ impl MusicBrainz {
let artist_row = get_or_insert_slug(txn, &artist_slug)?;
let mut artist_node = txn.get(artist_row)?.unwrap();
- artist_node = artist_node.as_object().update(NO_IDENTIFIERS, |ids| {
+ artist_node = artist_node.update(NO_IDENTIFIERS, |ids| {
ids.insert_s(ct.is, IDENT_MUSICBRAINZ_ARTIST, &artist.id)
});
- artist_node = artist_node.as_object().insert(NO_KIND, KIND_PERSON);
+ artist_node = artist_node.insert(NO_KIND, KIND_PERSON);
txn.update(artist_row, artist_node)?;
ct.pending_nodes.lock().unwrap().insert(artist_row);
- let credit = ObjectBuffer::new(&mut [
- (CR_NODE.0, &artist_row),
- (CR_KIND.0, &cat),
- (CR_ROLE.0, &role),
- ]);
- node = node
- .as_object()
- .extend_object(NO_CREDIT, CR_NODE.0, Some(credit))
+ let credit = OBB::new()
+ .with(CR_NODE, artist_row)
+ .with(CR_KIND, cat)
+ .with(CR_ROLE, role)
+ .finish();
+ node = node.extend_object(NO_CREDIT, CR_NODE.0, &[credit])
}
txn.update(node_row, node)
@@ -426,11 +425,11 @@ impl MusicBrainz {
fn process_artist(&self, ct: &PluginContext, node_row: RowNum) -> Result<()> {
let data = ct.ic.get_node(node_row)?.unwrap();
- let data = data.as_object();
+ let data = data;
let Some(mbid) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_MUSICBRAINZ_ARTIST)
else {
return Ok(());
@@ -440,7 +439,7 @@ impl MusicBrainz {
ct.ic.db.transaction(&mut |txn| {
let mut node = txn.get(node_row)?.unwrap();
- node = node.as_object().insert_s(ct.is, NO_TITLE, &artist.name);
+ node = node.insert_s(ct.is, NO_TITLE, &artist.name);
for rel in &artist.relations {
let url = rel.url.as_ref().map(|u| u.resource.clone());
@@ -449,7 +448,7 @@ impl MusicBrainz {
if let Some(url) = url
&& let Some(id) = url.strip_prefix("https://www.wikidata.org/wiki/")
{
- node = node.as_object().update(NO_IDENTIFIERS, |ids| {
+ node = node.update(NO_IDENTIFIERS, |ids| {
ids.insert_s(ct.is, IDENT_WIKIDATA, id)
})
}
@@ -458,7 +457,7 @@ impl MusicBrainz {
if let Some(url) = url
&& let Some(id) = url.strip_prefix("https://vgmdb.net/artist/")
{
- node = node.as_object().update(NO_IDENTIFIERS, |ids| {
+ node = node.update(NO_IDENTIFIERS, |ids| {
ids.insert_s(ct.is, IDENT_VGMDB_ARTIST, id)
})
}
diff --git a/import/src/plugins/omdb.rs b/import/src/plugins/omdb.rs
index 3b97a9d..5d99fcb 100644
--- a/import/src/plugins/omdb.rs
+++ b/import/src/plugins/omdb.rs
@@ -4,14 +4,9 @@
Copyright (C) 2026 metamuffin <metamuffin.org>
*/
-use std::sync::Arc;
-
use anyhow::{Context, Result, anyhow};
use jellycache::Cache;
-use jellycommon::{
- IDENT_IMDB, MSOURCE_OMDB, NO_DESCRIPTION, NO_IDENTIFIERS, NO_RATINGS, NO_TITLE, RTYP_IMDB,
- RTYP_METACRITIC, RTYP_ROTTEN_TOMATOES,
-};
+use jellycommon::{jellyobject::EMPTY, *};
use jellydb::RowNum;
use log::info;
use reqwest::{
@@ -19,6 +14,7 @@ use reqwest::{
header::{HeaderMap, HeaderName, HeaderValue},
};
use serde::{Deserialize, Serialize};
+use std::sync::Arc;
use tokio::runtime::Handle;
use crate::{
@@ -124,9 +120,8 @@ impl ImportPlugin for Omdb {
}
fn process(&self, ct: &PluginContext, node: RowNum) -> Result<()> {
let data = ct.ic.get_node(node)?.unwrap();
- let data = data.as_object();
- let Some(id) = data.get(NO_IDENTIFIERS).unwrap_or_default().get(IDENT_IMDB) else {
+ let Some(id) = data.get(NO_IDENTIFIERS).unwrap_or(EMPTY).get(IDENT_IMDB) else {
return Ok(());
};
@@ -154,10 +149,8 @@ impl ImportPlugin for Omdb {
.transpose()?;
ct.ic.update_node(node, |mut node| {
- node = node.as_object().insert_s(ct.is, NO_TITLE, &entry.title);
- node = node
- .as_object()
- .insert_s(ct.is, NO_DESCRIPTION, &entry.plot);
+ node = node.insert_s(ct.is, NO_TITLE, &entry.title);
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &entry.plot);
for (typ, val) in [
(RTYP_METACRITIC, metascore),
@@ -165,9 +158,7 @@ impl ImportPlugin for Omdb {
(RTYP_ROTTEN_TOMATOES, rotten_tomatoes),
] {
if let Some(x) = val {
- node = node
- .as_object()
- .update(NO_RATINGS, |rts| rts.insert_s(ct.is, typ, x));
+ node = node.update(NO_RATINGS, |rts| rts.insert_s(ct.is, typ, x));
}
}
node
diff --git a/import/src/plugins/tags.rs b/import/src/plugins/tags.rs
index c27ea70..901bcc6 100644
--- a/import/src/plugins/tags.rs
+++ b/import/src/plugins/tags.rs
@@ -39,16 +39,16 @@ impl ImportPlugin for Tags {
ct.ic.update_node(node, |mut node| {
if let Some(title) = &seg.info.title {
- node = node.as_object().insert_s(ct.is, NO_TITLE, title);
+ node = node.insert_s(ct.is, NO_TITLE, title);
}
for (key, value) in &tags {
match key.as_str() {
"DESCRIPTION" | "SYNOPSIS" => {
- node = node.as_object().insert_s(ct.is, NO_DESCRIPTION, &value)
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &value)
}
- "COMMENT" => node = node.as_object().insert(NO_TAGLINE, &value),
+ "COMMENT" => node = node.insert(NO_TAGLINE, &value),
"CONTENT_TYPE" => {
- node = node.as_object().insert_s(
+ node = node.insert_s(
ct.is,
NO_KIND,
match value.to_lowercase().trim() {
@@ -69,7 +69,7 @@ impl ImportPlugin for Tags {
"BARCODE" => IDENT_BARCODE,
_ => continue,
};
- node = node.as_object().update(NO_IDENTIFIERS, |idents| {
+ node = node.update(NO_IDENTIFIERS, |idents| {
idents.insert_s(ct.is, idty, &value)
});
}
diff --git a/import/src/plugins/tmdb.rs b/import/src/plugins/tmdb.rs
index 39f8115..832e240 100644
--- a/import/src/plugins/tmdb.rs
+++ b/import/src/plugins/tmdb.rs
@@ -11,7 +11,7 @@ use crate::{
use anyhow::{Context, Result, anyhow, bail};
use chrono::{Utc, format::Parsed};
use jellycache::{Cache, EscapeKey, HashKey};
-use jellycommon::*;
+use jellycommon::{jellyobject::EMPTY, *};
use jellydb::RowNum;
use log::info;
use reqwest::{
@@ -196,17 +196,16 @@ impl ImportPlugin for Tmdb {
impl Tmdb {
fn process_primary(&self, ct: &PluginContext, node: RowNum) -> Result<()> {
let data = ct.ic.get_node(node)?.unwrap();
- let data = data.as_object();
let (tmdb_kind, tmdb_id): (_, u64) = if let Some(id) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_TMDB_SERIES)
{
(TmdbKind::Tv, id.parse()?)
} else if let Some(id) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_TMDB_MOVIE)
{
(TmdbKind::Movie, id.parse()?)
@@ -237,31 +236,25 @@ impl Tmdb {
ct.ic.update_node(node, |mut node| {
if let Some(title) = &details.title {
- node = node.as_object().insert_s(ct.is, NO_TITLE, &title);
+ node = node.insert_s(ct.is, NO_TITLE, &title);
}
if let Some(tagline) = &details.tagline {
- node = node.as_object().insert_s(ct.is, NO_TAGLINE, &tagline);
+ node = node.insert_s(ct.is, NO_TAGLINE, &tagline);
}
- node = node
- .as_object()
- .insert_s(ct.is, NO_DESCRIPTION, &details.overview);
- node = node.as_object().update(NO_RATINGS, |rat| {
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &details.overview);
+ node = node.update(NO_RATINGS, |rat| {
rat.insert_s(ct.is, RTYP_TMDB, details.vote_average)
});
if let Some(poster) = &poster {
- node = node
- .as_object()
- .update(NO_PICTURES, |rat| rat.insert_s(ct.is, PICT_COVER, &poster));
+ node = node.update(NO_PICTURES, |rat| rat.insert_s(ct.is, PICT_COVER, &poster));
}
if let Some(backdrop) = &backdrop {
- node = node.as_object().update(NO_PICTURES, |rat| {
+ node = node.update(NO_PICTURES, |rat| {
rat.insert_s(ct.is, PICT_BACKDROP, &backdrop)
});
}
if let Some(releasedate) = release_date {
- node = node
- .as_object()
- .insert_s(ct.is, NO_RELEASEDATE, releasedate);
+ node = node.insert_s(ct.is, NO_RELEASEDATE, releasedate);
}
node
})?;
@@ -269,7 +262,7 @@ impl Tmdb {
}
fn process_episode(&self, ct: &PluginContext, node: RowNum) -> Result<()> {
let data = ct.ic.get_node(node)?.unwrap();
- let data = data.as_object();
+ let data = data;
let (Some(episode), Some(season)) = (data.get(NO_INDEX), data.get(NO_SEASON_INDEX)) else {
return Ok(());
@@ -279,9 +272,8 @@ impl Tmdb {
for parent in data.iter(NO_PARENT) {
let parent_data = txn.get(parent)?.ok_or(anyhow!("parent missing"))?;
if let Some(id) = parent_data
- .as_object()
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_TMDB_SERIES)
{
series_id = Some(id.parse::<u64>()?);
@@ -302,20 +294,16 @@ impl Tmdb {
.context("still image download")?;
let release_date = parse_release_date(&details.air_date)?;
ct.ic.update_node(node, |mut node| {
- node = node.as_object().insert_s(ct.is, NO_TITLE, &details.name);
- node = node
- .as_object()
- .insert_s(ct.is, NO_DESCRIPTION, &details.overview);
+ node = node.insert_s(ct.is, NO_TITLE, &details.name);
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &details.overview);
if let Some(release_date) = release_date {
- node = node
- .as_object()
- .insert_s(ct.is, NO_RELEASEDATE, release_date)
+ node = node.insert_s(ct.is, NO_RELEASEDATE, release_date)
}
- node = node.as_object().update(NO_RATINGS, |rat| {
+ node = node.update(NO_RATINGS, |rat| {
rat.insert_s(ct.is, RTYP_TMDB, details.vote_average)
});
if let Some(cover) = &cover {
- node = node.as_object().update(NO_PICTURES, |picts| {
+ node = node.update(NO_PICTURES, |picts| {
picts.insert_s(ct.is, PICT_COVER, &cover)
});
}
@@ -325,11 +313,11 @@ impl Tmdb {
fn process_person(&self, ct: &PluginContext, node: RowNum) -> Result<()> {
let data = ct.ic.get_node(node)?.unwrap();
- let data = data.as_object();
+ let data = data;
let Some(id) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_TMDB_PERSON)
else {
return Ok(());
@@ -344,8 +332,7 @@ impl Tmdb {
let image = self.image(&ct.ic.cache, &prof.file_path, ct.rt)?;
ct.ic.update_node(node, |node| {
- node.as_object()
- .update(NO_PICTURES, |pict| pict.insert_s(ct.is, PICT_COVER, &image))
+ node.update(NO_PICTURES, |pict| pict.insert_s(ct.is, PICT_COVER, &image))
})?;
Ok(())
diff --git a/import/src/plugins/trakt.rs b/import/src/plugins/trakt.rs
index c7ad53e..9c5786c 100644
--- a/import/src/plugins/trakt.rs
+++ b/import/src/plugins/trakt.rs
@@ -12,7 +12,7 @@ use crate::{
use anyhow::{Context, Result, anyhow, bail};
use jellycache::{Cache, HashKey};
use jellycommon::{
- jellyobject::{ObjectBuffer, Tag},
+ jellyobject::{EMPTY, OBB, Tag},
*,
};
use jellydb::RowNum;
@@ -423,8 +423,7 @@ impl ImportPlugin for Trakt {
_ => bail!("unknown trakt kind"),
};
ct.ic.update_node(node, |node| {
- node.as_object()
- .update(NO_IDENTIFIERS, |idents| idents.insert(ty, id))
+ node.update(NO_IDENTIFIERS, |idents| idents.insert(ty, id))
})?;
}
Ok(())
@@ -439,16 +438,15 @@ impl ImportPlugin for Trakt {
impl Trakt {
fn process_primary(&self, ct: &PluginContext, node_row: RowNum) -> Result<()> {
let data = ct.ic.get_node(node_row)?.unwrap();
- let data = data.as_object();
let (trakt_kind, trakt_id): (_, u64) = if let Some(id) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_TRAKT_SHOW)
{
(TraktKind::Show, id.parse()?)
} else if let Some(id) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_TRAKT_MOVIE)
{
(TraktKind::Movie, id.parse()?)
@@ -472,23 +470,21 @@ impl Trakt {
ct.ic.db.transaction(&mut |txn| {
let mut node = txn.get(node_row)?.unwrap();
- node = node
- .as_object()
- .insert_s(ct.is, NO_KIND, trakt_kind.as_node_kind());
- node = node.as_object().insert_s(ct.is, NO_TITLE, &details.title);
+ node = node.insert_s(ct.is, NO_KIND, trakt_kind.as_node_kind());
+ node = node.insert_s(ct.is, NO_TITLE, &details.title);
if let Some(overview) = &details.overview {
- node = node.as_object().insert_s(ct.is, NO_DESCRIPTION, &overview);
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &overview);
}
if let Some(tagline) = &details.tagline {
- node = node.as_object().insert_s(ct.is, NO_TAGLINE, &tagline);
+ node = node.insert_s(ct.is, NO_TAGLINE, &tagline);
}
if let Some(x) = details.ids.imdb.clone() {
- node = node.as_object().update(NO_IDENTIFIERS, |idents| {
+ node = node.update(NO_IDENTIFIERS, |idents| {
idents.insert_s(ct.is, IDENT_IMDB, &x)
});
}
if let Some(x) = details.ids.tvdb.clone() {
- node = node.as_object().update(NO_IDENTIFIERS, |idents| {
+ node = node.update(NO_IDENTIFIERS, |idents| {
idents.insert_s(ct.is, IDENT_TVDB, &x.to_string())
});
}
@@ -498,15 +494,11 @@ impl Trakt {
TraktKind::Show => Some(IDENT_TMDB_SERIES),
_ => None,
} {
- node = node
- .as_object()
- .update(NO_IDENTIFIERS, |idents| idents.insert(key, &x.to_string()));
+ node = node.update(NO_IDENTIFIERS, |idents| idents.insert(key, &x.to_string()));
};
}
if let Some(rating) = details.rating {
- node = node
- .as_object()
- .update(NO_RATINGS, |idents| idents.insert(RTYP_TRAKT, rating));
+ node = node.update(NO_RATINGS, |idents| idents.insert(RTYP_TRAKT, rating));
}
let mut credits = Vec::new();
@@ -524,39 +516,35 @@ impl Trakt {
let row = get_or_insert_slug(txn, &slug)?;
let mut c = txn.get(row)?.unwrap();
- c = c.as_object().insert_s(ct.is, NO_KIND, KIND_PERSON);
- c = c.as_object().insert_s(ct.is, NO_VISIBILITY, VISI_VISIBLE);
- c = c.as_object().insert_s(ct.is, NO_TITLE, &ap.person.name);
- c = c.as_object().update(NO_IDENTIFIERS, |ids| {
+ c = c.insert_s(ct.is, NO_KIND, KIND_PERSON);
+ c = c.insert_s(ct.is, NO_VISIBILITY, VISI_VISIBLE);
+ c = c.insert_s(ct.is, NO_TITLE, &ap.person.name);
+ c = c.update(NO_IDENTIFIERS, |ids| {
let mut ids = ids.insert(IDENT_TRAKT_PERSON, &traktid.to_string());
if let Some(tmdbid) = ap.person.ids.tmdb {
- ids = ids.as_object().insert_s(
- ct.is,
- IDENT_TMDB_PERSON,
- &tmdbid.to_string(),
- );
+ ids = ids.insert_s(ct.is, IDENT_TMDB_PERSON, &tmdbid.to_string());
}
if let Some(imdbid) = &ap.person.ids.imdb {
- ids = ids.as_object().insert_s(ct.is, IDENT_IMDB_PERSON, imdbid);
+ ids = ids.insert_s(ct.is, IDENT_IMDB_PERSON, imdbid);
}
ids
});
txn.update(row, c)?;
- credits.push(ObjectBuffer::new(&mut [
- (CR_KIND.0, crcat),
- (CR_ROLE.0, &role.as_str()),
- (CR_NODE.0, &row),
- ]));
+ credits.push(
+ OBB::new()
+ .with(CR_KIND, *crcat)
+ .with(CR_ROLE, &role)
+ .with(CR_NODE, row)
+ .finish(),
+ );
ct.pending_nodes.lock().unwrap().insert(row);
}
}
- node = node
- .as_object()
- .extend_object(NO_CREDIT, CR_NODE.0, credits);
+ node = node.extend_object(NO_CREDIT, CR_NODE.0, &credits);
txn.update(node_row, node)?;
Ok(())
@@ -565,7 +553,6 @@ impl Trakt {
}
fn process_episode(&self, ct: &PluginContext, node: RowNum) -> Result<()> {
let node_data = ct.ic.get_node(node)?.unwrap();
- let node_data = node_data.as_object();
let (Some(episode), Some(season)) =
(node_data.get(NO_INDEX), node_data.get(NO_SEASON_INDEX))
@@ -577,9 +564,8 @@ impl Trakt {
for parent in node_data.iter(NO_PARENT) {
let parent_data = txn.get(parent)?.ok_or(anyhow!("parent missing"))?;
if let Some(id) = parent_data
- .as_object()
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_TRAKT_SHOW)
{
show_id = Some(id.parse::<u64>()?);
@@ -597,16 +583,14 @@ impl Trakt {
let episodes = self.show_season_episodes(&ct.ic.cache, show_id, season, ct.rt)?;
if let Some(episode) = episodes.get(episode.saturating_sub(1) as usize) {
ct.ic.update_node(node, |mut node| {
- node = node.as_object().insert_s(ct.is, NO_KIND, KIND_EPISODE);
- node = node.as_object().insert_s(ct.is, NO_INDEX, episode.number);
- node = node.as_object().insert_s(ct.is, NO_TITLE, &episode.title);
+ node = node.insert_s(ct.is, NO_KIND, KIND_EPISODE);
+ node = node.insert_s(ct.is, NO_INDEX, episode.number);
+ node = node.insert_s(ct.is, NO_TITLE, &episode.title);
if let Some(overview) = &episode.overview {
- node = node.as_object().insert_s(ct.is, NO_DESCRIPTION, &overview);
+ node = node.insert_s(ct.is, NO_DESCRIPTION, &overview);
}
if let Some(r) = episode.rating {
- node = node
- .as_object()
- .update(NO_RATINGS, |rats| rats.insert_s(ct.is, RTYP_TRAKT, r));
+ node = node.update(NO_RATINGS, |rats| rats.insert_s(ct.is, RTYP_TRAKT, r));
}
node
})?;
diff --git a/import/src/plugins/vgmdb.rs b/import/src/plugins/vgmdb.rs
index 4e1b273..f93e84c 100644
--- a/import/src/plugins/vgmdb.rs
+++ b/import/src/plugins/vgmdb.rs
@@ -11,7 +11,7 @@ use crate::{
};
use anyhow::{Context, Result};
use jellycache::{Cache, HashKey};
-use jellycommon::*;
+use jellycommon::{jellyobject::EMPTY, *};
use jellydb::RowNum;
use log::info;
use regex::Regex;
@@ -149,11 +149,10 @@ impl ImportPlugin for Vgmdb {
fn process(&self, ct: &PluginContext, node: RowNum) -> Result<()> {
let data = ct.ic.get_node(node)?.unwrap();
- let data = data.as_object();
let Some(id) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_VGMDB_ARTIST)
else {
return Ok(());
@@ -165,8 +164,7 @@ impl ImportPlugin for Vgmdb {
};
ct.ic.update_node(node, |node| {
- node.as_object()
- .update(NO_PICTURES, |pics| pics.insert_s(ct.is, PICT_COVER, &image))
+ node.update(NO_PICTURES, |pics| pics.insert_s(ct.is, PICT_COVER, &image))
})?;
Ok(())
diff --git a/import/src/plugins/wikidata.rs b/import/src/plugins/wikidata.rs
index b92fdbb..5b79592 100644
--- a/import/src/plugins/wikidata.rs
+++ b/import/src/plugins/wikidata.rs
@@ -11,7 +11,7 @@ use crate::{
};
use anyhow::{Context, Result, bail};
use jellycache::{Cache, EscapeKey};
-use jellycommon::*;
+use jellycommon::{jellyobject::EMPTY, *};
use jellydb::RowNum;
use log::info;
use reqwest::{
@@ -203,11 +203,10 @@ impl ImportPlugin for Wikidata {
}
fn process(&self, ct: &PluginContext, node: RowNum) -> Result<()> {
let data = ct.ic.get_node(node)?.unwrap();
- let data = data.as_object();
let Some(id) = data
.get(NO_IDENTIFIERS)
- .unwrap_or_default()
+ .unwrap_or(EMPTY)
.get(IDENT_WIKIDATA)
else {
return Ok(());
@@ -222,8 +221,7 @@ impl ImportPlugin for Wikidata {
.image_by_filename(&ct.ic.cache, filename, ct.rt)?;
ct.ic.update_node(node, |node| {
- node.as_object()
- .update(NO_PICTURES, |pics| pics.insert_s(ct.is, PICT_COVER, &image))
+ node.update(NO_PICTURES, |pics| pics.insert_s(ct.is, PICT_COVER, &image))
})?;
Ok(())