Also refactor a bit to reduce code duplication.
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
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) : []))
class FeedManager
include Singleton
include Redisable
- include FormattingHelper
# Maximum number of items stored in a single feed
MAX_ITEMS = 400
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
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