Browse Source

fix(video): align video playlist bookmarking logic with podcast pattern

master
Mohsen Taba 4 days ago
parent
commit
46757e4d5c
  1. 7
      apps/bookmark/management/commands/cleanup_orphan_bookmarks.py
  2. 8
      apps/bookmark/models/bookmark.py
  3. 2
      apps/bookmark/signals.py
  4. 6
      apps/bookmark/views/bookmark.py
  5. 9
      apps/video/serializers.py

7
apps/bookmark/management/commands/cleanup_orphan_bookmarks.py

@ -47,7 +47,12 @@ class Command(BaseCommand):
if not content_ids:
continue
existing_ids = set(model_cls.objects.filter(id__in=content_ids).values_list('id', flat=True))
if service_choice == Bookmark.ServiceChoices.VIDEO:
existing_ids = set(Video.objects.filter(id__in=content_ids).values_list('id', flat=True)) | set(VideoPlaylist.objects.filter(id__in=content_ids).values_list('id', flat=True))
elif service_choice == Bookmark.ServiceChoices.PODCAST:
existing_ids = set(Podcast.objects.filter(id__in=content_ids).values_list('id', flat=True)) | set(PodcastPlaylist.objects.filter(id__in=content_ids).values_list('id', flat=True))
else:
existing_ids = set(model_cls.objects.filter(id__in=content_ids).values_list('id', flat=True))
missing_ids = content_ids - existing_ids
if missing_ids:

8
apps/bookmark/models/bookmark.py

@ -71,8 +71,8 @@ class Bookmark(models.Model):
from apps.library.models import Book
return Book.objects.filter(id=content_id).exists()
elif service == cls.ServiceChoices.PODCAST:
from apps.podcast.models import Podcast
return Podcast.objects.filter(id=content_id).exists()
from apps.podcast.models import Podcast, PodcastPlaylist
return Podcast.objects.filter(id=content_id).exists() or PodcastPlaylist.objects.filter(id=content_id).exists()
elif service == cls.ServiceChoices.PODCAST_PLAYLIST:
from apps.podcast.models import PodcastPlaylist
return PodcastPlaylist.objects.filter(id=content_id).exists()
@ -83,8 +83,8 @@ class Bookmark(models.Model):
from apps.hadis.models import HadisCorrection
return HadisCorrection.objects.filter(id=content_id).exists()
elif service == cls.ServiceChoices.VIDEO:
from apps.video.models import Video
return Video.objects.filter(id=content_id).exists()
from apps.video.models import Video, VideoPlaylist
return Video.objects.filter(id=content_id).exists() or VideoPlaylist.objects.filter(id=content_id).exists()
elif service == cls.ServiceChoices.VIDEO_PLAYLIST:
from apps.video.models import VideoPlaylist
return VideoPlaylist.objects.filter(id=content_id).exists()

2
apps/bookmark/signals.py

@ -53,6 +53,7 @@ try:
@receiver(post_delete, sender=VideoPlaylist)
def on_video_playlist_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.VIDEO_PLAYLIST, instance.id)
_delete_bookmarks_for(Bookmark.ServiceChoices.VIDEO, instance.id)
except ImportError:
pass
@ -67,6 +68,7 @@ try:
@receiver(post_delete, sender=PodcastPlaylist)
def on_podcast_playlist_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.PODCAST_PLAYLIST, instance.id)
_delete_bookmarks_for(Bookmark.ServiceChoices.PODCAST, instance.id)
except ImportError:
pass

6
apps/bookmark/views/bookmark.py

@ -274,8 +274,10 @@ def _get_valid_content_ids(service, content_ids):
from apps.video.models import VideoPlaylist
return set(VideoPlaylist.objects.filter(id__in=content_ids, status=True).values_list('id', flat=True))
elif service in ('video', 'video_item'):
from apps.video.models import Video
return set(Video.objects.filter(id__in=content_ids, status=True).values_list('id', flat=True))
from apps.video.models import Video, VideoPlaylist
v_ids = set(Video.objects.filter(id__in=content_ids, status=True).values_list('id', flat=True))
pl_ids = set(VideoPlaylist.objects.filter(id__in=content_ids, status=True).values_list('id', flat=True))
return v_ids | pl_ids
elif service == 'podcast':
from apps.podcast.models import Podcast, PodcastPlaylist
p_ids = set(Podcast.objects.filter(id__in=content_ids, status=True).values_list('id', flat=True))

9
apps/video/serializers.py

@ -118,12 +118,17 @@ class VideoPlaylistDetailSerializer(serializers.ModelSerializer):
"""Get bookmark information for this playlist."""
request = self.context.get('request')
user = request.user if request else None
print(user.id)
book_mark = BookmarkStatusSerializer.get_bookmark_info(
obj=obj,
user=user,
service='video_playlist'
service='video'
)
if not book_mark.get('is_bookmarked', False):
book_mark = BookmarkStatusSerializer.get_bookmark_info(
obj=obj,
user=user,
service='video_playlist'
)
return book_mark.get('is_bookmarked', False)
def get_user_rate(self, obj):

Loading…
Cancel
Save