From cf3ec71aa564c7fe47ec79f8dd5f14e3bce0b85c Mon Sep 17 00:00:00 2001 From: multiple creatures Date: Mon, 15 Jul 2019 13:34:05 -0500 Subject: local visibility scope, chat scope+tags, unlisted tags --- app/services/process_hashtags_service.rb | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'app/services/process_hashtags_service.rb') diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index 07806b4a7..fff4f5db1 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -1,24 +1,35 @@ # frozen_string_literal: true class ProcessHashtagsService < BaseService - def call(status, tags = []) + def call(status, tags = [], preloaded_tags = []) + status.tags |= preloaded_tags unless preloaded_tags.blank? + if status.local? tags = Extractor.extract_hashtags(status.text) | (tags.nil? ? [] : tags) end records = [] tags.map { |str| str.mb_chars.downcase }.uniq(&:to_s).each do |name| - name = name.gsub(/[:.]+/, '.') - next if name.blank? - component_indices = name.size.times.select {|i| name[i] == '.'} - component_indices << name.size - 1 + name.gsub!(/[:.]+/, '.') + next if name.blank? || name == '.' + + chat = name.starts_with?('chat.', '.chat.') + if chat + component_indices = [name.size - 1] + else + component_indices = 1.upto(name.size).select { |i| name[i] == '.' } + component_indices << name.size - 1 + end + component_indices.take(6).each_with_index do |i, nest| frag = (nest != 5) ? name[0..i] : name tag = Tag.where(name: frag).first_or_create(name: frag) + tag.chatters.find_or_create_by(id: status.account_id) if chat + next if status.tags.include?(tag) status.tags << tag - next if tag.local || tag.private + next if tag.unlisted || component_indices.size > 1 records << tag TrendingTags.record_use!(tag, status.account, status.created_at) if status.distributable? -- cgit