diff options
Diffstat (limited to 'import/src/plugins/media_info.rs')
| -rw-r--r-- | import/src/plugins/media_info.rs | 108 |
1 files changed, 52 insertions, 56 deletions
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)?; |