about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFire Demon <firedemon@creature.cafe>2020-10-10 03:15:43 -0500
committerFire Demon <firedemon@creature.cafe>2020-10-10 03:15:43 -0500
commit7c9d81ea86d59df03ef1837f686913867deeffda (patch)
tree962d711cd9f077667e2b30121d638bf2f6349fb8
parentf89fd296ce59f00db47bfe85305b87aa3f3fdc00 (diff)
Hard delete unpublished statuses when "unpublish on delete" is not enabled
-rw-r--r--app/controllers/api/v1/statuses_controller.rb4
-rw-r--r--app/services/remove_status_service.rb4
2 files changed, 3 insertions, 5 deletions
diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb
index b0cc95118..c7c429bfb 100644
--- a/app/controllers/api/v1/statuses_controller.rb
+++ b/app/controllers/api/v1/statuses_controller.rb
@@ -100,9 +100,9 @@ class Api::V1::StatusesController < Api::BaseController
     @status = Status.where(account_id: current_user.account).find(params[:id])
     authorize @status, :destroy?
 
-    if !current_user.setting_unpublish_on_delete || !@status.published? || truthy_param?(:redraft)
+    if !(current_user.setting_unpublish_on_delete && @status.published?) || truthy_param?(:redraft)
       @status.discard
-      RemovalWorker.perform_async(@status.id, redraft: true, immediate: !current_user.setting_unpublish_on_delete)
+      RemovalWorker.perform_async(@status.id, redraft: true, unpublished: true)
       @status.account.statuses_count = @status.account.statuses_count - 1
     else
       RemovalWorker.perform_async(@status.id, redraft: true, unpublish: true)
diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb
index ca7f830ec..29c835051 100644
--- a/app/services/remove_status_service.rb
+++ b/app/services/remove_status_service.rb
@@ -19,8 +19,6 @@ class RemoveStatusService < BaseService
     @reblogs  = status.reblogs.includes(:account).to_a
     @options  = options
 
-    return unless status.published? || @options[:unpublished]
-
     RedisLock.acquire(lock_options) do |lock|
       if lock.acquired?
         remove_from_self if status.account.local? && !@options[:unpublish]
@@ -51,7 +49,7 @@ class RemoveStatusService < BaseService
     # original object being removed implicitly removes reblogs
     # of it. The Delete activity of the original is forwarded
     # separately.
-    return if !@account.local? || @options[:original_removed]
+    return if !@account.local? || @options[:original_removed] || !(status.published? || @options[:unpublished])
 
     remove_from_remote_followers
     remove_from_remote_affected