middleware.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from django.utils.deprecation import MiddlewareMixin
  2. from ..categories.models import Category
  3. from .models import Thread
  4. from .viewmodels import filter_read_threads_queryset
  5. class UnreadThreadsCountMiddleware(MiddlewareMixin):
  6. def process_request(self, request):
  7. if request.user.is_anonymous:
  8. return
  9. if not request.user_acl["can_use_private_threads"]:
  10. return
  11. if not request.user.sync_unread_private_threads:
  12. return
  13. participated_threads = request.user.threadparticipant_set.values("thread_id")
  14. category = Category.objects.private_threads()
  15. threads = Thread.objects.filter(category=category, id__in=participated_threads)
  16. new_threads = filter_read_threads_queryset(request, [category], "new", threads)
  17. unread_threads = filter_read_threads_queryset(
  18. request, [category], "unread", threads
  19. )
  20. request.user.unread_private_threads = (
  21. new_threads.count() + unread_threads.count()
  22. )
  23. request.user.sync_unread_private_threads = False
  24. request.user.save(
  25. update_fields=["unread_private_threads", "sync_unread_private_threads"]
  26. )