Change hide emoji reactions on silenced accounts
This commit is contained in:
parent
8a31e765cb
commit
eb03a78993
|
@ -31,7 +31,7 @@ class ActivityPub::EmojiReactionsController < ActivityPub::BaseController
|
|||
end
|
||||
|
||||
def set_emoji_reactions
|
||||
@emoji_reactions = @status.emoji_reactions
|
||||
@emoji_reactions = @status.emoji_reactions.joins(:account).merge(Account.without_silenced)
|
||||
@emoji_reactions = @emoji_reactions.paginate_by_min_id(EMOJI_REACTIONS_LIMIT, params[:min_id])
|
||||
end
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity
|
|||
return unless reaction
|
||||
|
||||
reaction.tap do |reaction|
|
||||
if @original_status.account.local?
|
||||
if @original_status.account.local? && !@original_status.account.silenced?
|
||||
NotifyService.new.call(@original_status.account, :emoji_reaction, reaction)
|
||||
forward_for_emoji_reaction
|
||||
relay_for_emoji_reaction
|
||||
|
|
|
@ -578,6 +578,10 @@ class Account < ApplicationRecord
|
|||
end
|
||||
end
|
||||
|
||||
def excluded_silenced_account_ids
|
||||
Rails.cache.fetch("excluded_silenced_account_ids") { Account.silenced.pluck(:id) }
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def first_degree(options)
|
||||
|
|
|
@ -47,7 +47,7 @@ class EmojiReaction < ApplicationRecord
|
|||
private
|
||||
|
||||
def queue_publish
|
||||
PublishEmojiReactionWorker.perform_async(status_id, account_id, name) unless status.destroyed?
|
||||
PublishEmojiReactionWorker.perform_async(status_id, account_id, name) unless status.destroyed? || account.silenced?
|
||||
end
|
||||
|
||||
def refresh_status
|
||||
|
|
|
@ -365,7 +365,7 @@ class Status < ApplicationRecord
|
|||
end
|
||||
|
||||
def emoji_reactions_count
|
||||
status_stat&.emoji_reactions_count || 0
|
||||
@emoji_reactions_count || status_stat&.emoji_reactions_count || 0
|
||||
end
|
||||
|
||||
def status_references_count
|
||||
|
@ -390,13 +390,22 @@ class Status < ApplicationRecord
|
|||
end
|
||||
|
||||
def grouped_emoji_reactions(account = nil)
|
||||
(Oj.load(status_stat&.emoji_reactions_cache || '', mode: :strict) || []).tap do |emoji_reactions|
|
||||
if account.present?
|
||||
emoji_reactions.each do |emoji_reaction|
|
||||
(Oj.load(status_stat&.emoji_reactions_cache || '', mode: :strict) || []).then do |emoji_reactions|
|
||||
@emoji_reactions_count = 0
|
||||
|
||||
emoji_reactions.filter do |emoji_reaction|
|
||||
if account.present?
|
||||
emoji_reaction['me'] = emoji_reaction['account_ids'].include?(account.id.to_s)
|
||||
emoji_reaction['account_ids'] -= account.excluded_from_timeline_account_ids.map(&:to_s)
|
||||
emoji_reaction['count'] = emoji_reaction['account_ids'].size
|
||||
emoji_reaction['account_ids'] -= (account.excluded_from_timeline_account_ids + (Account.excluded_silenced_account_ids - [account.id])).uniq.map(&:to_s)
|
||||
else
|
||||
emoji_reaction['me'] = false
|
||||
emoji_reaction['account_ids'] -= Account.excluded_silenced_account_ids.map(&:to_s)
|
||||
end
|
||||
|
||||
emoji_reaction['count'] = emoji_reaction['account_ids'].size
|
||||
@emoji_reactions_count += emoji_reaction['count']
|
||||
|
||||
emoji_reaction['count'] > 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,7 +4,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
|
|||
attributes :id, :created_at, :in_reply_to_id, :in_reply_to_account_id,
|
||||
:sensitive, :spoiler_text, :visibility, :language,
|
||||
:uri, :url, :replies_count, :reblogs_count,
|
||||
:favourites_count, :emoji_reactions_count, :emoji_reactions,
|
||||
:favourites_count, :emoji_reactions, :emoji_reactions_count,
|
||||
:status_reference_ids,
|
||||
:status_references_count, :status_referred_by_count,
|
||||
:searchability
|
||||
|
|
|
@ -24,8 +24,8 @@ class EmojiReactionService < BaseService
|
|||
def create_notification(emoji_reaction)
|
||||
status = emoji_reaction.status
|
||||
|
||||
if status.account.local?
|
||||
NotifyService.new.call(status.account, :emoji_reaction, emoji_reaction) if status.account.local?
|
||||
if status.account.local? && !status.account.silenced?
|
||||
NotifyService.new.call(status.account, :emoji_reaction, emoji_reaction)
|
||||
ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), status.account.id, [@account.preferred_inbox_url])
|
||||
elsif status.account.activitypub?
|
||||
ActivityPub::DeliveryWorker.perform_async(build_json(emoji_reaction), emoji_reaction.account_id, status.account.inbox_url)
|
||||
|
|
Loading…
Reference in New Issue