diff --git a/apps/podcast/models.py b/apps/podcast/models.py index 5a9fb61..4273cbc 100644 --- a/apps/podcast/models.py +++ b/apps/podcast/models.py @@ -1,6 +1,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ from django.conf import settings +import datetime from utils import generate_slug_for_model from utils.mixins import LowercaseSlugMixin @@ -119,7 +120,6 @@ class Podcast(LowercaseSlugMixin, models.Model): file_changed = True if not self.audio_time: - import datetime self.audio_time = datetime.time(0, 0, 0) super().save(*args, **kwargs) diff --git a/apps/podcast/serializers_dovodi.py b/apps/podcast/serializers_dovodi.py index eafdf9b..e657b6e 100644 --- a/apps/podcast/serializers_dovodi.py +++ b/apps/podcast/serializers_dovodi.py @@ -1,6 +1,6 @@ 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 @@ -50,6 +50,8 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer): audio_file = AbsoluteFileField(required=False, allow_null=True) remove_thumbnail = 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: model = Podcast @@ -64,17 +66,31 @@ class DovodiPodcastItemSerializer(serializers.ModelSerializer): "status", "view_count", "download_count", + "playlist", + "playlist_id", "created_at", "updated_at", "remove_thumbnail", "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): + playlist_id = validated_data.pop("playlist", None) validated_data.pop("remove_thumbnail", 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): 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 = 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