From 5c9b9e972987a7ac386a7a89d8f446bd46fb4d34 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 24 Jan 2024 18:47:19 +0100 Subject: refactor asset system pt. 2 --- import/Cargo.toml | 1 + import/src/lib.rs | 32 ++++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) (limited to 'import') diff --git a/import/Cargo.toml b/import/Cargo.toml index 4096dc8..a05fec8 100644 --- a/import/Cargo.toml +++ b/import/Cargo.toml @@ -25,3 +25,4 @@ futures = "0.3.29" tokio = { workspace = true } regex = "1.10.2" +base64 = "0.21.7" diff --git a/import/src/lib.rs b/import/src/lib.rs index abb552f..9a099a8 100644 --- a/import/src/lib.rs +++ b/import/src/lib.rs @@ -11,6 +11,7 @@ pub mod trakt; use crate::tmdb::TmdbKind; use anyhow::{anyhow, bail, Context, Ok}; use async_recursion::async_recursion; +use base64::Engine; use futures::{stream::FuturesUnordered, StreamExt}; use jellybase::{ assetfed::AssetInner, @@ -21,8 +22,8 @@ use jellybase::{ }; use jellyclient::Session; use jellycommon::{ - ExtendedNode, ImportOptions, ImportSource, MediaInfo, Node, NodeKind, NodePrivate, NodePublic, - PeopleGroup, Rating, SourceTrack, TrackSource, + Asset, ExtendedNode, ImportOptions, ImportSource, MediaInfo, Node, NodeKind, NodePrivate, + NodePublic, PeopleGroup, Rating, SourceTrack, TrackSource, }; use jellymatroska::read::EbmlReader; use jellyremuxer::import::import_metadata; @@ -741,7 +742,7 @@ async fn import_remote( info!("loading federated node {id:?}"); let mut node = session.node(&id).await.context("fetching remote node")?; - let node_ext = session + let mut node_ext = session .node_extended(&id) .await .context("fetching extended remote node")?; @@ -759,13 +760,20 @@ async fn import_remote( drop(_permit); - let node = Node { + let mut node = Node { public: node.clone(), private: NodePrivate { id: None, source: track_sources, }, }; + make_opt_asset_federated(host, &mut node.public.backdrop)?; + make_opt_asset_federated(host, &mut node.public.poster)?; + for (_, g) in &mut node_ext.people { + for a in g { + make_opt_asset_federated(host, &mut a.person.headshot)?; + } + } debug!("adding {id}"); insert_node(&id, node.clone())?; @@ -784,3 +792,19 @@ async fn import_remote( Ok(()) } + +pub fn make_opt_asset_federated(host: &str, p: &mut Option) -> anyhow::Result<()> { + if let Some(a) = p { + make_asset_federated(host, a)? + } + Ok(()) +} +pub fn make_asset_federated(host: &str, p: &mut Asset) -> anyhow::Result<()> { + let data = base64::engine::general_purpose::URL_SAFE.decode(&p.0)?; + *p = AssetInner::Federated { + host: host.to_owned(), + asset: data, + } + .ser(); + Ok(()) +} -- cgit v1.2.3-70-g09d2