Connect emoji_reaction block settings and show settings

This commit is contained in:
KMY 2023-09-12 17:24:38 +09:00
parent 4863ac50a0
commit 58137b227c
5 changed files with 36 additions and 32 deletions

View file

@ -370,6 +370,34 @@ class Account < ApplicationRecord
user.settings&.[]('emoji_reaction_policy')&.to_sym
end
def show_emoji_reaction?(account)
case emoji_reaction_policy
when :block_and_hide
false
when :followees_only
account.present? && (id == account.id || following?(account))
when :followers_only
account.present? && (id == account.id || followed_by?(account))
when :mutuals_only
account.present? && (id == account.id || mutual?(account))
when :outside_only
account.present? && (id == account.id || following?(account) || followed_by?(account))
else
true
end
end
def allow_emoji_reaction?(account)
return false if account.nil?
case emoji_reaction_policy
when :block
false
else
show_emoji_reaction?(account)
end
end
def public_settings
config = {
'noindex' => noindex?,

View file

@ -350,7 +350,7 @@ class Status < ApplicationRecord
end
def emoji_reactions_grouped_by_name(account = nil)
return [] if self.account.emoji_reaction_policy == :block_and_hide
return [] if account.present? && !self.account.show_emoji_reaction?(account)
(Oj.load(status_stat&.emoji_reactions || '', mode: :strict) || []).tap do |emoji_reactions|
if account.present?

View file

@ -22,30 +22,6 @@ class EmojiReactionValidator < ActiveModel::Validator
end
def deny_emoji_reactions?(emoji_reaction)
return false if emoji_reaction.status.account.user.nil?
return deny_from_all?(emoji_reaction) if emoji_reaction.status.account_id == emoji_reaction.account_id
return false if emoji_reaction.status.account.emoji_reaction_policy == :allow
deny_from_all?(emoji_reaction) || non_outside?(emoji_reaction) || non_follower?(emoji_reaction) || non_following?(emoji_reaction) || non_mutual?(emoji_reaction)
end
def deny_from_all?(emoji_reaction)
%i(block block_and_hide).include?(emoji_reaction.status.account.emoji_reaction_policy)
end
def non_following?(emoji_reaction)
emoji_reaction.status.account.emoji_reaction_policy == :followees_only && !emoji_reaction.status.account.following?(emoji_reaction.account)
end
def non_follower?(emoji_reaction)
emoji_reaction.status.account.emoji_reaction_policy == :followers_only && !emoji_reaction.account.following?(emoji_reaction.status.account)
end
def non_outside?(emoji_reaction)
emoji_reaction.status.account.emoji_reaction_policy == :outside_only && !emoji_reaction.account.following?(emoji_reaction.status.account) && !emoji_reaction.status.account.following?(emoji_reaction.account)
end
def non_mutual?(emoji_reaction)
emoji_reaction.status.account.emoji_reaction_policy == :mutuals_only && !emoji_reaction.status.account.mutual?(emoji_reaction.account)
!emoji_reaction.status.account.allow_emoji_reaction?(emoji_reaction.account)
end
end

View file

@ -244,11 +244,11 @@ en:
setting_emoji_reaction_streaming_notify_impl2: Enable stamp notification compat with Nyastodon, Catstodon, glitch-soc
setting_enable_emoji_reaction: Show emoji reaction on your display
setting_enable_login_privacy: Enable login visibility
setting_emoji_reaction_policy: Stamp policy
setting_emoji_reaction_policy: Stamp receive/display policy
setting_emoji_reaction_policy_items:
allow: Allow all
block: Block all
block_and_hide: Block and hide
block: Block all but show existing reactions
block_and_hide: Block
followees_only: Followings only
followers_only: Followers only
mutuals_only: Mutuals only

View file

@ -252,11 +252,11 @@ ja:
setting_dtl_force_with_tag: DTL参加時の投稿設定
setting_dtl_menu: Webクライアントのメニューにディープタイムラインを追加する
setting_enable_login_privacy: 公開範囲「ログインユーザーのみ」をWeb UIで選択可能にする
setting_emoji_reaction_policy: スタンプ受け入れ設定
setting_emoji_reaction_policy: スタンプ受け入れと表示設定
setting_emoji_reaction_policy_items:
allow: 全員に許可
block: 全員禁止
block_and_hide: 全員禁止し、既存のスタンプも非表示にする
block: 全員禁止するが、既存のスタンプは表示する
block_and_hide: 全員禁止
followees_only: フォロー中の相手のみ許可
followers_only: フォロワーのみ許可
mutuals_only: 相互のみ許可