Add: #87 フォロワーのみに購読を許可する設定 (#239)

* Wip: マイグレーション、設定など一式

* Fix test

* Fix test

* Fix: マスター用の設定を他サーバーに送信しないよう修正

* DTL、外部サーバーの情報受け入れのテストを追加

* スペルミスを修正

* Web画面に設定項目追加

* 既存の`master_settings`を上書きしないよう修正
This commit is contained in:
KMY(雪あすか) 2023-11-08 17:51:36 +09:00 committed by GitHub
parent a7dec3c59b
commit 76f2f2ed0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
26 changed files with 284 additions and 52 deletions

View file

@ -23,8 +23,10 @@ class DeliveryAntennaService
private
def delivery!
must_dtl_tag = @account.dissubscribable
return if must_dtl_tag && !DTL_ENABLED
subscription_policy = @account.subscription_policy
dtl_post = @status.dtl? && dtl_enabled?
return if subscription_policy == :block && (!dtl_post || !@account.user&.setting_dtl_force_subscribable)
tag_ids = @status.tags.pluck(:id)
domain = @account.domain
@ -38,8 +40,8 @@ class DeliveryAntennaService
antennas = antennas.left_joins(:antenna_accounts).where(any_accounts: true).or(Antenna.left_joins(:antenna_accounts).where(antenna_accounts: { account: @account }))
antennas = Antenna.where(id: antennas.select(:id))
if must_dtl_tag
dtl_tag = Tag.find_or_create_by_names(DTL_TAG).first
if subscription_policy == :block
dtl_tag = Tag.find_or_create_by_names(dtl_tag_name).first
return if !dtl_tag || tag_ids.exclude?(dtl_tag.id)
antennas = antennas.left_joins(:antenna_tags).where(antenna_tags: { tag_id: dtl_tag.id })
@ -125,9 +127,9 @@ class DeliveryAntennaService
def followers_only?
case @status.visibility.to_sym
when :public, :public_unlisted, :login, :limited
false
@status.account.subscription_policy == :followers_only
when :unlisted
@status.compute_searchability != 'public'
@status.compute_searchability != 'public' || @status.account.subscription_policy == :followers_only
else
true
end