diff --git a/app/chewy/statuses_index.rb b/app/chewy/statuses_index.rb index bfd61a04844..1381a96ed44 100644 --- a/app/chewy/statuses_index.rb +++ b/app/chewy/statuses_index.rb @@ -59,7 +59,7 @@ class StatusesIndex < Chewy::Index field :id, type: 'long' field :account_id, type: 'long' - field :text, type: 'text', value: ->(status) { [status.spoiler_text, extract_status_plain_text(status)].concat(status.ordered_media_attachments.map(&:description)).concat(status.preloadable_poll ? status.preloadable_poll.options : []).join("\n\n") } do + field :text, type: 'text', value: ->(status) { status.searchable_text } do field :stemmed, type: 'text', analyzer: 'content' end diff --git a/app/helpers/formatting_helper.rb b/app/helpers/formatting_helper.rb index 2a622ae0b29..53e100dd277 100644 --- a/app/helpers/formatting_helper.rb +++ b/app/helpers/formatting_helper.rb @@ -12,6 +12,7 @@ module FormattingHelper def extract_status_plain_text(status) PlainTextFormatter.new(status.text, status.local?).to_s end + module_function :extract_status_plain_text def status_content_format(status) html_aware_format(status.text, status.local?, preloaded_accounts: [status.account] + (status.respond_to?(:active_mentions) ? status.active_mentions.map(&:account) : []), content_type: status.content_type) diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 6994f00ae66..02ecb403df3 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -5,7 +5,6 @@ require 'singleton' class FeedManager include Singleton include Redisable - include FormattingHelper # Maximum number of items stored in a single feed MAX_ITEMS = 400 @@ -501,16 +500,8 @@ class FeedManager return false if active_filters.empty? combined_regex = Regexp.union(active_filters) - status = status.reblog if status.reblog? - combined_text = [ - extract_status_plain_text(status), - status.spoiler_text, - status.preloadable_poll ? status.preloadable_poll.options.join("\n\n") : nil, - status.ordered_media_attachments.map(&:description).join("\n\n"), - ].compact.join("\n\n") - - combined_regex.match?(combined_text) + combined_regex.match?(status.proper.searchable_text) end # Adds a status to an account's feed, returning true if a status was diff --git a/app/models/status.rb b/app/models/status.rb index 62f9e583166..9eaf856685c 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -160,6 +160,15 @@ class Status < ApplicationRecord ids.uniq end + def searchable_text + [ + spoiler_text, + FormattingHelper.extract_status_plain_text(self), + preloadable_poll ? preloadable_poll.options.join("\n\n") : nil, + ordered_media_attachments.map(&:description).join("\n\n"), + ].compact.join("\n\n") + end + def reply? !in_reply_to_id.nil? || attributes['reply'] end