Mercurial > public > sg101
changeset 445:e9f203c5f5bb
Attempting to fix #218; update the topic last visit time with 'now' when viewing the last page of a topic, otherwise use the creation time of the last post on the page.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Wed, 08 Jun 2011 00:24:41 +0000 |
parents | a0847158cf72 |
children | 72ef6e809f79 |
files | gpp/forums/models.py gpp/forums/views/main.py |
diffstat | 2 files changed, 14 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/gpp/forums/models.py Sat Jun 04 19:10:34 2011 +0000 +++ b/gpp/forums/models.py Wed Jun 08 00:24:41 2011 +0000 @@ -393,7 +393,7 @@ self.last_visit.strftime('%Y-%m-%d %H:%M:%S')) def save(self, *args, **kwargs): - if self.id is None: + if self.last_visit is None: self.touch() super(TopicLastVisit, self).save(*args, **kwargs)
--- a/gpp/forums/views/main.py Sat Jun 04 19:10:34 2011 +0000 +++ b/gpp/forums/views/main.py Wed Jun 08 00:24:41 2011 +0000 @@ -184,9 +184,11 @@ profile_keys = [profile.id for profile in profiles] user_profiles = dict((profile.user.id, profile) for profile in profiles) + last_post_on_page = None for post in page.object_list: post.user.user_profile = user_profiles[post.user.id] post.attach_list = [] + last_post_on_page = post # Attach badge ownership info to the user profiles to avoid lots # of database hits in the template: @@ -210,8 +212,12 @@ last_page = page_num == paginator.num_pages - if request.user.is_authenticated() and last_page: - _update_last_visit(request.user, topic) + if request.user.is_authenticated(): + if last_page or last_post_on_page is None: + visit_time = datetime.datetime.now() + else: + visit_time = last_post_on_page.creation_date + _update_last_visit(request.user, topic, visit_time) # we do this for the template since it is rendered twice page_nav = render_to_string('forums/pagination.html', {'page': page}) @@ -342,7 +348,6 @@ post.user.user_profile = request.user.get_profile() post.attach_list = post.attachments.all() _bump_post_count(request.user) - _update_last_visit(request.user, form.topic) return render_to_response('forums/display_post.html', { 'post': post, @@ -590,7 +595,6 @@ form.attach_proc.save_attachments(post) _bump_post_count(request.user) - _update_last_visit(request.user, topic) return HttpResponseRedirect(post.get_absolute_url()) else: quote_id = request.GET.get('quote') @@ -1065,7 +1069,7 @@ _move_topic(topic, old_forum, new_forum) -def _update_last_visit(user, topic): +def _update_last_visit(user, topic, visit_time): """ Does the bookkeeping for the last visit status for the user to the topic/forum. @@ -1084,10 +1088,11 @@ try: tlv = TopicLastVisit.objects.get(user=user, topic=topic) except TopicLastVisit.DoesNotExist: - tlv = TopicLastVisit(user=user, topic=topic) + tlv = TopicLastVisit(user=user, topic=topic, last_visit=datetime.datetime.min) - tlv.touch() - tlv.save() + if visit_time > tlv.last_visit: + tlv.last_visit = visit_time + tlv.save() def _split_topic_at(topic, post_id, new_forum, new_name):