about summary refs log tree commit diff
path: root/app/lib/activitypub/activity/create.rb
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2018-10-30 17:52:08 +0100
committerThibaut Girka <thib@sitedethib.com>2018-10-30 17:52:08 +0100
commit1c448d647488dc3dd3b72e9fe15efb971612157c (patch)
tree2b31e4ed019a29043aa07d9d95e7f8b64e309bbd /app/lib/activitypub/activity/create.rb
parent7e18e95716052d5566f2e31559cbe4a68268f493 (diff)
parent66019b0ec4aaa584e58e91583425ed7c0d55c28e (diff)
Merge branch 'master' into glitch-soc/merge-upstream
Conflicts:
- app/controllers/auth/sessions_controller.rb

Upstream reverted something we partially reverted already.
Reverted the rest to match upstream.
Diffstat (limited to 'app/lib/activitypub/activity/create.rb')
-rw-r--r--app/lib/activitypub/activity/create.rb20
1 files changed, 19 insertions, 1 deletions
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
index baa05e14c..45079e2b3 100644
--- a/app/lib/activitypub/activity/create.rb
+++ b/app/lib/activitypub/activity/create.rb
@@ -10,7 +10,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
     RedisLock.acquire(lock_options) do |lock|
       if lock.acquired?
         @status = find_existing_status
-        process_status if @status.nil?
+
+        if @status.nil?
+          process_status
+        elsif @options[:delivered_to_account_id].present?
+          postprocess_audience_and_deliver
+        end
       else
         raise Mastodon::RaceConditionError
       end
@@ -99,6 +104,19 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
     @params[:visibility] = :limited
   end
 
+  def postprocess_audience_and_deliver
+    return if @status.mentions.find_by(account_id: @options[:delivered_to_account_id])
+
+    delivered_to_account = Account.find(@options[:delivered_to_account_id])
+
+    @status.mentions.create(account: delivered_to_account, silent: true)
+    @status.update(visibility: :limited) if @status.direct_visibility?
+
+    return unless delivered_to_account.following?(@account)
+
+    FeedInsertWorker.perform_async(@status.id, delivered_to_account.id, :home)
+  end
+
   def attach_tags(status)
     @tags.each do |tag|
       status.tags << tag