From 69f437fe222cc74e679032f903634825e6cf82e2 Mon Sep 17 00:00:00 2001 From: Connor Burton Date: Sun, 8 Feb 2026 00:02:46 +0000 Subject: [PATCH] add basic view of 10 cast by billing order for movies --- src/app/providers/tmdb.py | 16 +- src/templates/app/components/cast_card.html | 28 +++ src/templates/app/media_details.html | 194 +++++++++++--------- 3 files changed, 146 insertions(+), 92 deletions(-) create mode 100644 src/templates/app/components/cast_card.html diff --git a/src/app/providers/tmdb.py b/src/app/providers/tmdb.py index 52ea5f9d..60b344d5 100644 --- a/src/app/providers/tmdb.py +++ b/src/app/providers/tmdb.py @@ -151,7 +151,7 @@ def movie(media_id): url = f"{base_url}/movie/{media_id}" params = { **base_params, - "append_to_response": "recommendations,external_ids", + "append_to_response": "recommendations,external_ids,credits", } try: @@ -188,6 +188,19 @@ def movie(media_id): item for item in recommended_items if item["id"] not in collection_ids ] + cast = response.get("credits", {}).get("cast", []) + filtered_cast = [ + { + "id": member.get("id"), + "name": member.get("name"), + "character": member.get("character"), + "image": get_image_url(member.get("profile_path")) + if member.get("profile_path") + else None, + } + for member in cast[:10] + ] + data = { "media_id": media_id, "source": Sources.TMDB.value, @@ -209,6 +222,7 @@ def movie(media_id): "country": get_country(response["production_countries"]), "languages": get_languages(response["spoken_languages"]), }, + "cast": filtered_cast, "related": { collection_response.get("name", "collection"): collection_items, "recommendations": get_related( diff --git a/src/templates/app/components/cast_card.html b/src/templates/app/components/cast_card.html new file mode 100644 index 00000000..7e1e184e --- /dev/null +++ b/src/templates/app/components/cast_card.html @@ -0,0 +1,28 @@ +{% load app_tags %} + +
+ + +
+
{{ cast.name }}
+
{{ cast.character }}
+
+
diff --git a/src/templates/app/media_details.html b/src/templates/app/media_details.html index ad22267a..6bdcc8db 100644 --- a/src/templates/app/media_details.html +++ b/src/templates/app/media_details.html @@ -469,9 +469,21 @@ - {# Related Media #} - {% if media.related %} -
+
+ {% if media.cast %} +
+

Cast

+
+ {% for cast in media.cast %} + + {% include "app/components/cast_card.html" with cast=cast only %} + {% endfor %} +
+
+ {% endif %} + + {# Related Media #} + {% if media.related %} {% for name, related_items in media.related.items %} {% if related_items %}
@@ -489,109 +501,109 @@
{% endif %} {% endfor %} -
- {% endif %} - - {# Episodes List #} - {% if media.episodes %} -
-

Episodes

-
- {% for episode in media.episodes %} -
-
- E{{ episode.episode_number }} -
-
-
-
-

{{ episode.title }}

-

- Episode {{ episode.episode_number }} • {{ episode.air_date|default_if_none:"Unknown air date" }} - {% if episode.runtime %}• {{ episode.runtime }}{% endif %} -

-
-
- {# Track Episode #} -
- - - {% include "app/components/fill_track_episode.html" with request=request media=media episode=episode episode_title=episode.title csrf_token=csrf_token TRACK_TIME=TRACK_TIME only %} + {% endif %} + {# Episodes List #} + {% if media.episodes %} +
+

Episodes

+
+ {% for episode in media.episodes %} +
+
+ E{{ episode.episode_number }} +
+
+
+
+

{{ episode.title }}

+

+ Episode {{ episode.episode_number }} • {{ episode.air_date|default_if_none:"Unknown air date" }} + {% if episode.runtime %}• {{ episode.runtime }}{% endif %} +

+
+ {# Track Episode #} +
+ - {# Lists #} -
- + {% include "app/components/fill_track_episode.html" with request=request media=media episode=episode episode_title=episode.title csrf_token=csrf_token TRACK_TIME=TRACK_TIME only %} -
-
-
+
+ + {# Lists #} +
+ + +
+
+
+
-
- {# History #} -
- -
-
-
+ {# History #} +
+ +
+
+
+
+
+

{{ episode.overview }}

+
-
-

{{ episode.overview }}

-
+ {% if episode.history %} +

+ Last watched: {{ episode.history.0.end_date|datetime_format:user }} + {% if not episode.history.0.end_date %}No date provided{% endif %} + {% if episode.history|length > 1 %}• Watched {{ episode.history|length }} times{% endif %} +

+ {% endif %}
- {% if episode.history %} -

- Last watched: {{ episode.history.0.end_date|datetime_format:user }} - {% if not episode.history.0.end_date %}No date provided{% endif %} - {% if episode.history|length > 1 %}• Watched {{ episode.history|length }} times{% endif %} -

- {% endif %}
-
- {% endfor %} + {% endfor %} +
-
- {% endif %} + {% endif %} +
{% endblock content %}