mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
45 lines
1.1 KiB
Ruby
45 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class Photos::Search
|
|
attr_reader :user, :start_date, :end_date
|
|
|
|
def initialize(user, start_date: '1970-01-01', end_date: nil)
|
|
@user = user
|
|
@start_date = start_date
|
|
@end_date = end_date
|
|
end
|
|
|
|
def call
|
|
photos = []
|
|
|
|
photos << request_immich if user.immich_integration_configured?
|
|
photos << request_photoprism if user.photoprism_integration_configured?
|
|
|
|
photos.flatten.map { |photo| Api::PhotoSerializer.new(photo, photo[:source]).call }
|
|
end
|
|
|
|
private
|
|
|
|
def request_immich
|
|
Immich::RequestPhotos.new(
|
|
user,
|
|
start_date: start_date,
|
|
end_date: end_date
|
|
).call.map { |asset| transform_asset(asset, 'immich') }.compact
|
|
end
|
|
|
|
def request_photoprism
|
|
Photoprism::RequestPhotos.new(
|
|
user,
|
|
start_date: start_date,
|
|
end_date: end_date
|
|
).call.map { |asset| transform_asset(asset, 'photoprism') }.compact
|
|
end
|
|
|
|
def transform_asset(asset, source)
|
|
asset_type = asset['type'] || asset['Type']
|
|
return if asset_type.downcase == 'video'
|
|
|
|
asset.merge(source: source)
|
|
end
|
|
end
|