watchedthreadmodel.py 1.2 KB

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