Emi Matchu
8502b780c2
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!
91 lines
2.9 KiB
Ruby
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
|