Browse Source

Improved checkpoints implementation. #168

Ralfp 12 years ago
parent
commit
653001a239
2 changed files with 14 additions and 9 deletions
  1. 6 4
      misago/apps/threadtype/thread/views.py
  2. 8 5
      misago/models/threadmodel.py

+ 6 - 4
misago/apps/threadtype/thread/views.py

@@ -48,11 +48,11 @@ class ThreadBaseView(ViewBase):
         except Http404:
         except Http404:
             return redirect(reverse(self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}))
             return redirect(reverse(self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}))
 
 
-        checkpoints_range = None
+        checkpoints_boundary = None
         if settings.posts_per_page < self.count:
         if settings.posts_per_page < self.count:
             self.posts = self.posts[self.pagination['start']:self.pagination['stop'] + 1]
             self.posts = self.posts[self.pagination['start']:self.pagination['stop'] + 1]
             posts_len = len(self.posts)
             posts_len = len(self.posts)
-            checkpoints_range = self.posts[posts_len - 1].date
+            checkpoints_boundary = self.posts[posts_len - 1].date
             self.posts = self.posts[0:(posts_len - 2)]
             self.posts = self.posts[0:(posts_len - 2)]
 
 
         self.read_date = self.tracker.read_date(self.thread)
         self.read_date = self.tracker.read_date(self.thread)
@@ -71,8 +71,10 @@ class ThreadBaseView(ViewBase):
             if post.ignored:
             if post.ignored:
                 self.ignored = True
                 self.ignored = True
 
 
-        self.thread.set_checkpoints(self.request.acl.threads.can_see_all_checkpoints(self.forum),
-                                    self.posts, checkpoints_range)
+        self.thread.add_checkpoints_to_posts(self.request.acl.threads.can_see_all_checkpoints(self.forum),
+                                             self.posts,
+                                             (self.posts.date if self.pagination['page'] > 1 else None),
+                                             checkpoints_boundary)
 
 
         last_post = self.posts[len(self.posts) - 1]
         last_post = self.posts[len(self.posts) - 1]
 
 

+ 8 - 5
misago/models/threadmodel.py

@@ -99,19 +99,22 @@ class Thread(models.Model):
     def get_date(self):
     def get_date(self):
         return self.start
         return self.start
 
 
-    def set_checkpoints(self, show_all, posts, stop=None):
-        qs = self.checkpoint_set.filter(date__gte=posts[0].date)
-        if not show_all:
-            qs = qs.filter(deleted=False)
+    def add_checkpoints_to_posts(self, show_all, posts, start=None, stop=None):
+        qs = self.checkpoint_set.all()
+        if start:
+            qs = qs.filter(date__gte=start)
         if stop:
         if stop:
             qs = qs.filter(date__lte=stop)
             qs = qs.filter(date__lte=stop)
+        if not show_all:
+            qs = qs.filter(deleted=False)
         checkpoints = [i for i in qs]
         checkpoints = [i for i in qs]
 
 
         i_max = len(posts) - 1
         i_max = len(posts) - 1
         for i, post in enumerate(posts):
         for i, post in enumerate(posts):
             post.checkpoints_visible = []
             post.checkpoints_visible = []
             for c in checkpoints:
             for c in checkpoints:
-                if c.date >= post.date and (i == i_max or c.date < posts[i+1].date):
+                if ((i == 0 and c.date <= post.date)
+                        or (c.date >= post.date and (i == i_max or c.date < posts[i+1].date))):
                     post.checkpoints_visible.append(c)
                     post.checkpoints_visible.append(c)
 
 
     def set_checkpoint(self, request, action, user=None, forum=None):
     def set_checkpoint(self, request, action, user=None, forum=None):