hensei-api/lib/post_deployment/image_downloader.rb
Justin Edmund d75e4a8448
Downloader fixes (#162)
* Fix summon data

* Update logic for downloaders

These are responsible for downloading variants (01, 02, etc)

* Update puts statement

* Simplify ImageDownloader

* Simplify DownloadManager
2025-01-15 19:15:58 -08:00

84 lines
2.5 KiB
Ruby

# frozen_string_literal: true
require_relative '../logging_helper'
require_relative '../granblue/downloaders/base_downloader'
require_relative '../granblue/downloaders/character_downloader'
require_relative '../granblue/downloaders/weapon_downloader'
require_relative '../granblue/downloaders/summon_downloader'
require_relative '../granblue/downloaders/elemental_weapon_downloader'
require_relative '../granblue/download_manager'
module PostDeployment
class ImageDownloader
include LoggingHelper
STORAGE_DESCRIPTIONS = {
local: 'to local disk',
s3: 'to S3',
both: 'to local disk and S3'
}.freeze
SUPPORTED_TYPES = {
'character' => Granblue::Downloader::CharacterDownloader,
'summon' => Granblue::Downloader::SummonDownloader,
'weapon' => Granblue::Downloader::WeaponDownloader
}.freeze
def initialize(test_mode:, verbose:, storage:, new_records:, updated_records:)
@test_mode = test_mode
@verbose = verbose
@storage = storage
@new_records = new_records
@updated_records = updated_records
end
def run
return if @test_mode
log_header 'Downloading images...', '+'
SUPPORTED_TYPES.each do |type, downloader_class|
download_type_images(type, downloader_class)
end
end
private
def download_type_images(type, downloader_class)
records = (@new_records[type] || []) + (@updated_records[type] || [])
return if records.empty?
puts "\nDownloading #{type} images..." if @verbose
records.each do |record|
# Get the ID either from the granblue_id hash key (test mode) or method (normal mode)
id = record.respond_to?(:granblue_id) ? record.granblue_id : record[:granblue_id]
downloader = downloader_class.new(
id,
test_mode: @test_mode,
verbose: @verbose,
storage: @storage
)
downloader.download
end
end
def download_single_image(type, id, options)
action_text = @test_mode ? 'Would download' : 'Downloading'
storage_text = STORAGE_DESCRIPTIONS[options[:storage]]
log_verbose "#{action_text} images #{storage_text} for #{type} #{id}...\n"
unless @test_mode
Granblue::Downloader::DownloadManager.download_for_object(
type,
id,
**options
)
end
rescue => e
error_message = "Error #{@test_mode ? 'would occur' : 'occurred'} downloading images for #{type} #{id}: #{e.message}"
puts error_message
puts e.backtrace.take(5) if @verbose
end
end
end