Skip to content

Commit 51e4208

Browse files
Gargronhiyuki2578
authored andcommitted
Add support for non-public reblogs from ActivityPub (mastodon#9841)
Fix mastodon#9838
1 parent e88e2a8 commit 51e4208

2 files changed

Lines changed: 15 additions & 3 deletions

File tree

app/lib/activitypub/activity/announce.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def perform
1717
uri: @json['id'],
1818
created_at: @json['published'],
1919
override_timestamps: @options[:override_timestamps],
20-
visibility: original_status.visibility
20+
visibility: visibility_from_audience
2121
)
2222

2323
distribute(status)
@@ -26,6 +26,18 @@ def perform
2626

2727
private
2828

29+
def visibility_from_audience
30+
if equals_or_includes?(@json['to'], ActivityPub::TagManager::COLLECTIONS[:public])
31+
:public
32+
elsif equals_or_includes?(@json['cc'], ActivityPub::TagManager::COLLECTIONS[:public])
33+
:unlisted
34+
elsif equals_or_includes?(@json['to'], @account.followers_url)
35+
:private
36+
else
37+
:direct
38+
end
39+
end
40+
2941
def announceable?(status)
3042
status.account_id == @account.id || status.public_visibility? || status.unlisted_visibility?
3143
end

app/models/status.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -481,15 +481,15 @@ def increment_counter_caches
481481
return if direct_visibility?
482482

483483
account&.increment_count!(:statuses_count)
484-
reblog&.increment_count!(:reblogs_count) if reblog?
484+
reblog&.increment_count!(:reblogs_count) if reblog? && (public_visibility? || unlisted_visibility?)
485485
thread&.increment_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
486486
end
487487

488488
def decrement_counter_caches
489489
return if direct_visibility? || marked_for_mass_destruction?
490490

491491
account&.decrement_count!(:statuses_count)
492-
reblog&.decrement_count!(:reblogs_count) if reblog?
492+
reblog&.decrement_count!(:reblogs_count) if reblog? && (public_visibility? || unlisted_visibility?)
493493
thread&.decrement_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
494494
end
495495

0 commit comments

Comments
 (0)