FEATURE: Add last visit indication to topic view page. (#13471)

This PR also removes grey old unread bubble from the topic badges by
dropping `TopicUser#highest_seen_post_number`.
This commit is contained in:
Alan Guo Xiang Tan
2021-07-05 14:17:31 +08:00
committed by GitHub
parent 0f688f45bd
commit 37b8ce79c9
64 changed files with 306 additions and 312 deletions

View File

@ -2,7 +2,7 @@
class Unread
# This module helps us calculate unread and new post counts
# This module helps us calculate unread post counts
def initialize(topic, topic_user, guardian)
@guardian = guardian
@ -11,29 +11,27 @@ class Unread
end
def unread_posts
return 0 if do_not_notify?(@topic_user.notification_level)
result = ((@topic_user.highest_seen_post_number || 0) - (@topic_user.last_read_post_number || 0))
result = 0 if result < 0
result
end
def new_posts
return 0 if @topic_user.highest_seen_post_number.blank?
return 0 if @topic_user.last_read_post_number.blank?
return 0 if do_not_notify?(@topic_user.notification_level)
highest_post_number = @guardian.is_staff? ? @topic.highest_staff_post_number : @topic.highest_post_number
return 0 if (@topic_user.last_read_post_number || 0) > highest_post_number
return 0 if @topic_user.last_read_post_number > highest_post_number
new_posts = (highest_post_number - @topic_user.highest_seen_post_number)
new_posts = 0 if new_posts < 0
new_posts
unread = (highest_post_number - @topic_user.last_read_post_number)
unread = 0 if unread < 0
unread
end
protected
DO_NOT_NOTIFY_LEVELS = [
TopicUser.notification_levels[:muted],
TopicUser.notification_levels[:regular]
]
def do_not_notify?(notification_level)
[TopicUser.notification_levels[:muted], TopicUser.notification_levels[:regular]].include?(notification_level)
DO_NOT_NOTIFY_LEVELS.include?(notification_level)
end
end