poststracker.py 990 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from .dates import get_cutoff_date
  2. def make_read_aware(user, posts):
  3. if not posts:
  4. return
  5. if not hasattr(posts, '__iter__'):
  6. posts = [posts]
  7. make_read(posts)
  8. if user.is_anonymous:
  9. return
  10. cutoff_date = get_cutoff_date(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 = 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(
  28. category=post.category,
  29. thread=post.thread,
  30. post=post,
  31. )