about summary refs log tree commit diff
path: root/app/services
diff options
context:
space:
mode:
authorChristian Schmidt <github@chsc.dk>2023-03-16 11:07:24 +0100
committerGitHub <noreply@github.com>2023-03-16 11:07:24 +0100
commitbd047acc356671727c112336bb237f979bba517d (patch)
treef65ea64df4dcf6bb93a5561bb237caf78c54153c /app/services
parent630436ab2d84b5ed2334ad510cb9ad6253050ae5 (diff)
Replace `Status#translatable?` with language matrix in separate endpoint (#24037)
Diffstat (limited to 'app/services')
-rw-r--r--app/services/translate_status_service.rb16
1 files changed, 13 insertions, 3 deletions
diff --git a/app/services/translate_status_service.rb b/app/services/translate_status_service.rb
index 92d8b62a0..796f13a0d 100644
--- a/app/services/translate_status_service.rb
+++ b/app/services/translate_status_service.rb
@@ -6,19 +6,29 @@ class TranslateStatusService < BaseService
   include FormattingHelper
 
   def call(status, target_language)
-    raise Mastodon::NotPermittedError unless status.translatable?
-
     @status = status
     @content = status_content_format(@status)
     @target_language = target_language
 
+    raise Mastodon::NotPermittedError unless permitted?
+
     Rails.cache.fetch("translations/#{@status.language}/#{@target_language}/#{content_hash}", expires_in: CACHE_TTL) { translation_backend.translate(@content, @status.language, @target_language) }
   end
 
   private
 
   def translation_backend
-    TranslationService.configured
+    @translation_backend ||= TranslationService.configured
+  end
+
+  def permitted?
+    return false unless @status.distributable? && @status.content.present? && TranslationService.configured?
+
+    languages[@status.language]&.include?(@target_language)
+  end
+
+  def languages
+    Rails.cache.fetch('translation_service/languages', expires_in: 7.days, race_condition_ttl: 1.hour) { TranslationService.configured.languages }
   end
 
   def content_hash