2013-02-06 03:16:51 +08:00
|
|
|
class Unread
|
|
|
|
|
|
|
|
# This module helps us calculate unread and new post counts
|
|
|
|
|
2016-12-02 14:03:31 +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 do_not_notify?(@topic_user.notification_level)
|
2014-10-31 06:40:35 +08:00
|
|
|
result = ((@topic_user.highest_seen_post_number||0) - (@topic_user.last_read_post_number||0))
|
2013-02-26 00:42:20 +08:00
|
|
|
result = 0 if result < 0
|
|
|
|
result
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def new_posts
|
2014-10-31 06:40:35 +08:00
|
|
|
return 0 if @topic_user.highest_seen_post_number.blank?
|
2013-02-06 03:16:51 +08:00
|
|
|
return 0 if do_not_notify?(@topic_user.notification_level)
|
|
|
|
|
2016-12-02 14:03:31 +08:00
|
|
|
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
|
|
|
|
|
|
|
|
new_posts = (highest_post_number - @topic_user.highest_seen_post_number)
|
2013-02-06 03:16:51 +08:00
|
|
|
new_posts = 0 if new_posts < 0
|
|
|
|
return new_posts
|
|
|
|
end
|
|
|
|
|
|
|
|
protected
|
|
|
|
|
|
|
|
def do_not_notify?(notification_level)
|
2013-03-07 04:17:07 +08:00
|
|
|
[TopicUser.notification_levels[:muted], TopicUser.notification_levels[:regular]].include?(notification_level)
|
2013-02-06 03:16:51 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|