Commit 06ba4bfa6d2d8505f0eadd919643bca515b2758e
Committed by
Sergio Oliveira
1 parent
256ed785
Exists in
master
and in
39 other branches
Only show mailinglists if public or user in it
Signed-off-by: Gustavo Jaruga <darksshades@gmail.com> Signed-off-by: Alexandre Barbosa <alexandreab@live.com>
Showing
2 changed files
with
28 additions
and
18 deletions
Show diff stats
colab/accounts/utils/mailman.py
| @@ -38,7 +38,7 @@ def unsubscribe(listname, address): | @@ -38,7 +38,7 @@ def unsubscribe(listname, address): | ||
| 38 | 38 | ||
| 39 | 39 | ||
| 40 | def update_subscription(address, lists): | 40 | def update_subscription(address, lists): |
| 41 | - current_lists = address_lists(address) | 41 | + current_lists = mailing_lists(address=address) |
| 42 | 42 | ||
| 43 | for maillist in current_lists: | 43 | for maillist in current_lists: |
| 44 | if maillist not in lists: | 44 | if maillist not in lists: |
| @@ -48,31 +48,32 @@ def update_subscription(address, lists): | @@ -48,31 +48,32 @@ def update_subscription(address, lists): | ||
| 48 | if maillist not in current_lists: | 48 | if maillist not in current_lists: |
| 49 | subscribe(maillist, address) | 49 | subscribe(maillist, address) |
| 50 | 50 | ||
| 51 | +def address_lists(address): | ||
| 52 | + return mailing_lists(address=address) | ||
| 51 | 53 | ||
| 52 | -def address_lists(address, description=''): | 54 | +def mailing_lists(**kwargs): |
| 53 | url = get_url() | 55 | url = get_url() |
| 54 | 56 | ||
| 55 | - params = {'address': address, | ||
| 56 | - 'description': description} | ||
| 57 | - | ||
| 58 | try: | 57 | try: |
| 59 | - lists = requests.get(url, timeout=TIMEOUT, params=params) | 58 | + lists = requests.get(url, timeout=TIMEOUT, params=kwargs) |
| 60 | except: | 59 | except: |
| 61 | LOGGER.exception('Unable to list mailing lists') | 60 | LOGGER.exception('Unable to list mailing lists') |
| 62 | return [] | 61 | return [] |
| 63 | 62 | ||
| 64 | return lists.json() | 63 | return lists.json() |
| 65 | 64 | ||
| 65 | +def is_private_list(name): | ||
| 66 | + return dict(all_lists(private=True))[name] | ||
| 66 | 67 | ||
| 67 | def all_lists(*args, **kwargs): | 68 | def all_lists(*args, **kwargs): |
| 68 | - return address_lists('', *args, **kwargs) | 69 | + return mailing_lists(*args, **kwargs) |
| 69 | 70 | ||
| 70 | 71 | ||
| 71 | def user_lists(user): | 72 | def user_lists(user): |
| 72 | list_set = set() | 73 | list_set = set() |
| 73 | 74 | ||
| 74 | for email in user.emails.values_list('address', flat=True): | 75 | for email in user.emails.values_list('address', flat=True): |
| 75 | - list_set.update(address_lists(email)) | 76 | + list_set.update(mailing_lists(address=email)) |
| 76 | 77 | ||
| 77 | return tuple(list_set) | 78 | return tuple(list_set) |
| 78 | 79 |
colab/super_archives/views.py
| @@ -123,20 +123,29 @@ class ThreadDashboardView(View): | @@ -123,20 +123,29 @@ class ThreadDashboardView(View): | ||
| 123 | MAX = 6 | 123 | MAX = 6 |
| 124 | context = {} | 124 | context = {} |
| 125 | all_lists = mailman.all_lists(description=True) | 125 | all_lists = mailman.all_lists(description=True) |
| 126 | + all_privates = dict(mailman.all_lists(private=True)) | ||
| 127 | + | ||
| 126 | 128 | ||
| 127 | context['lists'] = [] | 129 | context['lists'] = [] |
| 128 | 130 | ||
| 131 | + user = User.objects.get(username=request.user) | ||
| 132 | + emails = user.emails.values_list('address', flat=True) | ||
| 133 | + lists_for_user = [] | ||
| 134 | + for email in emails: | ||
| 135 | + lists_for_user.extend(mailman.address_lists(email)) | ||
| 136 | + | ||
| 129 | for list_ in MailingList.objects.order_by('name'): | 137 | for list_ in MailingList.objects.order_by('name'): |
| 130 | - context['lists'].append(( | ||
| 131 | - list_.name, | ||
| 132 | - mailman.get_list_description(list_.name, all_lists), | ||
| 133 | - list_.thread_set.filter(spam=False).order_by( | ||
| 134 | - '-latest_message__received_time' | ||
| 135 | - )[:MAX], | ||
| 136 | - [t.latest_message for t in Thread.highest_score.filter( | ||
| 137 | - mailinglist__name=list_.name)[:MAX]], | ||
| 138 | - len(mailman.list_users(list_.name)), | ||
| 139 | - )) | 138 | + if not all_privates[list_.name] or list_.name in lists_for_user: |
| 139 | + context['lists'].append(( | ||
| 140 | + list_.name, | ||
| 141 | + mailman.get_list_description(list_.name), | ||
| 142 | + list_.thread_set.filter(spam=False).order_by( | ||
| 143 | + '-latest_message__received_time' | ||
| 144 | + )[:MAX], | ||
| 145 | + [t.latest_message for t in Thread.highest_score.filter( | ||
| 146 | + mailinglist__name=list_.name)[:MAX]], | ||
| 147 | + len(mailman.list_users(list_.name)), | ||
| 148 | + )) | ||
| 140 | 149 | ||
| 141 | return render(request, 'superarchives/thread-dashboard.html', context) | 150 | return render(request, 'superarchives/thread-dashboard.html', context) |
| 142 | 151 |