watchedthreadmodel.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from django.db import models
  2. from misago.signals import merge_thread, move_forum_content, move_thread
  3. class WatchedThread(models.Model):
  4. user = models.ForeignKey('User')
  5. forum = models.ForeignKey('Forum')
  6. thread = models.ForeignKey('Thread')
  7. last_read = models.DateTimeField()
  8. email = models.BooleanField(default=False)
  9. deleted = False
  10. class Meta:
  11. app_label = 'misago'
  12. def save(self, *args, **kwargs):
  13. if not self.deleted:
  14. super(WatchedThread, self).save(*args, **kwargs)
  15. def move_forum_content_handler(sender, **kwargs):
  16. WatchedThread.objects.filter(forum=sender).update(forum=kwargs['move_to'])
  17. move_forum_content.connect(move_forum_content_handler, dispatch_uid="move_forum_threads_watchers")
  18. def move_thread_handler(sender, **kwargs):
  19. WatchedThread.objects.filter(forum=sender.forum_id).update(forum=kwargs['move_to'])
  20. move_thread.connect(move_thread_handler, dispatch_uid="move_thread_watchers")
  21. def merge_thread_handler(sender, **kwargs):
  22. WatchedThread.objects.filter(thread=sender).delete()
  23. merge_thread.connect(merge_thread_handler, dispatch_uid="merge_threads_watchers")