mirror of
https://github.com/tubearchivist/tubearchivist-frontend.git
synced 2024-11-22 11:50:14 +00:00
remember video progress, #build
Changes: - merges video progress API endpoint - merges fix for auto subscribe reset of playlists - merges fix for ffmpeg install link builder
This commit is contained in:
commit
a25b101c3a
@ -16,7 +16,7 @@ RUN apt-get clean && apt-get -y update && apt-get -y install --no-install-recomm
|
|||||||
RUN if [ "$TARGETPLATFORM" = "linux/amd64" ] ; then \
|
RUN if [ "$TARGETPLATFORM" = "linux/amd64" ] ; then \
|
||||||
curl -s https://api.github.com/repos/yt-dlp/FFmpeg-Builds/releases/latest \
|
curl -s https://api.github.com/repos/yt-dlp/FFmpeg-Builds/releases/latest \
|
||||||
| grep browser_download_url \
|
| grep browser_download_url \
|
||||||
| grep linux64-gpl-4.4.tar.xz \
|
| grep ".*master.*linux64.*tar.xz" \
|
||||||
| cut -d '"' -f 4 \
|
| cut -d '"' -f 4 \
|
||||||
| xargs curl -L --output ffmpeg.tar.xz && \
|
| xargs curl -L --output ffmpeg.tar.xz && \
|
||||||
tar -xf ffmpeg.tar.xz --strip-components=2 --no-anchored -C /usr/bin/ "ffmpeg" && \
|
tar -xf ffmpeg.tar.xz --strip-components=2 --no-anchored -C /usr/bin/ "ffmpeg" && \
|
||||||
|
@ -100,43 +100,42 @@ class VideoApiView(ApiBaseView):
|
|||||||
return Response(self.response, status=self.status_code)
|
return Response(self.response, status=self.status_code)
|
||||||
|
|
||||||
|
|
||||||
class VideoProgressView(APIView):
|
class VideoProgressView(ApiBaseView):
|
||||||
"""resolves to /api/video/<video_id>/
|
"""resolves to /api/video/<video_id>/
|
||||||
handle progress status for video
|
handle progress status for video
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@staticmethod
|
def get(self, request, video_id):
|
||||||
def get(request, video_id):
|
|
||||||
"""get progress for a single video"""
|
"""get progress for a single video"""
|
||||||
user_id = request.user.id
|
user_id = request.user.id
|
||||||
key = f"{user_id}:progress:{video_id}"
|
key = f"{user_id}:progress:{video_id}"
|
||||||
video_progress = RedisArchivist().get_message(key)
|
video_progress = RedisArchivist().get_message(key)
|
||||||
position = video_progress.get("position", 0)
|
position = video_progress.get("position", 0)
|
||||||
|
|
||||||
progress = {
|
self.response = {
|
||||||
"youtube_id": video_id,
|
"youtube_id": video_id,
|
||||||
"user_id": user_id,
|
"user_id": user_id,
|
||||||
"position": position,
|
"position": position,
|
||||||
}
|
}
|
||||||
return Response(progress)
|
return Response(self.response)
|
||||||
|
|
||||||
@staticmethod
|
def post(self, request, video_id):
|
||||||
def post(request, video_id):
|
|
||||||
"""set progress position in redis"""
|
"""set progress position in redis"""
|
||||||
position = request.data.get("position", 0)
|
position = request.data.get("position", 0)
|
||||||
key = f"{request.user.id}:progress:{video_id}"
|
key = f"{request.user.id}:progress:{video_id}"
|
||||||
message = {"position": position}
|
message = {"position": position}
|
||||||
RedisArchivist().set_message(key, message, expire=False)
|
RedisArchivist().set_message(key, message, expire=False)
|
||||||
|
self.response = request.data
|
||||||
|
|
||||||
return Response(request.data)
|
return Response(self.response)
|
||||||
|
|
||||||
@staticmethod
|
def delete(self, request, video_id):
|
||||||
def delete(request, video_id):
|
|
||||||
"""delete progress position"""
|
"""delete progress position"""
|
||||||
key = f"{request.user.id}:progress:{video_id}"
|
key = f"{request.user.id}:progress:{video_id}"
|
||||||
RedisArchivist().del_message(key)
|
RedisArchivist().del_message(key)
|
||||||
|
self.response = {"progress-reset": video_id}
|
||||||
|
|
||||||
return Response({"progress-reset": video_id})
|
return Response(self.response)
|
||||||
|
|
||||||
|
|
||||||
class ChannelApiView(ApiBaseView):
|
class ChannelApiView(ApiBaseView):
|
||||||
|
@ -35,8 +35,11 @@ class YoutubePlaylist(YouTubeItem):
|
|||||||
|
|
||||||
def build_json(self, scrape=False):
|
def build_json(self, scrape=False):
|
||||||
"""collection to create json_data"""
|
"""collection to create json_data"""
|
||||||
if not scrape:
|
self.get_from_es()
|
||||||
self.get_from_es()
|
if self.json_data:
|
||||||
|
subscribed = self.json_data.get("playlist_subscribed")
|
||||||
|
else:
|
||||||
|
subscribed = False
|
||||||
|
|
||||||
if scrape or not self.json_data:
|
if scrape or not self.json_data:
|
||||||
self.get_from_youtube()
|
self.get_from_youtube()
|
||||||
@ -44,13 +47,13 @@ class YoutubePlaylist(YouTubeItem):
|
|||||||
self.get_entries()
|
self.get_entries()
|
||||||
self.json_data["playlist_entries"] = self.all_members
|
self.json_data["playlist_entries"] = self.all_members
|
||||||
self.get_playlist_art()
|
self.get_playlist_art()
|
||||||
|
self.json_data["playlist_subscribed"] = subscribed
|
||||||
|
|
||||||
def process_youtube_meta(self):
|
def process_youtube_meta(self):
|
||||||
"""extract relevant fields from youtube"""
|
"""extract relevant fields from youtube"""
|
||||||
self.json_data = {
|
self.json_data = {
|
||||||
"playlist_id": self.youtube_id,
|
"playlist_id": self.youtube_id,
|
||||||
"playlist_active": True,
|
"playlist_active": True,
|
||||||
"playlist_subscribed": False,
|
|
||||||
"playlist_name": self.youtube_meta["title"],
|
"playlist_name": self.youtube_meta["title"],
|
||||||
"playlist_channel": self.youtube_meta["channel"],
|
"playlist_channel": self.youtube_meta["channel"],
|
||||||
"playlist_channel_id": self.youtube_meta["channel_id"],
|
"playlist_channel_id": self.youtube_meta["channel_id"],
|
||||||
|
Loading…
Reference in New Issue
Block a user