1
0
Fork 0
forked from OpenNeo/impress

stop crashing when trying to translate item names

This commit is contained in:
Matchu 2015-07-27 13:23:46 -04:00
parent dcf254a78d
commit c5c587fab1
2 changed files with 14 additions and 12 deletions

View file

@ -389,12 +389,15 @@ class Item < ActiveRecord::Base
!species_support_ids.empty? !species_support_ids.empty?
end end
def origin_registry_info=(info) def add_origin_registry_info(info, locale)
Rails.logger.debug("info! #{info}")
# bear in mind that numbers from registries are floats # bear in mind that numbers from registries are floats
species_support_strs = info['species_support'] || [] species_support_strs = info['species_support'] || []
self.species_support_ids = species_support_strs.map(&:to_i) self.species_support_ids = species_support_strs.map(&:to_i)
self.name_translations = {locale => info['name']}
attribute_names.each do |attribute| attribute_names.each do |attribute|
next if attribute == 'name'
value = info[attribute.to_sym] value = info[attribute.to_sym]
if value if value
value = value.to_i if value.is_a? Float value = value.to_i if value.is_a? Float
@ -507,7 +510,7 @@ class Item < ActiveRecord::Base
item.id = item_id item.id = item_id
items[item_id] = item items[item_id] = item
end end
item.origin_registry_info = info_registry[item.id.to_s] item.add_origin_registry_info info_registry[item.id.to_s], I18n.default_locale
item.current_body_id = pet_type.body_id item.current_body_id = pet_type.body_id
# Build and update the SWF # Build and update the SWF

View file

@ -45,9 +45,10 @@ class Pet < ActiveRecord::Base
options[:item_scope]) options[:item_scope])
end end
def fetch_viewer_data(timeout=4) def fetch_viewer_data(timeout=4, locale=nil)
locale ||= I18n.default_locale
begin begin
neopets_language_code = I18n.compatible_neopets_language_code_for(I18n.locale) neopets_language_code = I18n.compatible_neopets_language_code_for(locale)
envelope = PET_VIEWER.request([name, 0]).post( envelope = PET_VIEWER.request([name, 0]).post(
:timeout => timeout, :timeout => timeout,
:headers => { :headers => {
@ -107,7 +108,7 @@ class Pet < ActiveRecord::Base
# Fetch registry data in parallel # Fetch registry data in parallel
registries = Parallel.map(candidates.keys, :in_threads => 8) do |locale| registries = Parallel.map(candidates.keys, :in_threads => 8) do |locale|
viewer_data = I18n.with_locale(locale) { fetch_viewer_data } viewer_data = fetch_viewer_data(4, locale) # TODO: ew, don't copy-paste the default timeout
[locale, viewer_data[:object_info_registry]] [locale, viewer_data[:object_info_registry]]
end end
@ -126,14 +127,12 @@ class Pet < ActiveRecord::Base
# Apply translations, and figure out what items are currently being worn # Apply translations, and figure out what items are currently being worn
current_items = Set.new current_items = Set.new
registries.each do |locale, registry| registries.each do |locale, registry|
I18n.with_locale(locale) do
registry.each do |item_id, item_info| registry.each do |item_id, item_info|
item = items_by_id[item_id.to_i] item = items_by_id[item_id.to_i]
item.origin_registry_info = item_info item.add_origin_registry_info(item_info, locale)
current_items << item current_items << item
end end
end end
end
@items = current_items @items = current_items
Item.transaction { @items.each { |i| i.save! if i.changed? } } Item.transaction { @items.each { |i| i.save! if i.changed? } }