diff options
Diffstat (limited to 'app/services/process_hashtags_service.rb')
-rw-r--r-- | app/services/process_hashtags_service.rb | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index fb89f6c5b..4257d9231 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -2,19 +2,26 @@ class ProcessHashtagsService < BaseService def call(status, tags = []) - tags = Extractor.extract_hashtags(status.text) if status.network? + tags = Extractor.extract_hashtags(status.text) if tags.blank? && status.local? records = [] tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name| - tag = Tag.where(name: name).first_or_create(name: name) + component_indices = name.size.times.select {|i| name[i] == ':'} + component_indices << name.size - 1 + component_indices.each do |i| + frag = name[0..i] + tag = Tag.where(name: frag).first_or_create(name: frag) - status.tags << tag - records << tag + status.tags << tag - TrendingTags.record_use!(tag, status.account, status.created_at) if status.distributable? + next if tag.local || tag.private + + records << tag + TrendingTags.record_use!(tag, status.account, status.created_at) if status.distributable? + end end - return unless status.public_visibility? || status.unlisted_visibility? + return unless status.distributable? status.account.featured_tags.where(tag_id: records.map(&:id)).each do |featured_tag| featured_tag.increment(status.created_at) |