From 0eae81ec5968ed3d9613b2e1480a41ba0958b286 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Sun, 28 Jun 2026 20:38:58 +0200 Subject: [PATCH] Add JRay support --- src-tauri/src/commands/repository.rs | 17 +++++ src-tauri/src/lib.rs | 5 +- src-tauri/src/repository/hybrid.rs | 6 ++ src-tauri/src/repository/mod.rs | 2 +- src-tauri/src/repository/online.rs | 68 +++++++++++++++++ src/lib/api/bindings.ts | 16 ++++ src/lib/api/repository-client.ts | 10 +++ src/lib/components/player/VideoPlayer.svelte | 77 ++++++++++++++++++++ 8 files changed, 198 insertions(+), 3 deletions(-) diff --git a/src-tauri/src/commands/repository.rs b/src-tauri/src/commands/repository.rs index 5b0e6e7..fd1bbf2 100644 --- a/src-tauri/src/commands/repository.rs +++ b/src-tauri/src/commands/repository.rs @@ -179,6 +179,23 @@ pub async fn repository_get_item( .map_err(|e| format!("{:?}", e)) } +/// Query the optional JRay plugin for the actors on screen at time `t` +/// (seconds) in an item. Returns an empty list when JRay isn't installed or +/// has no data for the item, so the caller can render nothing without error. +#[tauri::command] +#[specta::specta] +pub async fn repository_jray_actors_at( + manager: State<'_, RepositoryManagerWrapper>, + handle: String, + item_id: String, + t: f64, +) -> Result, String> { + let repo = manager.0.get(&handle).ok_or("Repository not found")?; + repo.as_ref().get_jray_actors(&item_id, t) + .await + .map_err(|e| format!("{:?}", e)) +} + /// Get latest items in a library #[tauri::command] #[specta::specta] diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 6ac846b..5abfe82 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -96,7 +96,7 @@ use commands::{ storage_save_series_audio_preference, storage_get_series_audio_preference, // Repository commands repository_create, repository_destroy, repository_get_libraries, repository_get_items, - repository_get_item, repository_get_latest_items, repository_get_resume_items, + repository_get_item, repository_jray_actors_at, repository_get_latest_items, repository_get_resume_items, repository_get_next_up_episodes, repository_get_recently_played_audio, repository_get_resume_movies, repository_get_rediscover_albums, repository_get_genres, repository_search, repository_get_playback_info, @@ -634,6 +634,7 @@ fn specta_builder() -> Builder { repository_get_libraries, repository_get_items, repository_get_item, + repository_jray_actors_at, repository_get_latest_items, repository_get_resume_items, repository_get_next_up_episodes, @@ -676,7 +677,6 @@ fn specta_builder() -> Builder { ]) } -#[cfg_attr(mobile, tauri::mobile_entry_point)] /// Configure GStreamer (the media backend behind WebKitGTK's HTML5 `