67 lines
2.4 KiB
Ruby
67 lines
2.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class WowCharacterPositionsWorker < WowSidekiqWorker
|
|
def perform(wow_character_id)
|
|
return unless (wow_character = WowCharacter.find_by(character_id: wow_character_id))
|
|
|
|
# Protected data
|
|
RBattlenet.set_options(locale: 'all')
|
|
params = {
|
|
character_id: wow_character_id,
|
|
realm_id: wow_character.wow_realm.realm_id,
|
|
token: wow_character.user.token
|
|
}
|
|
result = RBattlenet::Wow::Profile::ProtectedSummary.find(params)
|
|
|
|
return unless result.status_code == 200
|
|
|
|
if (last_position = result.position)
|
|
wow_character_last_position = wow_character.last_position || WowGeoPosition.new(last_position_character: wow_character)
|
|
wow_character_last_position.wow_geo_zone = find_or_create_wow_geo_zone(last_position.zone)
|
|
wow_character_last_position.wow_geo_map = find_or_create_wow_geo_map(last_position.map)
|
|
wow_character_last_position.x = last_position.x
|
|
wow_character_last_position.y = last_position.y
|
|
wow_character_last_position.z = last_position.z
|
|
wow_character_last_position.facing = last_position.facing
|
|
wow_character_last_position.save
|
|
end
|
|
|
|
if (bind_position = result.bind_position)
|
|
wow_character_bind_position = wow_character.bind_position || WowGeoPosition.new(bind_position_character: wow_character)
|
|
wow_character_bind_position.wow_geo_zone = find_or_create_wow_geo_zone(bind_position.zone)
|
|
wow_character_bind_position.wow_geo_map = find_or_create_wow_geo_map(bind_position.map)
|
|
wow_character_bind_position.x = bind_position.x
|
|
wow_character_bind_position.y = bind_position.y
|
|
wow_character_bind_position.z = bind_position.z
|
|
wow_character_bind_position.facing = bind_position.facing
|
|
wow_character_bind_position.save
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def find_or_create_wow_geo_zone(zone)
|
|
wow_geo_zone = WowGeoZone.find_or_initialize_by(zone_id: zone.id)
|
|
locales.each do |locale|
|
|
Mobility.with_locale(locale[0]) do
|
|
wow_geo_zone.name = zone.name[locale[1]]
|
|
end
|
|
end
|
|
wow_geo_zone.save
|
|
|
|
wow_geo_zone.persisted? ? wow_geo_zone : nil
|
|
end
|
|
|
|
def find_or_create_wow_geo_map(map)
|
|
wow_geo_map = WowGeoMap.find_or_initialize_by(map_id: map.id)
|
|
locales.each do |locale|
|
|
Mobility.with_locale(locale[0]) do
|
|
wow_geo_map.name = map.name[locale[1]]
|
|
end
|
|
end
|
|
wow_geo_map.save
|
|
|
|
wow_geo_map.persisted? ? wow_geo_map : nil
|
|
end
|
|
end
|