|
|
- # 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?
- rescue ActiveRecord::RecordInvalid
- return
- 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
|