aboutsummaryrefslogtreecommitdiff
path: root/import/src/plugins/trakt.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-01-24 23:06:33 +0100
committermetamuffin <metamuffin@disroot.org>2026-01-24 23:06:33 +0100
commit2bcccb18a6cb8bf836f57c3d86f759b19699def2 (patch)
treeef55a10c6d9703677a983b8ca900fb4578a08eb3 /import/src/plugins/trakt.rs
parentb2e88a8beabf04adc28947cf82996e8692a68b71 (diff)
downloadjellything-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.rs155
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);