This repository has been archived on 2024-06-09. You can view files and clone it, but cannot push or open issues/pull-requests.
2017-07-13 22:15:32 +02:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class WebPushNotificationWorker
|
|
|
|
include Sidekiq::Worker
|
|
|
|
|
|
|
|
sidekiq_options backtrace: true
|
|
|
|
|
|
|
|
def perform(recipient_id, notification_id)
|
|
|
|
recipient = Account.find(recipient_id)
|
|
|
|
notification = Notification.find(notification_id)
|
|
|
|
|
|
|
|
sessions_with_subscriptions = recipient.user.session_activations.reject { |session| session.web_push_subscription.nil? }
|
|
|
|
|
|
|
|
sessions_with_subscriptions.each do |session|
|
|
|
|
begin
|
|
|
|
session.web_push_subscription.push(notification)
|
|
|
|
rescue Webpush::InvalidSubscription, Webpush::ExpiredSubscription
|
|
|
|
# Subscription expiration is not currently implemented in any browser
|
|
|
|
session.web_push_subscription.destroy!
|
2017-07-17 11:03:42 +02:00
|
|
|
session.update!(web_push_subscription: nil)
|
2017-07-13 22:15:32 +02:00
|
|
|
rescue Webpush::PayloadTooLarge => e
|
|
|
|
Rails.logger.error(e)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|