You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

83 lines
2.8 KiB

import logging
from django.db.models.signals import post_delete
from django.dispatch import receiver
from apps.bookmark.models import Bookmark
logger = logging.getLogger(__name__)
def _delete_bookmarks_for(service: str, content_id: int):
if not content_id:
return
try:
deleted_count, _ = Bookmark.objects.filter(service=service, content_id=content_id).delete()
if deleted_count > 0:
logger.info("[Bookmark] Auto-deleted %d bookmark(s) for %s ID %s upon content deletion.", deleted_count, service, content_id)
except Exception as exc:
logger.error("[Bookmark] Error deleting bookmarks for %s ID %s: %s", service, content_id, exc)
# 1. Library Books
try:
from apps.library.models import Book
@receiver(post_delete, sender=Book)
def on_book_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.LIBRARY, instance.id)
except ImportError:
pass
# 2. Hadith & Hadith Corrections
try:
from apps.hadis.models import Hadis, HadisCorrection
@receiver(post_delete, sender=Hadis)
def on_hadis_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.HADITH, instance.id)
@receiver(post_delete, sender=HadisCorrection)
def on_hadis_correction_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.HADITH_CORRECTION, instance.id)
except ImportError:
pass
# 3. Videos & Video Playlists
try:
from apps.video.models import Video, VideoPlaylist
@receiver(post_delete, sender=Video)
def on_video_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.VIDEO, instance.id)
@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
# 4. Podcasts & Podcast Playlists
try:
from apps.podcast.models import Podcast, PodcastPlaylist
@receiver(post_delete, sender=Podcast)
def on_podcast_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.PODCAST, instance.id)
@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
# 5. Articles
try:
from apps.article.models import Article
@receiver(post_delete, sender=Article)
def on_article_deleted(sender, instance, **kwargs):
_delete_bookmarks_for(Bookmark.ServiceChoices.ARTICLE, instance.id)
except ImportError:
pass