aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-01-24 18:47:19 +0100
committermetamuffin <metamuffin@disroot.org>2024-01-24 18:47:29 +0100
commit5c9b9e972987a7ac386a7a89d8f446bd46fb4d34 (patch)
treeacf57d2dc8398c89310d3a736b7c2a53e660f50f
parent27f4c3ff8f21282eac98583e2e1c41f7fec1f946 (diff)
downloadjellything-5c9b9e972987a7ac386a7a89d8f446bd46fb4d34.tar
jellything-5c9b9e972987a7ac386a7a89d8f446bd46fb4d34.tar.bz2
jellything-5c9b9e972987a7ac386a7a89d8f446bd46fb4d34.tar.zst
refactor asset system pt. 2
-rw-r--r--Cargo.lock5
-rw-r--r--import/Cargo.toml1
-rw-r--r--import/src/lib.rs32
3 files changed, 32 insertions, 6 deletions
diff --git a/Cargo.lock b/Cargo.lock
index dc46449..25d2d3a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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(())
+}