diff options
-rw-r--r-- | Cargo.lock | 5 | ||||
-rw-r--r-- | import/Cargo.toml | 1 | ||||
-rw-r--r-- | import/src/lib.rs | 32 |
3 files changed, 32 insertions, 6 deletions
@@ -290,9 +290,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -1396,6 +1396,7 @@ version = "0.1.0" dependencies = [ "anyhow", "async-recursion", + "base64", "bincode", "futures", "jellybase", 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<Asset>) -> 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(()) +} |