Custom_filter working on status_reference
This commit is contained in:
parent
ff06b04e91
commit
76013b10b4
5 changed files with 23 additions and 3 deletions
app
lib
models
serializers/rest
services
streaming
|
@ -12,6 +12,9 @@ class InlineRenderer
|
||||||
when :status
|
when :status
|
||||||
serializer = REST::StatusSerializer
|
serializer = REST::StatusSerializer
|
||||||
preload_associations_for_status
|
preload_associations_for_status
|
||||||
|
when :status_internal
|
||||||
|
serializer = REST::StatusInternalSerializer
|
||||||
|
preload_associations_for_status
|
||||||
when :notification
|
when :notification
|
||||||
serializer = REST::NotificationSerializer
|
serializer = REST::NotificationSerializer
|
||||||
when :emoji_reaction
|
when :emoji_reaction
|
||||||
|
|
|
@ -101,7 +101,10 @@ class CustomFilter < ApplicationRecord
|
||||||
next if filter.exclude_follows && following
|
next if filter.exclude_follows && following
|
||||||
next if filter.exclude_localusers && status.account.local?
|
next if filter.exclude_localusers && status.account.local?
|
||||||
|
|
||||||
match = rules[:keywords].match(status.proper.searchable_text) if rules[:keywords].present?
|
if rules[:keywords].present?
|
||||||
|
match = rules[:keywords].match(status.proper.searchable_text)
|
||||||
|
match = rules[:keywords].match(status.proper.references.pluck(:text).join("\n\n")) if match.nil? && status.proper.references.exists?
|
||||||
|
end
|
||||||
keyword_matches = [match.to_s] unless match.nil?
|
keyword_matches = [match.to_s] unless match.nil?
|
||||||
|
|
||||||
status_matches = [status.id, status.reblog_of_id].compact & rules[:status_ids] if rules[:status_ids].present?
|
status_matches = [status.id, status.reblog_of_id].compact & rules[:status_ids] if rules[:status_ids].present?
|
||||||
|
|
9
app/serializers/rest/status_internal_serializer.rb
Normal file
9
app/serializers/rest/status_internal_serializer.rb
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class REST::StatusInternalSerializer < REST::StatusSerializer
|
||||||
|
attributes :reference_texts
|
||||||
|
|
||||||
|
def reference_texts
|
||||||
|
object.references.pluck(:text)
|
||||||
|
end
|
||||||
|
end
|
|
@ -195,7 +195,7 @@ class FanOutOnWriteService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def rendered_status
|
def rendered_status
|
||||||
@rendered_status ||= InlineRenderer.render(@status, nil, :status)
|
@rendered_status ||= InlineRenderer.render(@status, nil, :status_internal)
|
||||||
end
|
end
|
||||||
|
|
||||||
def update?
|
def update?
|
||||||
|
|
|
@ -763,6 +763,11 @@ const startServer = async () => {
|
||||||
const listener = message => {
|
const listener = message => {
|
||||||
const { event, payload } = message;
|
const { event, payload } = message;
|
||||||
|
|
||||||
|
// reference_texts property is not working if ProcessReferencesWorker is
|
||||||
|
// used on PostStatusService and so on. (Asynchronous processing)
|
||||||
|
const reference_texts = payload.reference_texts || [];
|
||||||
|
delete payload.reference_texts;
|
||||||
|
|
||||||
// Streaming only needs to apply filtering to some channels and only to
|
// Streaming only needs to apply filtering to some channels and only to
|
||||||
// some events. This is because majority of the filtering happens on the
|
// some events. This is because majority of the filtering happens on the
|
||||||
// Ruby on Rails side when producing the event for streaming.
|
// Ruby on Rails side when producing the event for streaming.
|
||||||
|
@ -908,7 +913,7 @@ const startServer = async () => {
|
||||||
if (req.cachedFilters) {
|
if (req.cachedFilters) {
|
||||||
const status = payload;
|
const status = payload;
|
||||||
// TODO: Calculate searchableContent in Ruby on Rails:
|
// TODO: Calculate searchableContent in Ruby on Rails:
|
||||||
const searchableContent = ([status.spoiler_text || '', status.content].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n');
|
const searchableContent = ([status.spoiler_text || '', status.content, ...(reference_texts || [])].concat((status.poll && status.poll.options) ? status.poll.options.map(option => option.title) : [])).concat(status.media_attachments.map(att => att.description)).join('\n\n').replace(/<br\s*\/?>/g, '\n').replace(/<\/p><p>/g, '\n\n');
|
||||||
const searchableTextContent = JSDOM.fragment(searchableContent).textContent;
|
const searchableTextContent = JSDOM.fragment(searchableContent).textContent;
|
||||||
|
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue