From f5332b065451f4e0b0222e2967bdf0eae0697781 Mon Sep 17 00:00:00 2001 From: KMY Date: Fri, 28 Apr 2023 21:36:44 +0900 Subject: [PATCH] Add stop streaming config --- app/controllers/settings/profiles_controller.rb | 2 +- app/lib/activitypub/activity/like.rb | 2 +- app/lib/activitypub/activity/undo.rb | 2 +- app/models/account.rb | 1 + app/services/emoji_react_service.rb | 2 +- app/services/un_emoji_react_service.rb | 2 +- app/views/settings/profiles/show.html.haml | 3 +++ ...any_json_worker.rb => delivery_emoji_reaction_worker.rb} | 6 +++--- ...230428111230_add_emoji_reaction_streaming_to_accounts.rb | 5 +++++ db/schema.rb | 3 ++- 10 files changed, 19 insertions(+), 9 deletions(-) rename app/workers/{feed_any_json_worker.rb => delivery_emoji_reaction_worker.rb} (72%) create mode 100644 db/migrate/20230428111230_add_emoji_reaction_streaming_to_accounts.rb diff --git a/app/controllers/settings/profiles_controller.rb b/app/controllers/settings/profiles_controller.rb index 030c3765c2..b10b45eb4f 100644 --- a/app/controllers/settings/profiles_controller.rb +++ b/app/controllers/settings/profiles_controller.rb @@ -20,7 +20,7 @@ class Settings::ProfilesController < Settings::BaseController private def account_params - params.require(:account).permit(:display_name, :note, :avatar, :header, :locked, :my_actor_type, :searchability, :dissubscribable, :group_allow_private_message, :discoverable, :hide_collections, fields_attributes: [:name, :value]) + params.require(:account).permit(:display_name, :note, :avatar, :header, :locked, :my_actor_type, :searchability, :dissubscribable, :stop_emoji_reaction_streaming, :group_allow_private_message, :discoverable, :hide_collections, fields_attributes: [:name, :value]) end def set_account diff --git a/app/lib/activitypub/activity/like.rb b/app/lib/activitypub/activity/like.rb index 4c58d46ce7..41166971ed 100644 --- a/app/lib/activitypub/activity/like.rb +++ b/app/lib/activitypub/activity/like.rb @@ -100,7 +100,7 @@ class ActivityPub::Activity::Like < ActivityPub::Activity emoji_group = @original_status.emoji_reactions_grouped_by_name .find { |reaction_group| reaction_group['name'] == emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == emoji_reaction.custom_emoji&.domain) } emoji_group['status_id'] = @original_status.id.to_s - FeedAnyJsonWorker.perform_async(render_emoji_reaction(emoji_group), @original_status.id, emoji_reaction.account_id) + DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), @original_status.id, emoji_reaction.account_id) end def render_emoji_reaction(emoji_group) diff --git a/app/lib/activitypub/activity/undo.rb b/app/lib/activitypub/activity/undo.rb index ad6b3336fa..d7026306ee 100644 --- a/app/lib/activitypub/activity/undo.rb +++ b/app/lib/activitypub/activity/undo.rb @@ -151,7 +151,7 @@ class ActivityPub::Activity::Undo < ActivityPub::Activity emoji_group = { 'name' => emoji_reaction.name, 'count' => 0, 'account_ids' => [], 'status_id' => @original_status.id.to_s } emoji_group['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji end - FeedAnyJsonWorker.perform_async(render_emoji_reaction(emoji_group), @original_status.id, emoji_reaction.account_id) + DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), @original_status.id, emoji_reaction.account_id) end def render_emoji_reaction(emoji_group) diff --git a/app/models/account.rb b/app/models/account.rb index 28e669be97..e764cf7bd9 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -53,6 +53,7 @@ # group_allow_private_message :boolean # searchability :integer default("private"), not null # dissubscribable :boolean default(FALSE), not null +# stop_emoji_reaction_streaming :boolean default(FALSE) # class Account < ApplicationRecord diff --git a/app/services/emoji_react_service.rb b/app/services/emoji_react_service.rb index d8f51548a0..d0b6214a1f 100644 --- a/app/services/emoji_react_service.rb +++ b/app/services/emoji_react_service.rb @@ -57,7 +57,7 @@ class EmojiReactService < BaseService emoji_group = emoji_reaction.status.emoji_reactions_grouped_by_name .find { |reaction_group| reaction_group['name'] == emoji_reaction.name && (!reaction_group.key?(:domain) || reaction_group['domain'] == emoji_reaction.custom_emoji&.domain) } emoji_group['status_id'] = emoji_reaction.status_id.to_s - FeedAnyJsonWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.status_id, emoji_reaction.account_id) + DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), emoji_reaction.status_id, emoji_reaction.account_id) end def bump_potential_friendship(account, status) diff --git a/app/services/un_emoji_react_service.rb b/app/services/un_emoji_react_service.rb index 5ff45af935..98a24af233 100644 --- a/app/services/un_emoji_react_service.rb +++ b/app/services/un_emoji_react_service.rb @@ -45,7 +45,7 @@ class UnEmojiReactService < BaseService emoji_group = { 'name' => emoji_reaction.name, 'count' => 0, 'account_ids' => [], 'status_id' => @status.id.to_s } emoji_group['domain'] = emoji_reaction.custom_emoji.domain if emoji_reaction.custom_emoji end - FeedAnyJsonWorker.perform_async(render_emoji_reaction(emoji_group), @status.id, emoji_reaction.account_id) + DeliveryEmojiReactionWorker.perform_async(render_emoji_reaction(emoji_group), @status.id, emoji_reaction.account_id) end def build_json(emoji_reaction) diff --git a/app/views/settings/profiles/show.html.haml b/app/views/settings/profiles/show.html.haml index 3d7a4325da..d6e53b0641 100644 --- a/app/views/settings/profiles/show.html.haml +++ b/app/views/settings/profiles/show.html.haml @@ -41,6 +41,9 @@ .fields-group = f.input :dissubscribable, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.dissubscribable') + .fields-group + = f.input :stop_emoji_reaction_streaming, as: :boolean, wrapper: :with_label, hint: t('simple_form.hints.defaults.stop_emoji_reaction_streaming') + %hr.spacer/ .fields-row diff --git a/app/workers/feed_any_json_worker.rb b/app/workers/delivery_emoji_reaction_worker.rb similarity index 72% rename from app/workers/feed_any_json_worker.rb rename to app/workers/delivery_emoji_reaction_worker.rb index 00c24e820a..f156582f1b 100644 --- a/app/workers/feed_any_json_worker.rb +++ b/app/workers/delivery_emoji_reaction_worker.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class FeedAnyJsonWorker +class DeliveryEmojiReactionWorker include Sidekiq::Worker include Redisable include Lockable @@ -12,11 +12,11 @@ class FeedAnyJsonWorker status = Status.find(status_id.to_i) if status.present? - scope_status(status).find_each do |account| + scope_status(status).where.not(stop_emoji_reaction_streaming: true).find_each do |account| redis.publish("timeline:#{account.id}", payload_json) if redis.exists?("subscribed:timeline:#{account.id}") end - if status.visibility.to_sym != :public && status.visibility.to_sym != :unlisted && status.visibility.to_sym != :public_unlisted && status.account_id != my_account_id && + if !([:public, :unlisted, :public_unlisted].include?(status.visibility.to_sym)) && status.account_id != my_account_id && redis.exists?("subscribed:timeline:#{status.account_id}") redis.publish("timeline:#{status.account_id}", payload_json) end diff --git a/db/migrate/20230428111230_add_emoji_reaction_streaming_to_accounts.rb b/db/migrate/20230428111230_add_emoji_reaction_streaming_to_accounts.rb new file mode 100644 index 0000000000..222c449bc0 --- /dev/null +++ b/db/migrate/20230428111230_add_emoji_reaction_streaming_to_accounts.rb @@ -0,0 +1,5 @@ +class AddEmojiReactionStreamingToAccounts < ActiveRecord::Migration[6.1] + def change + add_column :accounts, :stop_emoji_reaction_streaming, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index 5779eaac91..ba39ada91c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2023_04_27_233749) do +ActiveRecord::Schema.define(version: 2023_04_28_111230) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -192,6 +192,7 @@ ActiveRecord::Schema.define(version: 2023_04_27_233749) do t.boolean "group_allow_private_message" t.integer "searchability", default: 2, null: false t.boolean "dissubscribable", default: false, null: false + t.boolean "stop_emoji_reaction_streaming", default: false t.index "(((setweight(to_tsvector('simple'::regconfig, (display_name)::text), 'A'::\"char\") || setweight(to_tsvector('simple'::regconfig, (username)::text), 'B'::\"char\")) || setweight(to_tsvector('simple'::regconfig, (COALESCE(domain, ''::character varying))::text), 'C'::\"char\")))", name: "search_index", using: :gin t.index "lower((username)::text), COALESCE(lower((domain)::text), ''::text)", name: "index_accounts_on_username_and_domain_lower", unique: true t.index ["moved_to_account_id"], name: "index_accounts_on_moved_to_account_id", where: "(moved_to_account_id IS NOT NULL)"