mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 09:41:40 -05:00
57 lines
1.2 KiB
Ruby
57 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 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
|