diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2019-02-04 04:25:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-04 04:25:59 +0100 |
commit | 364f2ff9aa2b4bf601d68a12bce758aeb5530467 (patch) | |
tree | 6e47b26ef9148d3b88dd9748460d8cf51beac748 /app/services | |
parent | d14c276e58f0f223b0e4889d342a948c961081b2 (diff) |
Add featured hashtags to profiles (#9755)
* Add hashtag filter to profiles GET /@:username/tagged/:hashtag GET /api/v1/accounts/:id/statuses?tagged=:hashtag * Display featured hashtags on public profile * Use separate model for featured tags * Update featured hashtag counters on-write * Limit featured tags to 10
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/process_hashtags_service.rb | 12 | ||||
-rw-r--r-- | app/services/remove_status_service.rb | 4 |
2 files changed, 15 insertions, 1 deletions
diff --git a/app/services/process_hashtags_service.rb b/app/services/process_hashtags_service.rb index cf7471c98..d5ec076a8 100644 --- a/app/services/process_hashtags_service.rb +++ b/app/services/process_hashtags_service.rb @@ -2,12 +2,22 @@ class ProcessHashtagsService < BaseService def call(status, tags = []) - tags = Extractor.extract_hashtags(status.text) if status.local? + tags = Extractor.extract_hashtags(status.text) if 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) + status.tags << tag + records << tag + TrendingTags.record_use!(tag, status.account, status.created_at) if status.public_visibility? end + + return unless status.public_visibility? || status.unlisted_visibility? + + status.account.featured_tags.where(tag_id: records.map(&:id)).each do |featured_tag| + featured_tag.increment(status.created_at) + end end end diff --git a/app/services/remove_status_service.rb b/app/services/remove_status_service.rb index 28c5224b0..2012f15fc 100644 --- a/app/services/remove_status_service.rb +++ b/app/services/remove_status_service.rb @@ -131,6 +131,10 @@ class RemoveStatusService < BaseService end def remove_from_hashtags + @account.featured_tags.where(tag_id: @status.tags.pluck(:id)).each do |featured_tag| + featured_tag.decrement(@status.id) + end + return unless @status.public_visibility? @tags.each do |hashtag| |