feat(jellyfin): add actor media browsing

close #1005
This commit is contained in:
edde746
2026-05-11 11:54:37 +02:00
parent 617f200cb5
commit 2bbd31d927
6 changed files with 66 additions and 15 deletions
+4 -11
View File
@@ -3,7 +3,7 @@ import 'package:material_symbols_icons/symbols.dart';
import '../media/media_backend.dart';
import '../media/media_item.dart';
import '../media/media_kind.dart';
import '../services/plex_client.dart';
import '../media/media_server_client.dart';
import '../utils/provider_extensions.dart';
import '../widgets/desktop_app_bar.dart';
import '../widgets/optimized_media_image.dart';
@@ -15,10 +15,6 @@ import '../mixins/grid_focus_node_mixin.dart';
import '../focus/focusable_action_bar.dart';
/// Screen to browse all media featuring a specific actor.
///
/// Plex-only today: uses `fetchAllPersonMediaAsMediaItems` which has no
/// Jellyfin counterpart yet. Callers must guard the navigation by backend
/// (see `_navigateToActorMedia` in media_detail_screen.dart).
class ActorMediaScreen extends StatefulWidget {
final String actorName;
final String personId;
@@ -75,13 +71,10 @@ class _ActorMediaScreenState extends BaseMediaListDetailScreen<ActorMediaScreen>
super.dispose();
}
PlexClient get _plexClient => context.getPlexClientForServer(widget.serverId);
MediaServerClient get _mediaClient => context.getMediaClientForServer(widget.serverId);
@override
Future<List<MediaItem>> fetchItems() async {
// Plex-only — guarded at the call site in media_detail_screen.dart.
return _plexClient.fetchAllPersonMediaAsMediaItems(widget.personId);
}
Future<List<MediaItem>> fetchItems() => _mediaClient.fetchPersonMedia(widget.personId);
@override
Future<void> loadItems() async {
@@ -104,7 +97,7 @@ class _ActorMediaScreenState extends BaseMediaListDetailScreen<ActorMediaScreen>
ClipRRect(
borderRadius: BorderRadius.circular(40),
child: OptimizedMediaImage(
client: _plexClient,
client: _mediaClient,
imagePath: widget.actorThumb,
width: 80,
height: 80,
-4
View File
@@ -853,10 +853,6 @@ class _MediaDetailScreenState extends State<MediaDetailScreen>
}
void _navigateToActorMedia(MediaRole actor) {
// Plex-only today — Jellyfin's `/Persons/{id}/Items` isn't wired yet.
// Cast cards still render for parity, but tapping is a no-op until the
// Jellyfin path lands.
if (_metadata.backend != MediaBackend.plex) return;
final personId = actor.id;
if (personId == null || _metadata.serverId == null) return;