diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-01-24 23:06:33 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-01-24 23:06:33 +0100 |
| commit | 2bcccb18a6cb8bf836f57c3d86f759b19699def2 (patch) | |
| tree | ef55a10c6d9703677a983b8ca900fb4578a08eb3 /import/src/plugins/trakt.rs | |
| parent | b2e88a8beabf04adc28947cf82996e8692a68b71 (diff) | |
| download | jellything-2bcccb18a6cb8bf836f57c3d86f759b19699def2.tar jellything-2bcccb18a6cb8bf836f57c3d86f759b19699def2.tar.bz2 jellything-2bcccb18a6cb8bf836f57c3d86f759b19699def2.tar.zst | |
cache as object
Diffstat (limited to 'import/src/plugins/trakt.rs')
| -rw-r--r-- | import/src/plugins/trakt.rs | 155 |
1 files changed, 90 insertions, 65 deletions
diff --git a/import/src/plugins/trakt.rs b/import/src/plugins/trakt.rs index 3569454..2cb063d 100644 --- a/import/src/plugins/trakt.rs +++ b/import/src/plugins/trakt.rs @@ -5,10 +5,10 @@ */ use crate::{ USER_AGENT, - plugins::{PluginContext, ImportPlugin, PluginInfo}, + plugins::{ImportPlugin, PluginContext, PluginInfo}, }; use anyhow::{Context, Result, anyhow, bail}; -use jellycache::{HashKey, cache_memory}; +use jellycache::{Cache, HashKey}; use jellycommon::{jellyobject::Tag, *}; use jellydb::table::RowNum; use log::info; @@ -52,89 +52,114 @@ impl Trakt { pub fn search( &self, + cache: &Cache, kinds: &[TraktKind], query: &str, rt: &Handle, ) -> Result<Arc<Vec<TraktSearchResult>>> { - cache_memory( - &format!("ext/trakt/search/{}.json", HashKey(query)), - move || { + cache + .cache_memory( + &format!("ext/trakt/search/{}.json", HashKey(query)), + move || { + rt.block_on(async { + let url = format!( + "https://api.trakt.tv/search/{}?query={}&extended=full", + kinds + .iter() + .map(|t| t.singular()) + .collect::<Vec<_>>() + .join(","), + urlencoding::encode(query), + ); + let res = self.client.get(url).send().await?.error_for_status()?; + Ok(res.json().await?) + }) + }, + ) + .context("trakt search") + } + + pub fn lookup( + &self, + cache: &Cache, + kind: TraktKind, + id: u64, + rt: &Handle, + ) -> Result<Arc<TraktMediaObject>> { + cache + .cache_memory(&format!("ext/trakt/lookup/{kind}-{id}.json"), move || { rt.block_on(async { - let url = format!( - "https://api.trakt.tv/search/{}?query={}&extended=full", - kinds - .iter() - .map(|t| t.singular()) - .collect::<Vec<_>>() - .join(","), - urlencoding::encode(query), - ); + info!("trakt lookup {kind:?}:{id:?}"); + let url = format!("https://api.trakt.tv/{}/{id}?extended=full", kind.plural()); let res = self.client.get(url).send().await?.error_for_status()?; Ok(res.json().await?) }) - }, - ) - .context("trakt search") - } - - pub fn lookup(&self, kind: TraktKind, id: u64, rt: &Handle) -> Result<Arc<TraktMediaObject>> { - cache_memory(&format!("ext/trakt/lookup/{kind}-{id}.json"), move || { - rt.block_on(async { - info!("trakt lookup {kind:?}:{id:?}"); - let url = format!("https://api.trakt.tv/{}/{id}?extended=full", kind.plural()); - let res = self.client.get(url).send().await?.error_for_status()?; - Ok(res.json().await?) }) - }) - .context("trakt lookup") + .context("trakt lookup") } - pub fn people(&self, kind: TraktKind, id: u64, rt: &Handle) -> Result<Arc<TraktPeople>> { - cache_memory(&format!("ext/trakt/people/{kind}-{id}.json"), move || { - rt.block_on(async { - info!("trakt people {kind:?}:{id:?}"); - let url = format!( - "https://api.trakt.tv/{}/{id}/people?extended=full", - kind.plural() - ); - let res = self.client.get(url).send().await?.error_for_status()?; - Ok(res.json().await?) + pub fn people( + &self, + cache: &Cache, + kind: TraktKind, + id: u64, + rt: &Handle, + ) -> Result<Arc<TraktPeople>> { + cache + .cache_memory(&format!("ext/trakt/people/{kind}-{id}.json"), move || { + rt.block_on(async { + info!("trakt people {kind:?}:{id:?}"); + let url = format!( + "https://api.trakt.tv/{}/{id}/people?extended=full", + kind.plural() + ); + let res = self.client.get(url).send().await?.error_for_status()?; + Ok(res.json().await?) + }) }) - }) - .context("trakt people") + .context("trakt people") } - pub fn show_seasons(&self, id: u64, rt: &Handle) -> Result<Arc<Vec<TraktSeason>>> { - cache_memory(&format!("ext/trakt/seasons/{id}.json"), move || { - rt.block_on(async { - info!("trakt seasons {id:?}"); - let url = format!("https://api.trakt.tv/shows/{id}/seasons?extended=full"); - let res = self.client.get(url).send().await?.error_for_status()?; - Ok(res.json().await?) + pub fn show_seasons( + &self, + cache: &Cache, + id: u64, + rt: &Handle, + ) -> Result<Arc<Vec<TraktSeason>>> { + cache + .cache_memory(&format!("ext/trakt/seasons/{id}.json"), move || { + rt.block_on(async { + info!("trakt seasons {id:?}"); + let url = format!("https://api.trakt.tv/shows/{id}/seasons?extended=full"); + let res = self.client.get(url).send().await?.error_for_status()?; + Ok(res.json().await?) + }) }) - }) - .context("trakt show seasons") + .context("trakt show seasons") } pub fn show_season_episodes( &self, + cache: &Cache, id: u64, season: u64, rt: &Handle, ) -> Result<Arc<Vec<TraktEpisode>>> { - cache_memory( - &format!("ext/trakt/episodes/{id}-S{season}.json"), - move || { - rt.block_on(async { - info!("trakt episodes {id:?} season={season}"); - let url = - format!("https://api.trakt.tv/shows/{id}/seasons/{season}?extended=full"); - let res = self.client.get(url).send().await?.error_for_status()?; - Ok(res.json().await?) - }) - }, - ) - .context("trakt show season episodes") + cache + .cache_memory( + &format!("ext/trakt/episodes/{id}-S{season}.json"), + move || { + rt.block_on(async { + info!("trakt episodes {id:?} season={season}"); + let url = format!( + "https://api.trakt.tv/shows/{id}/seasons/{season}?extended=full" + ); + let res = self.client.get(url).send().await?.error_for_status()?; + Ok(res.json().await?) + }) + }, + ) + .context("trakt show season episodes") } } @@ -425,7 +450,7 @@ impl Trakt { return Ok(()); }; - let details = self.lookup(trakt_kind, trakt_id, ct.rt)?; + let details = self.lookup(&ct.dba.cache, trakt_kind, trakt_id, ct.rt)?; // let people = self.people(trakt_kind, trakt_id, ct.rt)?; // let mut people_map = BTreeMap::<CreditCategory, Vec<Appearance>>::new(); @@ -525,9 +550,9 @@ impl Trakt { return Ok(()); }; - let seasons = self.show_seasons(show_id, ct.rt)?; + let seasons = self.show_seasons(&ct.dba.cache, show_id, ct.rt)?; if seasons.iter().any(|x| x.number == season) { - let episodes = self.show_season_episodes(show_id, season, ct.rt)?; + let episodes = self.show_season_episodes(&ct.dba.cache, show_id, season, ct.rt)?; if let Some(episode) = episodes.get(episode.saturating_sub(1) as usize) { ct.dba.update_node(node, |mut node| { node = node.as_object().insert(NO_KIND, KIND_EPISODE); |