diff --git a/app/models/item.rb b/app/models/item.rb index a96ce859..4ebb4fa4 100644 --- a/app/models/item.rb +++ b/app/models/item.rb @@ -104,8 +104,9 @@ class Item < ActiveRecord::Base } end - def before_save - sold_in_mall = false + def before_create + self.sold_in_mall = false + true end def origin_registry_info=(info) diff --git a/app/models/pet.rb b/app/models/pet.rb index 6649c25c..277efd70 100644 --- a/app/models/pet.rb +++ b/app/models/pet.rb @@ -32,6 +32,11 @@ class Pet < ActiveRecord::Base true end + def before_save + self.pet_type.save + self.items.each(&:save) + end + def self.load(name) pet = Pet.find_or_initialize_by_name(name) pet.load! diff --git a/app/models/pet_type.rb b/app/models/pet_type.rb index 27e31898..5d07e0cb 100644 --- a/app/models/pet_type.rb +++ b/app/models/pet_type.rb @@ -1,5 +1,3 @@ -require 'open-uri' - class PetType < ActiveRecord::Base IMAGE_CPN_FORMAT = 'http://pets.neopets.com/cpn/%s/1/1.png'; IMAGE_CP_LOCATION_REGEX = %r{^/cp/(.+?)/1/1\.png$}; diff --git a/app/models/swf_asset.rb b/app/models/swf_asset.rb index d80fce0e..77267581 100644 --- a/app/models/swf_asset.rb +++ b/app/models/swf_asset.rb @@ -1,4 +1,6 @@ class SwfAsset < ActiveRecord::Base + PUBLIC_ASSET_DIR = File.join('swfs', 'outfit') + LOCAL_ASSET_DIR = Rails.root.join('public', PUBLIC_ASSET_DIR) set_inheritance_column 'inheritance_type' delegate :depth, :to => :zone @@ -13,11 +15,7 @@ class SwfAsset < ActiveRecord::Base } def local_url - uri = URI.parse(url) - uri.host = RemoteImpressHost - pieces = uri.path.split('/') - uri.path = "/assets/swf/outfit/#{pieces[2]}/#{pieces[4..7].join('/')}" - uri.to_s + '/' + File.join(PUBLIC_ASSET_DIR, local_path_within_outfit_swfs) end def as_json(options={}) @@ -50,4 +48,36 @@ class SwfAsset < ActiveRecord::Base self.zone_id = data[:zone_id].to_i self.url = data[:asset_url] end + + def before_create + uri = URI.parse url + response = Net::HTTP.get_response(uri) + if response.is_a? Net::HTTPSuccess + new_local_path = File.join(LOCAL_ASSET_DIR, local_path_within_outfit_swfs) + new_local_dir = File.dirname new_local_path + content = response.body.force_encoding 'utf-8' + FileUtils.mkdir_p new_local_dir + File.open(new_local_path, 'w') do |f| + f.print content + end + else + begin + response.error! + rescue Exception => e + raise "Error loading SWF at #{url}: #{e.message}" + else + raise "Error loading SWF at #{url}. Response: #{response.inspect}" + end + end + end + + private + + def local_path_within_outfit_swfs + uri = URI.parse(url) + pieces = uri.path.split('/') + relevant_pieces = pieces[4..7] + relevant_pieces.unshift pieces[2] + File.join(relevant_pieces) + end end diff --git a/public/javascripts/items/show.js b/public/javascripts/items/show.js index 612277c1..474ac937 100644 --- a/public/javascripts/items/show.js +++ b/public/javascripts/items/show.js @@ -217,13 +217,13 @@ Preview = new function Preview() { this.embed = function (id) { swf_id = id; swfobject.embedSWF( - impressUrl('/assets/swf/preview.swf?v=2'), // URL + '/swfs/preview.swf?v=2', // URL id, // ID '100%', // width '100%', // height '9', // required version impressUrl('/assets/js/swfobject/expressInstall.swf'), // express install URL - {'swf_assets_path': impressUrl('/assets')}, // flashvars + {}, // flashvars {'wmode': 'transparent', 'allowscriptaccess': 'always'} // params ); } diff --git a/public/swfs/.gitignore b/public/swfs/.gitignore new file mode 100644 index 00000000..e42ecf84 --- /dev/null +++ b/public/swfs/.gitignore @@ -0,0 +1 @@ +outfit/* diff --git a/public/swfs/outfit b/public/swfs/outfit new file mode 120000 index 00000000..0e16e828 --- /dev/null +++ b/public/swfs/outfit @@ -0,0 +1 @@ +/home/matchu/public_html/dev/wearables/www/assets/swf/outfit/ \ No newline at end of file diff --git a/public/swfs/preview.swf b/public/swfs/preview.swf new file mode 100755 index 00000000..c91c52a1 Binary files /dev/null and b/public/swfs/preview.swf differ