|
|
@ -2,6 +2,7 @@ from rest_framework import serializers |
|
|
from utils import get_thumbs |
|
|
from utils import get_thumbs |
|
|
from .models import VideoCategory, Video, VideoCollection, VideoPlaylist, PlaylistItem, PinnedVideoCollection |
|
|
from .models import VideoCategory, Video, VideoCollection, VideoPlaylist, PlaylistItem, PinnedVideoCollection |
|
|
from apps.bookmark.serializers import * |
|
|
from apps.bookmark.serializers import * |
|
|
|
|
|
from utils.time_formatters import format_media_time, format_duration |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VideoCategoryListSerializer(serializers.ModelSerializer): |
|
|
class VideoCategoryListSerializer(serializers.ModelSerializer): |
|
|
@ -19,6 +20,7 @@ class VideoListSerializer(serializers.ModelSerializer): |
|
|
thumbnail = serializers.SerializerMethodField() |
|
|
thumbnail = serializers.SerializerMethodField() |
|
|
video_file = serializers.SerializerMethodField() |
|
|
video_file = serializers.SerializerMethodField() |
|
|
share_link = serializers.CharField(read_only=True) |
|
|
share_link = serializers.CharField(read_only=True) |
|
|
|
|
|
video_time = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
|
class Meta: |
|
|
class Meta: |
|
|
model = Video |
|
|
model = Video |
|
|
@ -37,6 +39,9 @@ class VideoListSerializer(serializers.ModelSerializer): |
|
|
return obj.video_file.url |
|
|
return obj.video_file.url |
|
|
return None |
|
|
return None |
|
|
|
|
|
|
|
|
|
|
|
def get_video_time(self, obj): |
|
|
|
|
|
return format_media_time(obj.video_time) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class VideoPlaylistListSerializer(serializers.ModelSerializer): |
|
|
class VideoPlaylistListSerializer(serializers.ModelSerializer): |
|
|
thumbnail = serializers.SerializerMethodField() |
|
|
thumbnail = serializers.SerializerMethodField() |
|
|
@ -50,15 +55,7 @@ class VideoPlaylistListSerializer(serializers.ModelSerializer): |
|
|
return get_thumbs(obj.thumbnail, self.context.get('request')) |
|
|
return get_thumbs(obj.thumbnail, self.context.get('request')) |
|
|
|
|
|
|
|
|
def get_total_time_formatted(self, obj): |
|
|
def get_total_time_formatted(self, obj): |
|
|
"""Format total_time as HH:MM:SS string""" |
|
|
|
|
|
if obj.total_time: |
|
|
|
|
|
total_seconds = int(obj.total_time.total_seconds()) |
|
|
|
|
|
hours = total_seconds // 3600 |
|
|
|
|
|
minutes = (total_seconds % 3600) // 60 |
|
|
|
|
|
seconds = total_seconds % 60 |
|
|
|
|
|
return f"{hours:02d}:{minutes:02d}:{seconds:02d}" |
|
|
|
|
|
return "00:00:00" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return format_duration(obj.total_time) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -83,14 +80,7 @@ class VideoPlaylistDetailSerializer(serializers.ModelSerializer): |
|
|
return get_thumbs(obj.thumbnail, self.context.get('request')) |
|
|
return get_thumbs(obj.thumbnail, self.context.get('request')) |
|
|
|
|
|
|
|
|
def get_total_time_formatted(self, obj): |
|
|
def get_total_time_formatted(self, obj): |
|
|
"""Format total_time as HH:MM:SS string""" |
|
|
|
|
|
if obj.total_time: |
|
|
|
|
|
total_seconds = int(obj.total_time.total_seconds()) |
|
|
|
|
|
hours = total_seconds // 3600 |
|
|
|
|
|
minutes = (total_seconds % 3600) // 60 |
|
|
|
|
|
seconds = total_seconds % 60 |
|
|
|
|
|
return f"{hours:02d}:{minutes:02d}:{seconds:02d}" |
|
|
|
|
|
return "00:00:00" |
|
|
|
|
|
|
|
|
return format_duration(obj.total_time) |
|
|
|
|
|
|
|
|
def get_bookmark(self, obj): |
|
|
def get_bookmark(self, obj): |
|
|
"""Get bookmark information for this playlist.""" |
|
|
"""Get bookmark information for this playlist.""" |
|
|
@ -156,13 +146,17 @@ class VideoDetailSerializer(serializers.ModelSerializer): |
|
|
is_in_playlist = serializers.SerializerMethodField() |
|
|
is_in_playlist = serializers.SerializerMethodField() |
|
|
playlist_videos = serializers.SerializerMethodField() |
|
|
playlist_videos = serializers.SerializerMethodField() |
|
|
share_link = serializers.CharField(read_only=True) |
|
|
share_link = serializers.CharField(read_only=True) |
|
|
|
|
|
video_time = serializers.SerializerMethodField() |
|
|
|
|
|
|
|
|
class Meta: |
|
|
class Meta: |
|
|
model = Video |
|
|
model = Video |
|
|
fields = ['id', 'title', 'slug', 'thumbnail', 'description', 'video_type', |
|
|
fields = ['id', 'title', 'slug', 'thumbnail', 'description', 'video_type', |
|
|
'video_file', 'video_url', 'video_time', 'view_count', |
|
|
'video_file', 'video_url', 'video_time', 'view_count', |
|
|
'categories', 'created_at', 'user_rate', 'average_rate', 'bookmark', |
|
|
'categories', 'created_at', 'user_rate', 'average_rate', 'bookmark', |
|
|
'is_in_playlist', 'playlist_videos', 'share_link'] |
|
|
|
|
|
|
|
|
'is_in_playlist', 'playlist_videos', 'share_link', 'video_time'] |
|
|
|
|
|
|
|
|
|
|
|
def get_video_time(self, obj): |
|
|
|
|
|
return format_media_time(obj.video_time) |
|
|
|
|
|
|
|
|
def get_thumbnail(self, obj): |
|
|
def get_thumbnail(self, obj): |
|
|
return get_thumbs(obj.thumbnail, self.context.get('request')) |
|
|
return get_thumbs(obj.thumbnail, self.context.get('request')) |
|
|
|