middleware.py 1.3 KB

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