middleware.py 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. from misago.categories.models import Category
  2. from .models import Thread
  3. from .permissions import exclude_invisible_threads
  4. from .viewmodels import filter_read_threads_queryset
  5. class UnreadThreadsCountMiddleware(object):
  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. participated_threads = request.user.threadparticipant_set.values('thread_id')
  12. category = Category.objects.private_threads()
  13. threads = Thread.objects.filter(
  14. category=category,
  15. id__in=participated_threads
  16. )
  17. new_threads = filter_read_threads_queryset(request.user, [category], 'new', threads)
  18. unread_threads = filter_read_threads_queryset(request.user, [category], 'unread', threads)
  19. request.user.unread_private_threads = new_threads.count() + unread_threads.count()
  20. request.user.sync_unread_private_threads = False
  21. request.user.save(update_fields=[
  22. 'unread_private_threads',
  23. 'sync_unread_private_threads',
  24. ])