diff --git a/app/lib/status_reach_finder.rb b/app/lib/status_reach_finder.rb index 0e04c541a1..7539ef20d9 100644 --- a/app/lib/status_reach_finder.rb +++ b/app/lib/status_reach_finder.rb @@ -96,7 +96,7 @@ class StatusReachFinder def banned_domains blocks = [] - blocks << DomainBlock.where(reject_send_not_public_searchability: true).pluck(:domain) if @status.computed_searchability != 'public' + blocks << DomainBlock.where(reject_send_not_public_searchability: true).pluck(:domain) if @status.compute_searchability != 'public' blocks << DomainBlock.where(reject_send_unlisted_dissubscribable: true).pluck(:domain) if @status.unlisted_visibility? && @status.account.dissubscribable blocks << DomainBlock.where(reject_send_public_unlisted: true).pluck(:domain) if @status.public_unlisted_visibility? blocks << DomainBlock.where(reject_send_dissubscribable: true).pluck(:domain) if @status.account.dissubscribable diff --git a/app/models/account_statuses_filter.rb b/app/models/account_statuses_filter.rb index ee8b8ec2cf..d0a1cc5518 100644 --- a/app/models/account_statuses_filter.rb +++ b/app/models/account_statuses_filter.rb @@ -26,17 +26,20 @@ class AccountStatusesFilter scope.merge!(no_reblogs_scope) if exclude_reblogs? scope.merge!(hashtag_scope) if tagged? + scope.merge!(scope.where(searchability: :public)) if domain_block&.reject_send_not_public_searchability + scope.merge!(scope.where.not(visibility: :unlisted)) if domain_block&.reject_send_unlisted_dissubscribable && @account.dissubscribable + scope.merge!(scope.where.not(visibility: :public_unlisted)) if domain_block&.reject_send_public_unlisted + scope.merge!(scope.where(spoiler_text: ['', nil])) if domain_block&.reject_send_sensitive + scope end private def initial_scope - if suspended? + if suspended? || (domain_block&.reject_send_dissubscribable && @account.dissubscribable) Status.none - elsif domain_block != nil && (domain_block&.reject_send_not_public_searchability || domain_block&.reject_send_unlisted_dissubscribable || - domain_block&.reject_send_public_unlisted || domain_block&.reject_send_media || domain_block&.reject_send_sensitive || - domain_block&.reject_send_sensitive) + elsif domain_block&.reject_send_media Status.none elsif anonymous? account.statuses.where(visibility: %i(public unlisted public_unlisted)) diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index 25b002bef0..9b34ecc5a1 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -49,7 +49,18 @@ class DomainBlock < ApplicationRecord if suspend? [:suspend] else - [severity.to_sym, reject_media? ? :reject_media : nil, reject_favourite? ? :reject_favourite : nil, reject_reply? ? :reject_reply : nil, reject_reports? ? :reject_reports : nil].reject { |policy| policy == :noop || policy.nil? } + [severity.to_sym, + reject_media? ? :reject_media : nil, + reject_favourite? ? :reject_favourite : nil, + reject_reply? ? :reject_reply : nil, + reject_send_not_public_searchability? ? :reject_send_not_public_searchability : nil, + reject_send_unlisted_dissubscribable? ? :reject_send_unlisted_dissubscribable : nil, + reject_send_public_unlisted? ? :reject_send_public_unlisted : nil, + reject_send_dissubscribable? ? :reject_send_dissubscribable : nil, + reject_send_media? ? :reject_send_media : nil, + reject_send_sensitive? ? :reject_send_sensitive : nil, + reject_reports? ? :reject_reports : nil + ].reject { |policy| policy == :noop || policy.nil? } end end diff --git a/config/locales/ja.yml b/config/locales/ja.yml index e79e97c80a..970f9c0d71 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -493,6 +493,12 @@ ja: reject_media: メディアを拒否する reject_reply: リプライを拒否 reject_reports: 通報を拒否 + reject_send_dissubscribable: 購読拒否投稿配送なし + reject_send_media: メディア付き投稿配送なし + reject_send_not_public_searchability: 検索許可全て投稿配送なし + reject_send_public_unlisted: ローカル公開投稿配送なし + reject_send_sensitive: センシティブ投稿配送なし + reject_send_unlisted_dissubscribable: 購読拒否未収載投稿配送なし silence: 制限 suspend: サスペンド policy: ポリシー