signals.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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_thread, move_thread, move_post
  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. @receiver(delete_category_content)
  10. def delete_category_threads(sender, **kwargs):
  11. sender.postread_set.all().delete()
  12. @receiver(move_category_content)
  13. def move_category_tracker(sender, **kwargs):
  14. sender.postread_set.update(category=kwargs['new_category'])
  15. @receiver(merge_thread)
  16. def merge_thread_tracker(sender, **kwargs):
  17. other_thread = kwargs['other_thread']
  18. other_thread.postread_set.update(
  19. category=sender.category,
  20. thread=sender,
  21. )
  22. @receiver(move_thread)
  23. def move_thread_tracker(sender, **kwargs):
  24. sender.postread_set.update(
  25. category=sender.category,
  26. thread=sender,
  27. )
  28. @receiver(move_post)
  29. def move_post_tracker(sender, **kwargs):
  30. sender.postread_set.update(
  31. category=sender.category,
  32. thread=sender.thread,
  33. )
  34. @receiver(thread_read)
  35. def decrease_unread_private_count(sender, **kwargs):
  36. user = sender
  37. thread = kwargs['thread']
  38. if thread.category.thread_type.root_name != PRIVATE_THREADS_ROOT_NAME:
  39. return
  40. if user.unread_private_threads:
  41. user.unread_private_threads -= 1
  42. user.save(update_fields=['unread_private_threads'])