Compare commits

...

2 commits

Author SHA1 Message Date
0244653cb0 Add /rainbow-pool.json for all species, colors, and poses
This clocks in a bit bigger than what Impress 2020 does in terms of
binary encoding (with gzip it's at 11K instead of 4K), but I'm okay
with that for the simplicity win.

Gonna try to swap this in for where we're still using Impress 2020 for
the species/color picker in the outfit editor!
2024-10-07 17:38:53 -07:00
2c0d55edd1 Remove unused code related to no-longer-present asset downloads 2024-10-07 17:06:14 -07:00
9 changed files with 56 additions and 48 deletions

View file

@ -1,27 +1,41 @@
class PetTypesController < ApplicationController
def index
@species_names = Species.order(:name).map(&:human_name)
@color_names = Color.order(:name).map(&:human_name)
respond_to do |format|
format.html {
@species_names = Species.order(:name).map(&:human_name)
@color_names = Color.order(:name).map(&:human_name)
if params[:species].present?
@selected_species = Species.find_by!(name: params[:species])
@selected_species_name = @selected_species.human_name
end
if params[:color].present?
@selected_color = Color.find_by!(name: params[:color])
@selected_color_name = @selected_color.human_name
end
if params[:species].present?
@selected_species = Species.find_by!(name: params[:species])
@selected_species_name = @selected_species.human_name
end
if params[:color].present?
@selected_color = Color.find_by!(name: params[:color])
@selected_color_name = @selected_color.human_name
end
@pet_types = PetType.
includes(:color, :species, :pet_states).
order(created_at: :desc).
paginate(page: params[:page], per_page: 30)
@pet_types = PetType.
includes(:color, :species, :pet_states).
order(created_at: :desc).
paginate(page: params[:page], per_page: 30)
if @selected_species
@pet_types = @pet_types.where(species_id: @selected_species)
end
if @selected_color
@pet_types = @pet_types.where(color_id: @selected_color)
if @selected_species
@pet_types = @pet_types.where(species_id: @selected_species)
end
if @selected_color
@pet_types = @pet_types.where(color_id: @selected_color)
end
}
format.json {
if stale?(etag: PetState.last_updated_key)
render json: {
species: Species.order(:name).all,
colors: Color.order(:name).all,
supported_poses: PetState.all_supported_poses,
}
end
}
end
end

View file

@ -1,6 +1,5 @@
class PetsController < ApplicationController
rescue_from Pet::PetNotFound, with: :pet_not_found
rescue_from PetType::DownloadError, SwfAsset::DownloadError, with: :asset_download_error
rescue_from Pet::DownloadError, with: :pet_download_error
rescue_from Pet::UnexpectedDataFormat, with: :unexpected_data_format
@ -48,12 +47,6 @@ class PetsController < ApplicationController
:status => :not_found
end
def asset_download_error(e)
Rails.logger.warn e.message
pet_load_error :long_message => t('pets.load.asset_download_error'),
:status => :gateway_timeout
end
def pet_download_error(e)
Rails.logger.warn e.message
Rails.logger.warn e.backtrace.join("\n")

View file

@ -12,7 +12,7 @@ class PetState < ApplicationRecord
belongs_to :pet_type
delegate :color, to: :pet_type
delegate :species_id, :species, :color_id, :color, to: :pet_type
alias_method :swf_asset_ids_from_association, :swf_asset_ids
@ -209,5 +209,23 @@ class PetState < ApplicationRecord
self.female = female
self.unconverted = unconverted
end
def self.last_updated_key
PetState.maximum(:id)
end
def self.all_supported_poses
Rails.cache.fetch("PetState.all_supported_poses #{last_updated_key}") do
{}.tap do |h|
includes(:pet_type).find_each do |pet_state|
h[pet_state.species_id] ||= {}
h[pet_state.species_id][pet_state.color_id] ||= []
h[pet_state.species_id][pet_state.color_id] << pet_state.pose
end
h.values.map(&:values).flatten(1).each(&:uniq!).each(&:sort!)
end
end
end
end

View file

@ -156,7 +156,5 @@ class PetType < ApplicationRecord
end
end
end
class DownloadError < Exception;end
end

View file

@ -2,8 +2,6 @@ require 'addressable/template'
require 'async'
require 'async/barrier'
require 'async/semaphore'
require 'fileutils'
require 'uri'
class SwfAsset < ApplicationRecord
# We use the `type` column to mean something other than what Rails means!
@ -373,6 +371,4 @@ class SwfAsset < ApplicationRecord
# linked to it, meaning that it's probably wearable by all bodies.
self.body_id = 0 if !@body_id_overridden && (!self.body_specific? || (!self.new_record? && self.body_id_changed?))
end
class DownloadError < Exception;end
end

View file

@ -35,7 +35,8 @@ en-MEEP:
terms: Terms of Use (meeped Sep 2022)
contact: Meeptact
email: Questions, comments, meepits
copyright: Images © 1999%{year} World of Neopets, Inc. All Rights Reserved.
copyright:
Images © 1999%{year} World of Neopets, Inc. All Rights Reserved.
Used With Permission. Meep.
items:
@ -634,10 +635,6 @@ en-MEEP:
load:
not_found: We couldn't meep a pet by that name. Is it meeped correctly?
asset_download_error:
We meeped the pet and what it's wearing, but couldn't meep the
associated meepia files. Maybe Neopets is down, or changed their
firewall rules? Please meep again later!
pet_download_error:
We couldn't meep to Neopets to meep up the pet. Maybe they're down.
Please try meep later!

View file

@ -755,10 +755,6 @@ en:
load:
not_found: We couldn't find a pet by that name. Is it spelled correctly?
asset_download_error:
We found the pet and what it's wearing, but couldn't download the
associated media files. Maybe Neopets is down, or changed their
firewall rules? Please try again later!
pet_download_error:
We couldn't connect to Neopets to look up the pet. Maybe they're down.
Please try again later!

View file

@ -116,8 +116,7 @@ es:
submit: Guardar
edit: Editar
delete: Eliminar
delete_confirmation:
¿Estás seguro/a que quieres eliminar la lista "%{list_name}"?
delete_confirmation: ¿Estás seguro/a que quieres eliminar la lista "%{list_name}"?
empty: Esta lista está vacía.
edit:
title: Editando la lista "%{list_name}"
@ -503,7 +502,6 @@ es:
submission_success: "%{points} puntos"
load:
not_found: No hemos podido encontrar a un pet con ese nombre. ¿Lo has escrito correctamente?
asset_download_error: Hemos encontrado el pet que intentas vestir, pero no hemos podido descargar las imágenes que lo asocian. Posiblemente Neopets está caído. ¡Por favor inténtalo de nuevo más tarde!
pet_download_error: No hemos podido conectar con Neopets para ver tu pet. Posiblemente el servidor de Neopets se ha caído. ¡Por favor inténtalo de nuevo más tarde!
users:
index:

View file

@ -114,8 +114,7 @@ pt:
submit: Salvar
edit: Editar
delete: Excluir
delete_confirmation:
Você tem certeza que deseja excluir "%{list_name}"?
delete_confirmation: Você tem certeza que deseja excluir "%{list_name}"?
empty: Esta lista está vazia.
edit:
title: Editando lista "%{list_name}"
@ -497,7 +496,6 @@ pt:
submission_success: "%{points} pontos"
load:
not_found: Não foi possível achar um pet com esse nome. Está escrito corretamente?
asset_download_error: Nós achamos o pet e o que ele está vestindo, mas não foi possível baixar os dados. Talvez Neopets esteja fora do ar. Por favor tente mais tarde!
pet_download_error: Nós não conseguimos conectar ao Neopets para achar o pet. Talvez eles estejam fora do ar. Por favor tente mais tarde!
users:
index: