Cache status reference mark when posting
This commit is contained in:
parent
d8ebc66709
commit
71c451a569
6 changed files with 27 additions and 2 deletions
|
@ -493,6 +493,10 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
|
||||||
references = @object['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @object['references'])
|
references = @object['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @object['references'])
|
||||||
quote = @object['quote'] || @object['quoteUrl'] || @object['quoteURL'] || @object['_misskey_quote']
|
quote = @object['quote'] || @object['quoteUrl'] || @object['quoteURL'] || @object['_misskey_quote']
|
||||||
references << quote if quote
|
references << quote if quote
|
||||||
|
|
||||||
|
return unless ProcessReferencesService.need_process?(@status, [], references)
|
||||||
|
|
||||||
|
Rails.cache.write("status_reference:#{@status.id}", true, expires_in: 10.minutes)
|
||||||
ProcessReferencesWorker.perform_async(@status.id, [], references)
|
ProcessReferencesWorker.perform_async(@status.id, [], references)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,9 @@ class REST::StatusSerializer < ActiveModel::Serializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def status_references_count
|
def status_references_count
|
||||||
status_reference_ids.size
|
return status_reference_ids.size if status_reference_ids.any?
|
||||||
|
|
||||||
|
Rails.cache.exist?("status_reference:#{object.id}") ? 1 : 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def reblogs_count
|
def reblogs_count
|
||||||
|
|
|
@ -254,6 +254,10 @@ class ActivityPub::ProcessStatusUpdateService < BaseService
|
||||||
references = @json['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @json['references'])
|
references = @json['references'].nil? ? [] : ActivityPub::FetchReferencesService.new.call(@status, @json['references'])
|
||||||
quote = @json['quote'] || @json['quoteUrl'] || @json['quoteURL'] || @json['_misskey_quote']
|
quote = @json['quote'] || @json['quoteUrl'] || @json['quoteURL'] || @json['_misskey_quote']
|
||||||
references << quote if quote
|
references << quote if quote
|
||||||
|
|
||||||
|
return unless ProcessReferencesService.need_process?(@status, [], references)
|
||||||
|
|
||||||
|
Rails.cache.write("status_reference:#{@status.id}", true, expires_in: 10.minutes)
|
||||||
ProcessReferencesWorker.perform_async(@status.id, [], references)
|
ProcessReferencesWorker.perform_async(@status.id, [], references)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -186,8 +186,12 @@ class PostStatusService < BaseService
|
||||||
def postprocess_status!
|
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 && !@dtl
|
@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)
|
if ProcessReferencesService.need_process?(@status, @reference_ids, [])
|
||||||
|
Rails.cache.write("status_reference:#{@status.id}", true, expires_in: 10.minutes)
|
||||||
ProcessReferencesWorker.perform_async(@status.id, @reference_ids, [])
|
ProcessReferencesWorker.perform_async(@status.id, @reference_ids, [])
|
||||||
|
end
|
||||||
|
|
||||||
|
process_hashtags_service.call(@status)
|
||||||
Trends.tags.register(@status)
|
Trends.tags.register(@status)
|
||||||
LinkCrawlWorker.perform_async(@status.id)
|
LinkCrawlWorker.perform_async(@status.id)
|
||||||
DistributionWorker.perform_async(@status.id)
|
DistributionWorker.perform_async(@status.id)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
class ProcessReferencesService < BaseService
|
class ProcessReferencesService < BaseService
|
||||||
include Payloadable
|
include Payloadable
|
||||||
|
include FormattingHelper
|
||||||
|
|
||||||
DOMAIN = ENV['WEB_DOMAIN'] || ENV.fetch('LOCAL_DOMAIN', nil)
|
DOMAIN = ENV['WEB_DOMAIN'] || ENV.fetch('LOCAL_DOMAIN', nil)
|
||||||
REFURL_EXP = /(RT|QT|BT|RN|RE)((:|;)?\s+|:|;)(#{URI::DEFAULT_PARSER.make_regexp(%w(http https))})/
|
REFURL_EXP = /(RT|QT|BT|RN|RE)((:|;)?\s+|:|;)(#{URI::DEFAULT_PARSER.make_regexp(%w(http https))})/
|
||||||
|
@ -23,9 +24,15 @@ class ProcessReferencesService < BaseService
|
||||||
@status.save!
|
@status.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Rails.cache.delete("status_reference:#{@status.id}")
|
||||||
|
|
||||||
create_notifications!
|
create_notifications!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.need_process?(status, reference_parameters, urls)
|
||||||
|
reference_parameters.any? || (urls || []).any? || FormattingHelper.extract_status_plain_text(status).scan(REFURL_EXP).pluck(3).uniq.any?
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def references
|
def references
|
||||||
|
|
|
@ -161,6 +161,10 @@ class UpdateStatusService < BaseService
|
||||||
|
|
||||||
def update_references!
|
def update_references!
|
||||||
reference_ids = (@options[:status_reference_ids] || []).map(&:to_i).filter(&:positive?)
|
reference_ids = (@options[:status_reference_ids] || []).map(&:to_i).filter(&:positive?)
|
||||||
|
|
||||||
|
return unless ProcessReferencesService.need_process?(@status, reference_ids, [])
|
||||||
|
|
||||||
|
Rails.cache.write("status_reference:#{@status.id}", true, expires_in: 10.minutes)
|
||||||
ProcessReferencesWorker.perform_async(@status.id, reference_ids, [])
|
ProcessReferencesWorker.perform_async(@status.id, reference_ids, [])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue