Merge branch 'kb_development' into kb_migration
This commit is contained in:
commit
e9de561a24
17 changed files with 107 additions and 7 deletions
|
@ -18,6 +18,7 @@ class DeliveryAntennaService
|
|||
private
|
||||
|
||||
def delivery!
|
||||
must_dtl_tag = @account.dissubscribable
|
||||
tag_ids = @status.tags.pluck(:id)
|
||||
domain = @account.domain || Rails.configuration.x.local_domain
|
||||
follower_ids = @status.unlisted_visibility? ? @status.account.followers.pluck(:id) : []
|
||||
|
@ -28,9 +29,15 @@ class DeliveryAntennaService
|
|||
antennas = Antenna.where(id: antennas.select(:id))
|
||||
antennas = antennas.left_joins(:antenna_accounts).where(any_accounts: true).or(Antenna.left_joins(:antenna_accounts).where(antenna_accounts: { account: @account }))
|
||||
|
||||
tag_ids = @status.tags.pluck(:id)
|
||||
antennas = Antenna.where(id: antennas.select(:id))
|
||||
antennas = antennas.left_joins(:antenna_tags).where(any_tags: true).or(Antenna.left_joins(:antenna_tags).where(antenna_tags: { tag_id: tag_ids }))
|
||||
if must_dtl_tag
|
||||
dtl_tag = Tag.find_or_create_by_names('kmyblue').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 })
|
||||
else
|
||||
antennas = antennas.left_joins(:antenna_tags).where(any_tags: true).or(Antenna.left_joins(:antenna_tags).where(antenna_tags: { tag_id: tag_ids }))
|
||||
end
|
||||
|
||||
antennas = antennas.where(account_id: Account.without_suspended.joins(:user).select('accounts.id').where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago))
|
||||
antennas = antennas.where(account: @status.account.followers) if [:public, :public_unlisted, :login, :limited].exclude?(@status.visibility.to_sym) && !@status.public_searchability?
|
||||
|
|
|
@ -57,6 +57,7 @@ class EmojiReactService < BaseService
|
|||
status = emoji_reaction.status
|
||||
|
||||
return unless status.account.local?
|
||||
return if emoji_reaction.remote_custom_emoji?
|
||||
|
||||
ActivityPub::RawDistributionWorker.perform_async(build_json(emoji_reaction), status.account_id)
|
||||
end
|
||||
|
|
|
@ -51,7 +51,7 @@ class FanOutOnWriteService < BaseService
|
|||
when :public, :unlisted, :public_unlisted, :login, :private
|
||||
deliver_to_all_followers!
|
||||
deliver_to_lists!
|
||||
deliver_to_antennas! unless @account.dissubscribable
|
||||
deliver_to_antennas! if !@account.dissubscribable || (@status.dtl? && @account.user&.setting_dtl_force_subscribable && @status.tags.exists?(name: 'kmyblue'))
|
||||
deliver_to_stl_antennas!
|
||||
when :limited
|
||||
deliver_to_lists_mentioned_accounts_only!
|
||||
|
|
|
@ -73,7 +73,7 @@ class PostStatusService < BaseService
|
|||
@options[:sensitive]
|
||||
end) || @options[:spoiler_text].present?
|
||||
@text = @options.delete(:spoiler_text) if @text.blank? && @options[:spoiler_text].present?
|
||||
@visibility = @options[:visibility] || @account.user&.setting_default_privacy
|
||||
@visibility = @options[:visibility]&.to_sym || @account.user&.setting_default_privacy&.to_sym
|
||||
@visibility = :direct if @in_reply_to&.limited_visibility?
|
||||
@visibility = :limited if %w(mutual circle).include?(@options[:visibility])
|
||||
@visibility = :unlisted if (@visibility&.to_sym == :public || @visibility&.to_sym == :public_unlisted || @visibility&.to_sym == :login) && @account.silenced?
|
||||
|
@ -86,6 +86,7 @@ class PostStatusService < BaseService
|
|||
@scheduled_at = nil if scheduled_in_the_past?
|
||||
@reference_ids = (@options[:status_reference_ids] || []).map(&:to_i).filter(&:positive?)
|
||||
load_circle
|
||||
overwrite_dtl_post
|
||||
process_sensitive_words
|
||||
rescue ArgumentError
|
||||
raise ActiveRecord::RecordInvalid
|
||||
|
@ -99,6 +100,16 @@ class PostStatusService < BaseService
|
|||
raise ArgumentError if @circle.nil? || @circle.account_id != @account.id
|
||||
end
|
||||
|
||||
def overwrite_dtl_post
|
||||
raw_tags = Extractor.extract_hashtags(@text)
|
||||
return if raw_tags.exclude?('kmyblue')
|
||||
return unless %i(public public_unlisted unlisted).include?(@visibility)
|
||||
|
||||
@visibility = :unlisted if @account.user&.setting_dtl_force_with_tag == :full
|
||||
@searchability = :public if %i(full searchability).include?(@account.user&.setting_dtl_force_with_tag)
|
||||
@dtl = true
|
||||
end
|
||||
|
||||
def process_sensitive_words
|
||||
if [:public, :public_unlisted, :login].include?(@visibility&.to_sym) && Admin::SensitiveWord.sensitive?(@text, @options[:spoiler_text] || '')
|
||||
@text = Admin::SensitiveWord.modified_text(@text, @options[:spoiler_text])
|
||||
|
@ -170,7 +181,7 @@ class PostStatusService < BaseService
|
|||
end
|
||||
|
||||
def postprocess_status!
|
||||
@account.user.update!(settings_attributes: { default_privacy: @options[:visibility] }) if @account.user&.setting_stay_privacy && !@status.reply? && %i(public public_unlisted login unlisted private).include?(@status.visibility.to_sym) && @status.visibility.to_s != @account.user&.setting_default_privacy
|
||||
@account.user.update!(settings_attributes: { default_privacy: @options[:visibility] }) if @account.user&.setting_stay_privacy && !@status.reply? && %i(public public_unlisted login unlisted private).include?(@status.visibility.to_sym) && @status.visibility.to_s != @account.user&.setting_default_privacy && !@dtl
|
||||
|
||||
process_hashtags_service.call(@status)
|
||||
ProcessReferencesWorker.perform_async(@status.id, @reference_ids, [])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue