From b68b6b67cbb76321cb005f775ab65f04d5802a54 Mon Sep 17 00:00:00 2001 From: Matheus Faria Date: Tue, 13 Oct 2015 16:31:39 -0300 Subject: [PATCH] Refactored ThreadDashboard --- colab/super_archives/models.py | 16 ++++++++++++++++ colab/super_archives/templates/superarchives/thread-dashboard.html | 16 ++++++++-------- colab/super_archives/tests/test_privatelist.py | 6 +++--- colab/super_archives/views.py | 16 +--------------- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/colab/super_archives/models.py b/colab/super_archives/models.py index 9f8fc68..2f03022 100644 --- a/colab/super_archives/models.py +++ b/colab/super_archives/models.py @@ -88,6 +88,8 @@ class MailingList(models.Model): last_imported_index = models.IntegerField(default=0) is_private = models.BooleanField(default=False) + _max_latest_threads = 6 + def update_privacy(self): self.is_private = mailman.is_private_list(self.name) @@ -100,6 +102,20 @@ class MailingList(models.Model): return u'{}?{}'.format(reverse('haystack_search'), urllib.urlencode(params)) + def get_latest(self): + not_spam_latest = self.thread_set.filter(spam=False) + ordered_latest = not_spam_latest.order_by( + '-latest_message__received_time') + return ordered_latest[:self._max_latest_threads] + + def get_most_relevant(self): + all_most_relevant = Thread.highest_score.filter( + mailinglist__name=self.name)[:self._max_latest_threads] + return [thread.latest_message for thread in all_most_relevant] + + def get_number_of_users(self): + return len(mailman.list_users(self.name)) + def __unicode__(self): return self.name diff --git a/colab/super_archives/templates/superarchives/thread-dashboard.html b/colab/super_archives/templates/superarchives/thread-dashboard.html index 1d336f4..9de7810 100644 --- a/colab/super_archives/templates/superarchives/thread-dashboard.html +++ b/colab/super_archives/templates/superarchives/thread-dashboard.html @@ -7,11 +7,11 @@

{% trans 'Groups'|title %}


- {% for listname, description, latest, most_relevant, number_of_users in lists %} - {% if latest or most_relevant %} -

{{ listname|title|lower }} {% if description %} ({{ description }}){% endif %}

+ {% for mailinglist in lists %} + {% if mailinglist.get_latest or mailinglist.get_most_relevant %} +

{{ mailinglist.name|title|lower }} {% if mailinglist.description %} ({{ mailinglist.description }}){% endif %}

- {% blocktrans %}{{ number_of_users }} members{% endblocktrans %} + {% blocktrans with number_of_users=mailinglist.get_number_of_users %}{{ number_of_users }} members{% endblocktrans %}

@@ -19,12 +19,12 @@

{% trans 'latest'|title %}

@@ -33,12 +33,12 @@

{% trans 'most relevant'|title %}

    - {% for thread in most_relevant %} + {% for thread in mailinglist.get_most_relevant %} {% include "message-preview.html" with result=thread %} {% endfor %}
diff --git a/colab/super_archives/tests/test_privatelist.py b/colab/super_archives/tests/test_privatelist.py index 4f75103..5a42941 100644 --- a/colab/super_archives/tests/test_privatelist.py +++ b/colab/super_archives/tests/test_privatelist.py @@ -27,8 +27,8 @@ class ArchivesViewTest(TestCase): list_data = request.context['lists'] - self.assertEqual('lista', list_data[0][0]) - self.assertEqual('privatelist', list_data[1][0]) + self.assertEqual('lista', list_data[0].name) + self.assertEqual('privatelist', list_data[1].name) self.assertEqual(2, len(list_data)) def test_see_only_public_if_not_logged_in(self): @@ -36,7 +36,7 @@ class ArchivesViewTest(TestCase): list_data = request.context['lists'] - self.assertEqual('lista', list_data[0][0]) + self.assertEqual('lista', list_data[0].name) self.assertEqual(1, len(list_data)) def test_see_private_thread_in_dashboard_if_member(self): diff --git a/colab/super_archives/views.py b/colab/super_archives/views.py index 1b6ec40..a21964d 100644 --- a/colab/super_archives/views.py +++ b/colab/super_archives/views.py @@ -144,9 +144,6 @@ class ThreadDashboardView(ListView): template_name = 'superarchives/thread-dashboard.html' def get_queryset(self): - MAX = 6 - queryset = [] - listnames_for_user = [] if self.request.user.is_authenticated(): user = User.objects.get(username=self.request.user) @@ -155,19 +152,8 @@ class ThreadDashboardView(ListView): lists_for_user) query = Q(is_private=False) | Q(name__in=listnames_for_user) - for list_ in MailingList.objects.filter(query).order_by('name'): - queryset.append(( - list_.name, - mailman.get_list_description(list_.name), - list_.thread_set.filter(spam=False).order_by( - '-latest_message__received_time' - )[:MAX], - [t.latest_message for t in Thread.highest_score.filter( - mailinglist__name=list_.name)[:MAX]], - len(mailman.list_users(list_.name)), - )) - return queryset + return MailingList.objects.filter(query).order_by('name') class EmailView(View): -- libgit2 0.21.2