73 lines
2.3 KiB
Ruby
73 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Granblue
|
|
module Downloaders
|
|
# Downloads artifact image assets from the game server in different sizes.
|
|
# Artifacts have two sizes: square (s) and wide/medium (m).
|
|
#
|
|
# @example Download images for a specific artifact
|
|
# downloader = ArtifactDownloader.new("301010101", storage: :both)
|
|
# downloader.download
|
|
#
|
|
# @note Artifacts don't have variants like characters/weapons - just two sizes
|
|
class ArtifactDownloader < BaseDownloader
|
|
# Artifact images come in two sizes: square and wide
|
|
SIZES = %w[square wide].freeze
|
|
|
|
# Downloads images for an artifact
|
|
#
|
|
# @param selected_size [String] The size to download. If nil, downloads all sizes.
|
|
# @return [void]
|
|
# @note Skips download if artifact is not found in database
|
|
def download(selected_size = nil)
|
|
artifact = Artifact.find_by(granblue_id: @id)
|
|
return unless artifact
|
|
|
|
log_info("-> #{@id}") if @verbose
|
|
return if @test_mode
|
|
|
|
sizes = selected_size ? [selected_size] : SIZES
|
|
|
|
sizes.each_with_index do |size, index|
|
|
path = download_path(size)
|
|
url = build_url(size)
|
|
process_download(url, size, path, last: index == sizes.size - 1)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
# Gets object type for file paths and storage keys
|
|
# @return [String] Returns "artifact"
|
|
def object_type
|
|
'artifact'
|
|
end
|
|
|
|
# Gets base URL for artifact assets
|
|
# @return [String] Base URL for artifact images
|
|
def base_url
|
|
'https://prd-game-a1-granbluefantasy.akamaized.net/assets_en/img/sp/assets/artifact'
|
|
end
|
|
|
|
# Gets directory name for a size variant
|
|
#
|
|
# @param size [String] Image size variant
|
|
# @return [String] Directory name in game asset URL structure
|
|
# @note Maps "square" -> "s", "wide" -> "m"
|
|
def directory_for_size(size)
|
|
case size.to_s
|
|
when 'square' then 's'
|
|
when 'wide' then 'm'
|
|
end
|
|
end
|
|
|
|
# Build complete URL for a size variant
|
|
# @param size [String] Image size variant
|
|
# @return [String] Complete download URL
|
|
def build_url(size)
|
|
directory = directory_for_size(size)
|
|
"#{base_url}/#{directory}/#{@id}.jpg"
|
|
end
|
|
end
|
|
end
|
|
end
|