signals.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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 move_thread
  5. all_read = Signal()
  6. category_read = Signal(providing_args=["category"])
  7. thread_tracked = Signal(providing_args=["thread"])
  8. thread_read = Signal(providing_args=["thread"])
  9. """
  10. Signal handlers
  11. """
  12. @receiver(delete_category_content)
  13. def delete_category_threads(sender, **kwargs):
  14. sender.categoryread_set.all().delete()
  15. sender.threadread_set.all().delete()
  16. @receiver(move_category_content)
  17. def delete_category_tracker(sender, **kwargs):
  18. sender.categoryread_set.all().delete()
  19. sender.threadread_set.all().delete()
  20. @receiver(move_thread)
  21. def delete_thread_tracker(sender, **kwargs):
  22. sender.threadread_set.all().delete()
  23. @receiver(thread_read)
  24. def decrease_unread_private_count(sender, **kwargs):
  25. user = sender
  26. thread = kwargs['thread']
  27. if thread.category.thread_type.root_name != PRIVATE_THREADS_ROOT_NAME:
  28. return
  29. if user.unread_private_threads:
  30. user.unread_private_threads -= 1
  31. user.save(update_fields=['unread_private_threads'])