diff options
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/account_search_service.rb | 2 | ||||
-rw-r--r-- | app/services/notify_service.rb | 2 | ||||
-rw-r--r-- | app/services/post_status_service.rb | 7 | ||||
-rw-r--r-- | app/services/process_feed_service.rb | 23 |
4 files changed, 24 insertions, 10 deletions
diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index a9cb85500..58a23d978 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -41,7 +41,7 @@ class AccountSearchService < BaseService end def query_username - @_query_username ||= split_query_string.first + @_query_username ||= split_query_string.first || '' end def query_domain diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index ffeee5fcf..00f7cbd00 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -6,7 +6,7 @@ class NotifyService < BaseService @activity = activity @notification = Notification.new(account: @recipient, activity: @activity) - return if blocked? || recipient.user.nil? + return if recipient.user.nil? || blocked? create_notification send_email if email_enabled? diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb index 221aa42a3..00af28edd 100644 --- a/app/services/post_status_service.rb +++ b/app/services/post_status_service.rb @@ -19,6 +19,7 @@ class PostStatusService < BaseService sensitive: options[:sensitive], spoiler_text: options[:spoiler_text] || '', visibility: options[:visibility], + language: detect_language(text), application: options[:application]) attach_media(status, media) @@ -35,7 +36,7 @@ class PostStatusService < BaseService private def validate_media!(media_ids) - return if media_ids.nil? || !media_ids.is_a?(Enumerable) + return if media_ids.blank? || !media_ids.is_a?(Enumerable) raise Mastodon::ValidationError, I18n.t('media_attachments.validations.too_many') if media_ids.size > 4 @@ -51,6 +52,10 @@ class PostStatusService < BaseService media.update(status_id: status.id) end + def detect_language(text) + WhatLanguage.new(:all).language_iso(text) || 'en' + end + def process_mentions_service @process_mentions_service ||= ProcessMentionsService.new end diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb index fa0633b27..98d92f630 100644 --- a/app/services/process_feed_service.rb +++ b/app/services/process_feed_service.rb @@ -119,6 +119,7 @@ class ProcessFeedService < BaseService spoiler_text: content_warning(entry), created_at: published(entry), reply: thread?(entry), + language: content_language(entry), visibility: visibility_scope(entry) ) @@ -161,13 +162,7 @@ class ProcessFeedService < BaseService xml.xpath('./xmlns:link[@rel="mentioned"]', xmlns: TagManager::XMLNS).each do |link| next if [TagManager::TYPES[:group], TagManager::TYPES[:collection]].include? link['ostatus:object-type'] - url = Addressable::URI.parse(link['href']) - - mentioned_account = if TagManager.instance.web_domain?(url.host) - Account.find_local(url.path.gsub('/users/', '')) - else - Account.find_by(url: link['href']) || FetchRemoteAccountService.new.call(link['href']) - end + mentioned_account = account_from_href(link['href']) next if mentioned_account.nil? || processed_account_ids.include?(mentioned_account.id) @@ -178,6 +173,16 @@ class ProcessFeedService < BaseService end end + def account_from_href(href) + url = Addressable::URI.parse(href) + + if TagManager.instance.web_domain?(url.host) + Account.find_local(url.path.gsub('/users/', '')) + else + Account.find_by(uri: href) || Account.find_by(url: href) || FetchRemoteAccountService.new.call(href) + end + end + def hashtags_from_xml(parent, xml) tags = xml.xpath('./xmlns:category', xmlns: TagManager::XMLNS).map { |category| category['term'] }.select(&:present?) ProcessHashtagsService.new.call(parent, tags) @@ -234,6 +239,10 @@ class ProcessFeedService < BaseService xml.at_xpath('./xmlns:content', xmlns: TagManager::XMLNS).content end + def content_language(xml = @xml) + xml.at_xpath('./xmlns:content', xmlns: TagManager::XMLNS)['xml:lang']&.presence || 'en' + end + def content_warning(xml = @xml) xml.at_xpath('./xmlns:summary', xmlns: TagManager::XMLNS)&.content || '' end |