From 49f22bc43ca5d881ef6869a93cae47dde78c72d2 Mon Sep 17 00:00:00 2001 From: Simon Date: Fri, 2 Aug 2024 16:08:03 +0200 Subject: [PATCH] add video detail playlist nav --- tubearchivist/home/templates/home/video.html | 4 +- tubearchivist/playlist/src/index.py | 8 +++- tubearchivist/video/urls.py | 5 ++ tubearchivist/video/views.py | 48 ++++++++++++++++---- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/tubearchivist/home/templates/home/video.html b/tubearchivist/home/templates/home/video.html index 7af97155..70b95b10 100644 --- a/tubearchivist/home/templates/home/video.html +++ b/tubearchivist/home/templates/home/video.html @@ -139,7 +139,7 @@
{% if playlist_item.playlist_previous %} - previous thumbnail + previous thumbnail

Previous:

@@ -158,7 +158,7 @@
- previous thumbnail + previous thumbnail {% endif %}
diff --git a/tubearchivist/playlist/src/index.py b/tubearchivist/playlist/src/index.py index 26a42973..3577f1e1 100644 --- a/tubearchivist/playlist/src/index.py +++ b/tubearchivist/playlist/src/index.py @@ -8,6 +8,7 @@ import json from datetime import datetime from channel.src import index as channel +from common.src.env_settings import EnvironmentSettings from common.src.es_connect import ElasticWrap, IndexPaginate from common.src.index_generic import YouTubeItem from download.src.thumbnails import ThumbManager @@ -190,6 +191,7 @@ class YoutubePlaylist(YouTubeItem): def build_nav(self, youtube_id): """find next and previous in playlist of a given youtube_id""" + cache_root = EnvironmentSettings().get_cache_root() all_entries_available = self.json_data["playlist_entries"] all_entries = [i for i in all_entries_available if i["downloaded"]] current = [i for i in all_entries if i["youtube_id"] == youtube_id] @@ -203,14 +205,16 @@ class YoutubePlaylist(YouTubeItem): else: previous_item = all_entries[current_idx - 1] prev_id = previous_item["youtube_id"] - previous_item["vid_thumb"] = ThumbManager(prev_id).vid_thumb_path() + prev_thumb_path = ThumbManager(prev_id).vid_thumb_path() + previous_item["vid_thumb"] = f"{cache_root}/{prev_thumb_path}" if current_idx == len(all_entries) - 1: next_item = False else: next_item = all_entries[current_idx + 1] next_id = next_item["youtube_id"] - next_item["vid_thumb"] = ThumbManager(next_id).vid_thumb_path() + next_thumb_path = ThumbManager(next_id).vid_thumb_path() + next_item["vid_thumb"] = f"{cache_root}/{next_thumb_path}" self.nav = { "playlist_meta": { diff --git a/tubearchivist/video/urls.py b/tubearchivist/video/urls.py index 80b8dbc8..f520fb0b 100644 --- a/tubearchivist/video/urls.py +++ b/tubearchivist/video/urls.py @@ -10,6 +10,11 @@ urlpatterns = [ views.VideoApiView.as_view(), name="api-video", ), + path( + "/nav/", + views.VideoApiNavView.as_view(), + name="api-video-nav", + ), path( "/progress/", views.VideoProgressView.as_view(), diff --git a/tubearchivist/video/views.py b/tubearchivist/video/views.py index bff85579..21f8406d 100644 --- a/tubearchivist/video/views.py +++ b/tubearchivist/video/views.py @@ -2,10 +2,26 @@ from common.src.ta_redis import RedisArchivist from common.views_base import AdminWriteOnly, ApiBaseView +from playlist.src.index import YoutubePlaylist from rest_framework.response import Response from video.src.index import YoutubeVideo +class VideoApiListView(ApiBaseView): + """resolves to /api/video/ + GET: returns list of videos + """ + + search_base = "ta_video/_search/" + + def get(self, request): + """get request""" + self.data.update({"sort": [{"published": {"order": "desc"}}]}) + self.get_document_list(request) + + return Response(self.response) + + class VideoApiView(ApiBaseView): """resolves to /api/video// GET: returns metadata dict of video @@ -35,19 +51,35 @@ class VideoApiView(ApiBaseView): return Response(message, status=status_code) -class VideoApiListView(ApiBaseView): - """resolves to /api/video/ - GET: returns list of videos +class VideoApiNavView(ApiBaseView): + """resolves to /api/video//nav/ + GET: returns playlist nav """ - search_base = "ta_video/_search/" + search_base = "ta_video/_doc/" - def get(self, request): + def get(self, request, video_id): + # pylint: disable=unused-argument """get request""" - self.data.update({"sort": [{"published": {"order": "desc"}}]}) - self.get_document_list(request) + self.get_document(video_id) + if self.status_code != 200: + return Response(status=self.status_code) - return Response(self.response) + print(self.response) + + playlist_nav = [] + + if not self.response["data"].get("playlist"): + return Response(playlist_nav) + + for playlist_id in self.response["data"]["playlist"]: + playlist = YoutubePlaylist(playlist_id) + playlist.get_from_es() + playlist.build_nav(video_id) + if playlist.nav: + playlist_nav.append(playlist.nav) + + return Response(playlist_nav, status=self.status_code) class VideoProgressView(ApiBaseView):