Emi Matchu
2f090f3924
Ahh right, that's part of why I skipped Prismatics: it's no longer true that the first word of the style is its series name. In this change, I try to parse out everything before the pet name part of the style name, and default to skipping it if we can't quite get it right.
85 lines
2.7 KiB
Ruby
85 lines
2.7 KiB
Ruby
namespace "neopets:import" do
|
|
desc "Import alt style info from the NC Styling Studio"
|
|
task :styling_studio => ["neopets:import:neologin", :environment] do
|
|
puts "Importing from Styling Studio…"
|
|
|
|
all_species = Species.order(:name).to_a
|
|
|
|
# Load 10 species pages from the NC Mall at a time.
|
|
styles_by_species_id = {}
|
|
DTIRequests.load_many(max_at_once: 10) do |task|
|
|
num_loaded = 0
|
|
num_total = all_species.size
|
|
print "0/#{num_total} species loaded"
|
|
|
|
all_species.each do |species|
|
|
task.async {
|
|
begin
|
|
styles_by_species_id[species.id] = Neopets::NCMall.load_styles(
|
|
species_id: species.id,
|
|
neologin: Neologin.cookie,
|
|
)
|
|
rescue => error
|
|
puts "\n⚠️ Error loading for #{species.human_name}, skipping: #{error.message}"
|
|
end
|
|
num_loaded += 1
|
|
print "\r#{num_loaded}/#{num_total} species loaded"
|
|
}
|
|
end
|
|
end
|
|
print "\n"
|
|
|
|
style_ids = styles_by_species_id.values.flatten(1).map { |s| s[:oii] }
|
|
style_records_by_id =
|
|
AltStyle.where(id: style_ids).to_h { |as| [as.id, as] }
|
|
|
|
all_species.each do |species|
|
|
styles = styles_by_species_id[species.id]
|
|
next if styles.nil?
|
|
|
|
counts = {changed: 0, unchanged: 0, skipped: 0}
|
|
styles.each do |style|
|
|
record = style_records_by_id[style[:oii]]
|
|
label = "#{style[:name]} (#{style[:oii]})"
|
|
if record.nil?
|
|
puts "❔ [#{label}]: Not modeled yet, skipping"
|
|
counts[:skipped] += 1
|
|
next
|
|
end
|
|
|
|
if !record.real_thumbnail_url?
|
|
record.thumbnail_url = style[:image]
|
|
puts "✅ [#{label}]: Thumbnail URL is now #{style[:image].inspect}"
|
|
elsif record.thumbnail_url != style[:image]
|
|
puts "⚠️ [#{label}: Thumbnail URL may have changed, handle manually? " +
|
|
"#{record.thumbnail_url.inspect} -> #{style[:image].inspect}"
|
|
end
|
|
|
|
if style[:name].end_with?(record.pet_name)
|
|
new_series_name = style[:name].split(record.pet_name).first.strip
|
|
if !record.real_series_name?
|
|
record.series_name = new_series_name
|
|
puts "✅ [#{label}]: Series name is now #{new_series_name.inspect}"
|
|
elsif record.series_name != new_series_name
|
|
puts "⚠️ [#{label}: Series name may have changed, handle manually? " +
|
|
"#{record.series_name.inspect} -> #{new_series_name.inspect}"
|
|
end
|
|
else
|
|
puts "⚠️ [#{label}: Unable to detect series name, handle manually? " +
|
|
"#{record.full_name.inspect} -> #{style[:name].inspect}"
|
|
end
|
|
|
|
if record.changed?
|
|
counts[:changed] += 1
|
|
else
|
|
counts[:unchanged] += 1
|
|
end
|
|
|
|
record.save!
|
|
end
|
|
|
|
puts "#{species.human_name}: #{counts[:changed]} changed, " +
|
|
"#{counts[:unchanged]} unchanged, #{counts[:skipped]} skipped"
|
|
end
|
|
end
|
|
end
|