models.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. from datetime import timedelta
  2. from django.conf import settings
  3. from django.db import models
  4. from django.utils import timezone
  5. from misago.forums.signals import move_forum_content
  6. from misago.threads.signals import move_thread
  7. class ThreadRecord(models.Model):
  8. user = models.ForeignKey('users.User')
  9. forum = models.ForeignKey('forums.Forum')
  10. thread = models.ForeignKey('threads.Thread')
  11. updated = models.DateTimeField()
  12. class ForumRecord(models.Model):
  13. user = models.ForeignKey('users.User')
  14. forum = models.ForeignKey('forums.Forum')
  15. updated = models.DateTimeField()
  16. cleared = models.DateTimeField()
  17. def get_threads(self):
  18. threads = {}
  19. for thread in ThreadRecord.objects.filter(user=self.user, forum=self.forum, updated__gte=(timezone.now() - timedelta(days=settings.READS_TRACKER_LENGTH))):
  20. threads[thread.thread_id] = thread
  21. return threads
  22. def move_forum_content_handler(sender, **kwargs):
  23. ForumRecord.objects.filter(forum=sender).delete()
  24. move_forum_content.connect(move_forum_content_handler, dispatch_uid="move_forum_threads_reads")
  25. def move_thread_handler(sender, **kwargs):
  26. ThreadRecord.objects.filter(thread=sender).delete()
  27. move_thread.connect(move_thread_handler, dispatch_uid="move_thread_reads")