From 29c52469a3373a173b1d0b82d44d3eedff2e6c4e Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Wed, 15 Jan 2025 19:12:02 -0800 Subject: [PATCH] Update logic for downloaders These are responsible for downloading variants (01, 02, etc) --- .../downloaders/character_downloader.rb | 40 ++++++++++++++++++ lib/granblue/downloaders/summon_downloader.rb | 42 +++++++++++++++++++ lib/granblue/downloaders/weapon_downloader.rb | 39 +++++++++++++++++ 3 files changed, 121 insertions(+) diff --git a/lib/granblue/downloaders/character_downloader.rb b/lib/granblue/downloaders/character_downloader.rb index 34aa8a6..2ad492b 100644 --- a/lib/granblue/downloaders/character_downloader.rb +++ b/lib/granblue/downloaders/character_downloader.rb @@ -3,8 +3,48 @@ module Granblue module Downloader class CharacterDownloader < BaseDownloader + def download + character = Character.find_by(granblue_id: @id) + return unless character + + download_variants(character) + end + private + def download_variants(character) + # All characters have 01 and 02 variants + variants = ["#{@id}_01", "#{@id}_02"] + + # Add FLB variant if available + variants << "#{@id}_03" if character.flb + + # Add ULB variant if available + variants << "#{@id}_04" if character.ulb + + log_info "Downloading character variants: #{variants.join(', ')}" if @verbose + + variants.each do |variant_id| + download_variant(variant_id) + end + end + + def download_variant(variant_id) + log_info "-> #{variant_id}" if @verbose + return if @test_mode + + SIZES.each_with_index do |size, index| + path = download_path(size) + url = build_variant_url(variant_id, size) + process_download(url, size, path, last: index == SIZES.size - 1) + end + end + + def build_variant_url(variant_id, size) + directory = directory_for_size(size) + "#{@base_url}/#{directory}/#{variant_id}.jpg" + end + def object_type 'character' end diff --git a/lib/granblue/downloaders/summon_downloader.rb b/lib/granblue/downloaders/summon_downloader.rb index 2d9ba8d..5874f78 100644 --- a/lib/granblue/downloaders/summon_downloader.rb +++ b/lib/granblue/downloaders/summon_downloader.rb @@ -3,8 +3,50 @@ module Granblue module Downloader class SummonDownloader < BaseDownloader + def download + summon = Summon.find_by(granblue_id: @id) + return unless summon + + download_variants(summon) + end + private + def download_variants(summon) + # All summons have base variant + variants = [@id] + + # Add ULB variant if available + variants << "#{@id}_02" if summon.ulb + + # Add Transcendence variants if available + if summon.transcendence + variants.push("#{@id}_03", "#{@id}_04") + end + + log_info "Downloading summon variants: #{variants.join(', ')}" if @verbose + + variants.each do |variant_id| + download_variant(variant_id) + end + end + + def download_variant(variant_id) + log_info "-> #{variant_id}" if @verbose + return if @test_mode + + SIZES.each_with_index do |size, index| + path = download_path(size) + url = build_variant_url(variant_id, size) + process_download(url, size, path, last: index == SIZES.size - 1) + end + end + + def build_variant_url(variant_id, size) + directory = directory_for_size(size) + "#{@base_url}/#{directory}/#{variant_id}.jpg" + end + def object_type 'summon' end diff --git a/lib/granblue/downloaders/weapon_downloader.rb b/lib/granblue/downloaders/weapon_downloader.rb index 38f158f..5879ff0 100644 --- a/lib/granblue/downloaders/weapon_downloader.rb +++ b/lib/granblue/downloaders/weapon_downloader.rb @@ -3,8 +3,47 @@ module Granblue module Downloader class WeaponDownloader < BaseDownloader + def download + weapon = Weapon.find_by(granblue_id: @id) + return unless weapon + + download_variants(weapon) + end + private + def download_variants(weapon) + # All weapons have base variant + variants = [@id] + + # Add transcendence variants if available + if weapon.transcendence + variants.push("#{@id}_02", "#{@id}_03") + end + + log_info "Downloading weapon variants: #{variants.join(', ')}" if @verbose + + variants.each do |variant_id| + download_variant(variant_id) + end + end + + def download_variant(variant_id) + log_info "-> #{variant_id}" if @verbose + return if @test_mode + + SIZES.each_with_index do |size, index| + path = download_path(size) + url = build_variant_url(variant_id, size) + process_download(url, size, path, last: index == SIZES.size - 1) + end + end + + def build_variant_url(variant_id, size) + directory = directory_for_size(size) + "#{@base_url}/#{directory}/#{variant_id}.jpg" + end + def object_type 'weapon' end