uri: @json['id'],
created_at: @json['published'],
override_timestamps: @options[:override_timestamps],
- visibility: original_status.visibility
+ visibility: visibility_from_audience
)
distribute(status)
private
+ def visibility_from_audience
+ if equals_or_includes?(@json['to'], ActivityPub::TagManager::COLLECTIONS[:public])
+ :public
+ elsif equals_or_includes?(@json['cc'], ActivityPub::TagManager::COLLECTIONS[:public])
+ :unlisted
+ elsif equals_or_includes?(@json['to'], @account.followers_url)
+ :private
+ else
+ :direct
+ end
+ end
+
def announceable?(status)
status.account_id == @account.id || status.public_visibility? || status.unlisted_visibility?
end
return if direct_visibility?
account&.increment_count!(:statuses_count)
- reblog&.increment_count!(:reblogs_count) if reblog?
+ reblog&.increment_count!(:reblogs_count) if reblog? && (public_visibility? || unlisted_visibility?)
thread&.increment_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
end
return if direct_visibility? || marked_for_mass_destruction?
account&.decrement_count!(:statuses_count)
- reblog&.decrement_count!(:reblogs_count) if reblog?
+ reblog&.decrement_count!(:reblogs_count) if reblog? && (public_visibility? || unlisted_visibility?)
thread&.decrement_count!(:replies_count) if in_reply_to_id.present? && (public_visibility? || unlisted_visibility?)
end