@status = Status.where(account_id: current_user.account).find(params[:id])
authorize @status, :destroy?
- RemovalWorker.perform_async(@status.id)
+ RemovalWorker.perform_async(@status.id, redraft: true)
render json: @status, serializer: REST::StatusSerializer, source_requested: true
end
end
def delete_now!
- RemoveStatusService.new.call(@status)
+ RemoveStatusService.new.call(@status, redraft: false)
end
def payload
def delete_statuses
Status.where(id: status_ids).reorder(nil).find_each do |status|
- RemovalWorker.perform_async(status.id)
+ RemovalWorker.perform_async(status.id, redraft: false)
Tombstone.find_or_create_by(uri: status.uri, account: status.account, by_moderator: true)
log_action :destroy, status
end
# Dispatch Salmon deletes, unique per domain, of the deleted statuses, but only local ones
# Remove statuses from home feeds
# Push delete events to streaming API for home feeds and public feeds
- # @param [Status] statuses A preferably batched array of statuses
+ # @param [Enumerable<Status>] statuses A preferably batched array of statuses
# @param [Hash] options
# @option [Boolean] :skip_side_effects
def call(statuses, **options)
include Redisable
include Payloadable
+ # Delete a status
+ # @param [Status] status
+ # @param [Hash] options
+ # @option [Boolean] :redraft
+ # @options [Boolean] :original_removed
def call(status, **options)
@payload = Oj.dump(event: :delete, payload: status.id.to_s)
@status = status
remove_from_public
remove_from_media if status.media_attachments.any?
remove_from_spam_check
+ remove_media
@status.destroy!
else
redis.publish('timeline:public:local:media', @payload) if @status.local?
end
+ def remove_media
+ return if @options[:redraft]
+
+ @status.media_attachments.destroy_all
+ end
+
def remove_from_spam_check
redis.zremrangebyscore("spam_check:#{@status.account_id}", @status.id, @status.id)
end
class RemovalWorker
include Sidekiq::Worker
- def perform(status_id)
- RemoveStatusService.new.call(Status.find(status_id))
+ def perform(status_id, options = {})
+ RemoveStatusService.new.call(Status.find(status_id), **options.symbolize_keys)
rescue ActiveRecord::RecordNotFound
true
end
it 'removes a status' do
allow(RemovalWorker).to receive(:perform_async)
subject.call
- expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first)
+ expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first, redraft: false)
end
end
it 'removes a status' do
allow(RemovalWorker).to receive(:perform_async)
subject.call
- expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first)
+ expect(RemovalWorker).to have_received(:perform_async).with(status_ids.first, redraft: false)
end
end
it 'call RemovalWorker' do
form.save
- expect(RemovalWorker).to have_received(:perform_async).with(status.id)
+ expect(RemovalWorker).to have_received(:perform_async).with(status.id, redraft: false)
end
it 'do not call RemovalWorker' do
form.save
- expect(RemovalWorker).not_to have_received(:perform_async).with(another_status.id)
+ expect(RemovalWorker).not_to have_received(:perform_async).with(another_status.id, redraft: false)
end
end
end