poststracker.py 1009 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. from .cutoffdate import get_cutoff_date
  2. def make_read_aware(request, posts):
  3. if not posts:
  4. return
  5. if not hasattr(posts, "__iter__"):
  6. posts = [posts]
  7. make_read(posts)
  8. if request.user.is_anonymous:
  9. return
  10. cutoff_date = get_cutoff_date(request.settings, request.user)
  11. unresolved_posts = {}
  12. for post in posts:
  13. if post.posted_on > cutoff_date:
  14. post.is_read = False
  15. post.is_new = True
  16. unresolved_posts[post.pk] = post
  17. if unresolved_posts:
  18. queryset = request.user.postread_set.filter(post__in=unresolved_posts)
  19. for post_id in queryset.values_list("post_id", flat=True):
  20. unresolved_posts[post_id].is_read = True
  21. unresolved_posts[post_id].is_new = False
  22. def make_read(posts):
  23. for post in posts:
  24. post.is_read = True
  25. post.is_new = False
  26. def save_read(user, post):
  27. user.postread_set.create(category=post.category, thread=post.thread, post=post)