list.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from itertools import chain
  2. from django.utils.translation import ugettext as _
  3. from misago.apps.threadtype.list import ThreadsListBaseView, ThreadsListModeration
  4. from misago.models import Forum, Thread
  5. from misago.readstrackers import ThreadsTracker
  6. from misago.utils.pagination import make_pagination
  7. from misago.apps.privatethreads.mixins import TypeMixin
  8. class AllThreadsListView(ThreadsListBaseView, ThreadsListModeration, TypeMixin):
  9. def fetch_forum(self):
  10. self.forum = Forum.objects.get(special='private_threads')
  11. def threads_queryset(self):
  12. return self.forum.thread_set.filter(participants__id=self.request.user.pk).order_by('-last')
  13. def fetch_threads(self):
  14. qs_threads = self.threads_queryset()
  15. # Add in first and last poster
  16. if self.request.settings.avatars_on_threads_list:
  17. qs_threads = qs_threads.prefetch_related('start_poster', 'last_poster')
  18. self.count = qs_threads.count()
  19. self.pagination = make_pagination(self.kwargs.get('page', 0), self.count, self.request.settings.threads_per_page)
  20. tracker_forum = ThreadsTracker(self.request, self.forum)
  21. for thread in qs_threads[self.pagination['start']:self.pagination['stop']]:
  22. thread.is_read = tracker_forum.is_read(thread)
  23. self.threads.append(thread)
  24. def template_vars(self, context):
  25. context['tab'] = 'all'
  26. return context
  27. class MyThreadsListView(AllThreadsListView, ThreadsListModeration, TypeMixin):
  28. def threads_queryset(self):
  29. return self.forum.thread_set.filter(start_poster_id=self.request.user.pk).order_by('-last')
  30. def template_vars(self, context):
  31. context['tab'] = 'my'
  32. return context