diff options
Diffstat (limited to 'app/services/notify_service.rb')
-rw-r--r-- | app/services/notify_service.rb | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb new file mode 100644 index 000000000..c0f1d4c53 --- /dev/null +++ b/app/services/notify_service.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +class NotifyService < BaseService + def call(recipient, activity) + @recipient = recipient + @activity = activity + @notification = Notification.new(account: @recipient, activity: @activity) + + return if blocked? + + create_notification + send_email if email_enabled? + end + + private + + def blocked_mention? + FeedManager.instance.filter?(:mentions, @notification.mention.status, @recipient) + end + + def blocked_favourite? + false + end + + def blocked_follow? + false + end + + def blocked_reblog? + false + end + + def blocked? + blocked = false + blocked ||= @recipient.id == @notification.from_account.id + blocked ||= @recipient.blocking?(@notification.from_account) + blocked ||= send("blocked_#{@notification.type}?") + blocked + end + + def create_notification + @notification.save! + FeedManager.instance.broadcast(@recipient.id, type: 'notification', message: FeedManager.instance.inline_render(@recipient, 'api/v1/notifications/show', @notification)) + end + + def send_email + NotificationMailer.send(@notification.type, @recipient, @notification).deliver_later + end + + def email_enabled? + @recipient.user.settings(:notification_emails).send(@notification.type) + end +end |