|
|
@ -1,6 +1,6 @@ |
|
|
from rest_framework import serializers |
|
|
from rest_framework import serializers |
|
|
|
|
|
|
|
|
from .models import Podcast, PodcastCategory, PodcastCollection |
|
|
|
|
|
|
|
|
from .models import Podcast, PodcastCategory, PodcastCollection, PodcastPlaylist, PlaylistItem |
|
|
from .serializers_admin import AbsoluteFileField, AbsoluteImageField |
|
|
from .serializers_admin import AbsoluteFileField, AbsoluteImageField |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -50,6 +50,8 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer): |
|
|
audio_file = AbsoluteFileField(required=False, allow_null=True) |
|
|
audio_file = AbsoluteFileField(required=False, allow_null=True) |
|
|
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) |
|
|
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) |
|
|
remove_audio_file = serializers.BooleanField(write_only=True, required=False, default=False) |
|
|
remove_audio_file = serializers.BooleanField(write_only=True, required=False, default=False) |
|
|
|
|
|
playlist = serializers.IntegerField(required=False, allow_null=True, write_only=True) |
|
|
|
|
|
playlist_id = serializers.SerializerMethodField(read_only=True) |
|
|
|
|
|
|
|
|
class Meta: |
|
|
class Meta: |
|
|
model = Podcast |
|
|
model = Podcast |
|
|
@ -64,17 +66,31 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer): |
|
|
"status", |
|
|
"status", |
|
|
"view_count", |
|
|
"view_count", |
|
|
"download_count", |
|
|
"download_count", |
|
|
|
|
|
"playlist", |
|
|
|
|
|
"playlist_id", |
|
|
"created_at", |
|
|
"created_at", |
|
|
"updated_at", |
|
|
"updated_at", |
|
|
"remove_thumbnail", |
|
|
"remove_thumbnail", |
|
|
"remove_audio_file", |
|
|
"remove_audio_file", |
|
|
] |
|
|
] |
|
|
read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"] |
|
|
|
|
|
|
|
|
read_only_fields = ["id", "view_count", "download_count", "playlist_id", "created_at", "updated_at"] |
|
|
|
|
|
|
|
|
|
|
|
def get_playlist_id(self, obj): |
|
|
|
|
|
appearance = obj.playlist_appearances.first() |
|
|
|
|
|
return appearance.playlist_id if appearance else None |
|
|
|
|
|
|
|
|
def create(self, validated_data): |
|
|
def create(self, validated_data): |
|
|
|
|
|
playlist_id = validated_data.pop("playlist", None) |
|
|
validated_data.pop("remove_thumbnail", False) |
|
|
validated_data.pop("remove_thumbnail", False) |
|
|
validated_data.pop("remove_audio_file", False) |
|
|
validated_data.pop("remove_audio_file", False) |
|
|
return super().create(validated_data) |
|
|
|
|
|
|
|
|
instance = super().create(validated_data) |
|
|
|
|
|
if playlist_id: |
|
|
|
|
|
try: |
|
|
|
|
|
playlist = PodcastPlaylist.objects.get(id=playlist_id) |
|
|
|
|
|
PlaylistItem.objects.create(playlist=playlist, podcast=instance, priority=playlist.playlist_items.count() + 1) |
|
|
|
|
|
except PodcastPlaylist.DoesNotExist: |
|
|
|
|
|
pass |
|
|
|
|
|
return instance |
|
|
|
|
|
|
|
|
def update(self, instance, validated_data): |
|
|
def update(self, instance, validated_data): |
|
|
remove_thumbnail = validated_data.pop("remove_thumbnail", False) |
|
|
remove_thumbnail = validated_data.pop("remove_thumbnail", False) |
|
|
@ -88,4 +104,18 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer): |
|
|
instance.audio_file.delete(save=False) |
|
|
instance.audio_file.delete(save=False) |
|
|
instance.audio_file = None |
|
|
instance.audio_file = None |
|
|
|
|
|
|
|
|
return super().update(instance, validated_data) |
|
|
|
|
|
|
|
|
playlist_in_payload = "playlist" in self.initial_data |
|
|
|
|
|
playlist_id = validated_data.pop("playlist", None) |
|
|
|
|
|
|
|
|
|
|
|
instance = super().update(instance, validated_data) |
|
|
|
|
|
|
|
|
|
|
|
if playlist_in_payload: |
|
|
|
|
|
instance.playlist_appearances.all().delete() |
|
|
|
|
|
if playlist_id: |
|
|
|
|
|
try: |
|
|
|
|
|
playlist = PodcastPlaylist.objects.get(id=playlist_id) |
|
|
|
|
|
PlaylistItem.objects.create(playlist=playlist, podcast=instance, priority=playlist.playlist_items.count() + 1) |
|
|
|
|
|
except PodcastPlaylist.DoesNotExist: |
|
|
|
|
|
pass |
|
|
|
|
|
|
|
|
|
|
|
return instance |