Fix duplicate notifications being possible after poll expiration (#17697)
parent
04c3ac896a
commit
2ea754b861
|
@ -13,7 +13,7 @@ class Api::V1::FollowRequestsController < Api::BaseController
|
||||||
|
|
||||||
def authorize
|
def authorize
|
||||||
AuthorizeFollowService.new.call(account, current_account)
|
AuthorizeFollowService.new.call(account, current_account)
|
||||||
NotifyService.new.call(current_account, :follow, Follow.find_by(account: account, target_account: current_account))
|
LocalNotificationWorker.perform_async(current_account.id, Follow.find_by(account: account, target_account: current_account).id, 'Follow', 'follow')
|
||||||
render json: account, serializer: REST::RelationshipSerializer, relationships: relationships
|
render json: account, serializer: REST::RelationshipSerializer, relationships: relationships
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ class ActivityPub::Activity::Announce < ActivityPub::Activity
|
||||||
|
|
||||||
def distribute
|
def distribute
|
||||||
# Notify the author of the original status if that status is local
|
# Notify the author of the original status if that status is local
|
||||||
NotifyService.new.call(@status.reblog.account, :reblog, @status) if reblog_of_local_account?(@status) && !reblog_by_following_group_account?(@status)
|
LocalNotificationWorker.perform_async(@status.reblog.account_id, @status.id, 'Status', 'reblog') if reblog_of_local_account?(@status) && !reblog_by_following_group_account?(@status)
|
||||||
|
|
||||||
# Distribute into home and list feeds
|
# Distribute into home and list feeds
|
||||||
::DistributionWorker.perform_async(@status.id) if @options[:override_timestamps] || @status.within_realtime_window?
|
::DistributionWorker.perform_async(@status.id) if @options[:override_timestamps] || @status.within_realtime_window?
|
||||||
|
|
|
@ -31,10 +31,10 @@ class ActivityPub::Activity::Follow < ActivityPub::Activity
|
||||||
follow_request = FollowRequest.create!(account: @account, target_account: target_account, uri: @json['id'])
|
follow_request = FollowRequest.create!(account: @account, target_account: target_account, uri: @json['id'])
|
||||||
|
|
||||||
if target_account.locked? || @account.silenced?
|
if target_account.locked? || @account.silenced?
|
||||||
NotifyService.new.call(target_account, :follow_request, follow_request)
|
LocalNotificationWorker.perform_async(target_account.id, follow_request.id, 'FollowRequest', 'follow_request')
|
||||||
else
|
else
|
||||||
AuthorizeFollowService.new.call(@account, target_account)
|
AuthorizeFollowService.new.call(@account, target_account)
|
||||||
NotifyService.new.call(target_account, :follow, ::Follow.find_by(account: @account, target_account: target_account))
|
LocalNotificationWorker.perform_async(target_account.id, ::Follow.find_by(account: @account, target_account: target_account).id, 'Follow', 'follow')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity
|
||||||
|
|
||||||
favourite = original_status.favourites.create!(account: @account)
|
favourite = original_status.favourites.create!(account: @account)
|
||||||
|
|
||||||
NotifyService.new.call(original_status.account, :favourite, favourite)
|
LocalNotificationWorker.perform_async(original_status.account_id, favourite.id, 'Favourite', 'favourite')
|
||||||
Trends.statuses.register(original_status)
|
Trends.statuses.register(original_status)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -18,7 +18,7 @@ class BootstrapTimelineService < BaseService
|
||||||
|
|
||||||
def notify_staff!
|
def notify_staff!
|
||||||
User.staff.includes(:account).find_each do |user|
|
User.staff.includes(:account).find_each do |user|
|
||||||
NotifyService.new.call(user.account, :'admin.sign_up', @source_account)
|
LocalNotificationWorker.perform_async(user.account_id, @source_account.id, 'Account', 'admin.sign_up')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,7 +31,7 @@ class FavouriteService < BaseService
|
||||||
status = favourite.status
|
status = favourite.status
|
||||||
|
|
||||||
if status.account.local?
|
if status.account.local?
|
||||||
NotifyService.new.call(status.account, :favourite, favourite)
|
LocalNotificationWorker.perform_async(status.account_id, favourite.id, 'Favourite', 'favourite')
|
||||||
elsif status.account.activitypub?
|
elsif status.account.activitypub?
|
||||||
ActivityPub::DeliveryWorker.perform_async(build_json(favourite), favourite.account_id, status.account.inbox_url)
|
ActivityPub::DeliveryWorker.perform_async(build_json(favourite), favourite.account_id, status.account.inbox_url)
|
||||||
end
|
end
|
||||||
|
|
|
@ -66,7 +66,7 @@ class FeedInsertWorker
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform_notify
|
def perform_notify
|
||||||
NotifyService.new.call(@follower, :status, @status)
|
LocalNotificationWorker.perform_async(@follower.id, @status.id, 'Status', 'status')
|
||||||
end
|
end
|
||||||
|
|
||||||
def update?
|
def update?
|
||||||
|
|
|
@ -38,12 +38,14 @@ class PollExpirationNotifyWorker
|
||||||
|
|
||||||
def notify_remote_voters_and_owner!
|
def notify_remote_voters_and_owner!
|
||||||
ActivityPub::DistributePollUpdateWorker.perform_async(@poll.status.id)
|
ActivityPub::DistributePollUpdateWorker.perform_async(@poll.status.id)
|
||||||
NotifyService.new.call(@poll.account, :poll, @poll)
|
LocalNotificationWorker.perform_async(@poll.account_id, @poll.id, 'Poll', 'poll')
|
||||||
end
|
end
|
||||||
|
|
||||||
def notify_local_voters!
|
def notify_local_voters!
|
||||||
@poll.voters.merge(Account.local).find_each do |account|
|
@poll.voters.merge(Account.local).select(:id).find_in_batches do |accounts|
|
||||||
NotifyService.new.call(account, :poll, @poll)
|
LocalNotificationWorker.push_bulk(accounts) do |account|
|
||||||
|
[account.id, @poll.id, 'Poll', 'poll']
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Reference in New Issue