poststracker.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from django.db import transaction
  2. from django.utils import timezone
  3. from .dates import get_cutoff_date
  4. from .models import PostRead
  5. def make_read_aware(user, posts):
  6. if not posts:
  7. return
  8. if not hasattr(posts, '__iter__'):
  9. posts = [posts]
  10. make_read(posts)
  11. if user.is_anonymous:
  12. return
  13. cutoff_date = get_cutoff_date(user)
  14. unresolved_posts = {}
  15. for post in posts:
  16. if post.posted_on > cutoff_date:
  17. post.is_read = False
  18. post.is_new = True
  19. unresolved_posts[post.pk] = post
  20. if unresolved_posts:
  21. queryset = user.postread_set.filter(post__in=unresolved_posts)
  22. for post_id in queryset.values_list('post_id', flat=True):
  23. unresolved_posts[post_id].is_read = True
  24. unresolved_posts[post_id].is_new = False
  25. def make_read(posts):
  26. for post in posts:
  27. post.is_read = True
  28. post.is_new = False
  29. def save_read(user, post):
  30. user.postread_set.create(
  31. category=post.category,
  32. thread=post.thread,
  33. post=post,
  34. )
  35. def delete_reads(post):
  36. post.postread_set.all().delete()