dawarich/app/services/photos/thumbnail.rb
2025-08-23 21:57:25 +02:00

58 lines
1.2 KiB
Ruby

# frozen_string_literal: true
class Photos::Thumbnail
SUPPORTED_SOURCES = %w[immich photoprism].freeze
def initialize(user, source, id)
@user = user
@source = source
@id = id
end
def call
raise ArgumentError, 'Photo source cannot be nil' if source.nil?
unsupported_source_error unless SUPPORTED_SOURCES.include?(source)
HTTParty.get(request_url, headers: headers)
end
private
attr_reader :user, :source, :id
def source_url
user.safe_settings.public_send("#{source}_url")
end
def source_api_key
user.safe_settings.public_send("#{source}_api_key")
end
def source_path
case source
when 'immich'
"/api/assets/#{id}/thumbnail?size=preview"
when 'photoprism'
preview_token = Rails.cache.read("#{Photoprism::CachePreviewToken::TOKEN_CACHE_KEY}_#{user.id}")
"/api/v1/t/#{id}/#{preview_token}/tile_500"
end
end
def request_url
"#{source_url}#{source_path}"
end
def headers
request_headers = {
'accept' => 'application/octet-stream'
}
request_headers['X-Api-Key'] = source_api_key if source == 'immich'
request_headers
end
def unsupported_source_error
raise ArgumentError, "Unsupported source: #{source}"
end
end