discourse/lib/unread.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

38 lines
910 B
Ruby
Raw Normal View History

# frozen_string_literal: true
2013-02-06 03:16:51 +08:00
class Unread
# This module helps us calculate unread post counts
2013-02-06 03:16:51 +08:00
def initialize(topic, topic_user, guardian)
@guardian = guardian
2013-02-06 03:16:51 +08:00
@topic = topic
@topic_user = topic_user
end
def unread_posts
return 0 if @topic_user.last_read_post_number.blank?
2013-02-06 03:16:51 +08:00
return 0 if do_not_notify?(@topic_user.notification_level)
highest_post_number = @guardian.is_whisperer? ? @topic.highest_staff_post_number : @topic.highest_post_number
return 0 if @topic_user.last_read_post_number > highest_post_number
unread = (highest_post_number - @topic_user.last_read_post_number)
unread = 0 if unread < 0
unread
2013-02-06 03:16:51 +08:00
end
protected
DO_NOT_NOTIFY_LEVELS = [
TopicUser.notification_levels[:muted],
TopicUser.notification_levels[:regular]
]
2013-02-06 03:16:51 +08:00
def do_not_notify?(notification_level)
DO_NOT_NOTIFY_LEVELS.include?(notification_level)
2013-02-06 03:16:51 +08:00
end
end