signals.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from django.dispatch import Signal, receiver
  2. from misago.categories import PRIVATE_THREADS_ROOT_NAME
  3. from misago.categories.signals import delete_category_content, move_category_content
  4. from misago.threads.signals import merge_post, merge_thread, move_post, move_thread
  5. thread_read = Signal(providing_args=["thread"])
  6. @receiver(delete_category_content)
  7. def delete_category_threads(sender, **kwargs):
  8. sender.postread_set.all().delete()
  9. @receiver(move_category_content)
  10. def move_category_tracker(sender, **kwargs):
  11. sender.postread_set.update(category=kwargs["new_category"])
  12. @receiver(merge_thread)
  13. def merge_thread_tracker(sender, **kwargs):
  14. other_thread = kwargs["other_thread"]
  15. other_thread.postread_set.update(category=sender.category, thread=sender)
  16. @receiver(move_thread)
  17. def move_thread_tracker(sender, **kwargs):
  18. sender.postread_set.update(category=sender.category, thread=sender)
  19. @receiver(merge_post)
  20. def merge_post_delete_tracker(sender, **kwargs):
  21. sender.postread_set.all().delete()
  22. @receiver(move_post)
  23. def move_post_delete_tracker(sender, **kwargs):
  24. sender.postread_set.all().delete()
  25. @receiver(thread_read)
  26. def decrease_unread_private_count(sender, **kwargs):
  27. user = sender
  28. thread = kwargs["thread"]
  29. if thread.category.thread_type.root_name != PRIVATE_THREADS_ROOT_NAME:
  30. return
  31. if user.unread_private_threads:
  32. user.unread_private_threads -= 1
  33. user.save(update_fields=["unread_private_threads"])