From eee362b9e051231e3763a1cd5d96326e6b47e465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?KMY=EF=BC=88=E9=9B=AA=E3=81=82=E3=81=99=E3=81=8B=EF=BC=89?= Date: Wed, 3 Jan 2024 22:10:02 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20#404=20=E3=83=95=E3=82=A3=E3=83=AB?= =?UTF-8?q?=E3=82=BF=E3=83=BC=E3=81=A7`half=5Fwarn`=E3=82=92=E8=A8=AD?= =?UTF-8?q?=E5=AE=9A=E3=81=97=E3=81=A6=E3=82=8B=E3=81=A8=E3=80=81=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=82=A2=E3=83=B3=E3=83=88=E3=82=A2=E3=83=97?= =?UTF-8?q?=E3=83=AA=E3=81=A7=E3=82=BF=E3=82=A4=E3=83=A0=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=81=8C=E8=AA=AD=E3=81=BF=E8=BE=BC=E3=81=BE=E3=82=8C?= =?UTF-8?q?=E3=81=AA=E3=81=84=20(#410)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/javascript/mastodon/actions/notifications.js | 2 +- app/javascript/mastodon/components/status.jsx | 2 +- app/javascript/mastodon/reducers/filters.js | 1 + app/javascript/mastodon/selectors/index.js | 5 +++-- app/serializers/rest/filter_serializer.rb | 12 +++++++++++- streaming/index.js | 5 +++-- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index 2674405d2e..14a58e3613 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -83,7 +83,7 @@ export function updateNotifications(notification, intlMessages, intlLocale) { if (['mention', 'status'].includes(notification.type) && notification.status.filtered) { const filters = notification.status.filtered.filter(result => result.filter.context.includes('notifications')); - if (filters.some(result => result.filter.filter_action === 'hide')) { + if (filters.some(result => result.filter.filter_action_ex === 'hide')) { return; } diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index 5f9a3e45e3..bc111547a1 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -452,7 +452,7 @@ class Status extends ImmutablePureComponent { moveDown: this.handleHotkeyMoveDown, }; - if (status.get('filter_action') === 'half_warn') { + if (status.get('filter_action_ex') === 'half_warn') { return (
diff --git a/app/javascript/mastodon/reducers/filters.js b/app/javascript/mastodon/reducers/filters.js index 28f0c3e6e4..8816f3f81b 100644 --- a/app/javascript/mastodon/reducers/filters.js +++ b/app/javascript/mastodon/reducers/filters.js @@ -9,6 +9,7 @@ const normalizeFilter = (state, filter) => { title: filter.title, context: filter.context, filter_action: filter.filter_action, + filter_action_ex: filter.filter_action_ex, keywords: filter.keywords, expires_at: filter.expires_at ? Date.parse(filter.expires_at) : null, with_quote: filter.with_quote, diff --git a/app/javascript/mastodon/selectors/index.js b/app/javascript/mastodon/selectors/index.js index f98ccc4417..3dffac1a46 100644 --- a/app/javascript/mastodon/selectors/index.js +++ b/app/javascript/mastodon/selectors/index.js @@ -56,13 +56,13 @@ export const makeGetStatus = () => { } } - if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'hide')) { + if (filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action_ex']) === 'hide')) { return null; } filterResults = filterResults.filter(result => filters.has(result.get('filter'))); if (!filterResults.isEmpty()) { filtered = filterResults.map(result => filters.getIn([result.get('filter'), 'title'])); - filterAction = filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action']) === 'warn') ? 'warn' : 'half_warn'; + filterAction = filterResults.some((result) => filters.getIn([result.get('filter'), 'filter_action_ex']) === 'warn') ? 'warn' : 'half_warn'; } } @@ -72,6 +72,7 @@ export const makeGetStatus = () => { map.set('account', accountBase); map.set('matched_filters', filtered); map.set('filter_action', filterAction); + map.set('filter_action_ex', filterAction); }); }, ); diff --git a/app/serializers/rest/filter_serializer.rb b/app/serializers/rest/filter_serializer.rb index 08fadda582..2750b81417 100644 --- a/app/serializers/rest/filter_serializer.rb +++ b/app/serializers/rest/filter_serializer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class REST::FilterSerializer < ActiveModel::Serializer - attributes :id, :title, :exclude_follows, :exclude_localusers, :with_quote, :context, :expires_at, :filter_action + attributes :id, :title, :exclude_follows, :exclude_localusers, :with_quote, :context, :expires_at, :filter_action, :filter_action_ex has_many :keywords, serializer: REST::FilterKeywordSerializer, if: :rules_requested? has_many :statuses, serializer: REST::FilterStatusSerializer, if: :rules_requested? @@ -12,4 +12,14 @@ class REST::FilterSerializer < ActiveModel::Serializer def rules_requested? instance_options[:rules_requested] end + + def filter_action + return :hide if object.half_warn_action? + + object.filter_action + end + + def filter_action_ex + object.filter_action + end end diff --git a/streaming/index.js b/streaming/index.js index ec36a5de53..5804ad3070 100644 --- a/streaming/index.js +++ b/streaming/index.js @@ -836,8 +836,9 @@ const startServer = async () => { // custom_filters.action database column, it is an integer // representing a value in an enum defined by Ruby on Rails: // - // enum { warn: 0, hide: 1 } - filter_action: ['warn', 'hide', 'half_warn'][filter.filter_action], + // enum { warn: 0, hide: 1, half_warn: 2 } + filter_action: ['warn', 'hide', 'half_warn'][Math.min(filter.filter_action, 1)], + filter_action_ex: ['warn', 'hide', 'half_warn'][filter.filter_action], with_quote: filter.with_quote, excludeFollows: filter.exclude_follows, excludeLocalusers: filter.exclude_localusers,