impress/lib/tasks/neopets/import/styling_studio.rake
Emi Matchu 8502b780c2 Add FORCE=1 flag to override series names in Styling Studio auto-import
I ran a bad version of this job yesterday, and set a lot of the new
styles to an incorrect "Prismatic" series name. This will help me fix
them!

There's still styles to manually fix, where TNT decided not to put the
full series name in the item name. (Presumably some of the names were
too long? Or maybe they just forgot?) But this is a better starting
point!
2024-12-29 15:39:52 -08:00

91 lines
2.9 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
if ENV['FORCE'] == '1'
puts "❗ [#{label}]: Series name forcibly changed: " +
"#{record.series_name.inspect} -> #{new_series_name.inspect}"
record.series_name = new_series_name
else
puts "⚠️ [#{label}]: Series name may have changed, handle manually? " +
"#{record.series_name.inspect} -> #{new_series_name.inspect}"
end
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