about summary refs log tree commit diff
path: root/app/services/remove_hashtags_service.rb
diff options
context:
space:
mode:
authorFire Demon <firedemon@creature.cafe>2020-08-14 14:09:33 -0500
committerFire Demon <firedemon@creature.cafe>2020-08-30 05:45:18 -0500
commit79535cb863d2f956bff2af8449f10da4aede4ede (patch)
treec609880ad160a4a8105f8076a1139d63884a83c1 /app/services/remove_hashtags_service.rb
parente3b316dd3e797a9c266fc1ec5e104845df1da9c6 (diff)
[Feature] Add support for unlisted and out-of-body tags
Diffstat (limited to 'app/services/remove_hashtags_service.rb')
-rw-r--r--app/services/remove_hashtags_service.rb21
1 files changed, 21 insertions, 0 deletions
diff --git a/app/services/remove_hashtags_service.rb b/app/services/remove_hashtags_service.rb
new file mode 100644
index 000000000..6bf77a068
--- /dev/null
+++ b/app/services/remove_hashtags_service.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class RemoveHashtagsService < BaseService
+  def call(status, tags)
+    tags = status.tags.matching_name(tags) if tags.is_a?(Array)
+
+    status.account.featured_tags.where(tag: tags).each do |featured_tag|
+      featured_tag.decrement(status.id)
+    end
+
+    if status.distributable?
+      delete_payload = Oj.dump(event: :delete, payload: status.id.to_s)
+      tags.pluck(:name).each do |hashtag|
+        redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}", delete_payload)
+        redis.publish("timeline:hashtag:#{hashtag.mb_chars.downcase}:local", delete_payload) if status.local?
+      end
+    end
+
+    status.tags -= tags
+  end
+end