diff --git a/misago/readtracker/threadstracker.py b/misago/readtracker/threadstracker.py index 3132aa40b7..e5c4d67b62 100644 --- a/misago/readtracker/threadstracker.py +++ b/misago/readtracker/threadstracker.py @@ -3,7 +3,7 @@ from .cutoffdate import get_cutoff_date -def make_read_aware(request, threads): +def make_read_aware(request, threads, update_unread_private_threads=False): if not threads: return @@ -29,6 +29,9 @@ def make_read_aware(request, threads): unread_threads = list(queryset) + if update_unread_private_threads: + request.user.unread_private_threads = len(unread_threads) + for thread in threads: if thread.pk in unread_threads: thread.is_read = False diff --git a/misago/threads/viewmodels/threads.py b/misago/threads/viewmodels/threads.py index 8a54d5849d..11e2f8cf05 100644 --- a/misago/threads/viewmodels/threads.py +++ b/misago/threads/viewmodels/threads.py @@ -69,6 +69,7 @@ def __init__(self, request, category, list_type, start=0): except (EmptyPage, InvalidPage): raise Http404() + update_unread_private_threads = False if list_page.first: pinned_threads = list( self.get_pinned_threads( @@ -76,6 +77,14 @@ def __init__(self, request, category, list_type, start=0): ) ) threads = list(pinned_threads) + list(list_page.object_list) + if category_model.name == "Private": + if not list_page.has_next(): + update_unread_private_threads = True + elif threads and threads[-1].last_post_on < get_cutoff_date( + request.settings, request.user + ): + update_unread_private_threads = True + else: threads = list(list_page.object_list) @@ -89,7 +98,9 @@ def __init__(self, request, category, list_type, start=0): thread.is_read = False thread.is_new = True else: - threadstracker.make_read_aware(request, threads) + threadstracker.make_read_aware( + request, threads, update_unread_private_threads + ) self.filter_threads(request, threads)