cloudhdr_rails 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +29 -0
  4. data/app/assets/javascripts/cloudhdr/updater.js +115 -0
  5. data/app/assets/stylesheets/cloudhdr/updater.css +8 -0
  6. data/app/controllers/cloudhdr_controller.rb +64 -0
  7. data/app/helpers/cloudhdr_helper.rb +245 -0
  8. data/app/models/cloudhdr_job.rb +189 -0
  9. data/app/views/cloudhdr/_thumbnail_update.html.erb +3 -0
  10. data/app/views/cloudhdr/multi_thumbnail_update.json.erb +7 -0
  11. data/app/views/cloudhdr/thumbnail_update.js.erb +1 -0
  12. data/config/routes.rb +8 -0
  13. data/lib/cloudhdr_rails/acts_as_cloudhdr.rb +1020 -0
  14. data/lib/cloudhdr_rails/engine.rb +4 -0
  15. data/lib/cloudhdr_rails/errors.rb +46 -0
  16. data/lib/cloudhdr_rails/version.rb +3 -0
  17. data/lib/cloudhdr_rails.rb +7 -0
  18. data/lib/generators/cloudhdr_rails/model_update_generator.rb +52 -0
  19. data/lib/generators/cloudhdr_rails/scaffold_generator.rb +94 -0
  20. data/lib/generators/cloudhdr_rails/setup_generator.rb +33 -0
  21. data/lib/generators/cloudhdr_rails/templates/cloudhdr.yml +19 -0
  22. data/lib/generators/cloudhdr_rails/templates/controller.rb +71 -0
  23. data/lib/generators/cloudhdr_rails/templates/helper.rb +5 -0
  24. data/lib/generators/cloudhdr_rails/templates/migration.rb +21 -0
  25. data/lib/generators/cloudhdr_rails/templates/model.rb +15 -0
  26. data/lib/generators/cloudhdr_rails/templates/model_migration.rb +56 -0
  27. data/lib/generators/cloudhdr_rails/templates/model_thumbnail.rb +5 -0
  28. data/lib/generators/cloudhdr_rails/templates/model_update_migration.rb +64 -0
  29. data/lib/generators/cloudhdr_rails/templates/views/_form.html.erb.tt +23 -0
  30. data/lib/generators/cloudhdr_rails/templates/views/index.html.erb.tt +26 -0
  31. data/lib/generators/cloudhdr_rails/templates/views/new.html.erb.tt +5 -0
  32. data/lib/generators/cloudhdr_rails/templates/views/show.html.erb.tt +12 -0
  33. data/lib/tasks/cloudhdr_rails_tasks.rake +19 -0
  34. metadata +212 -0
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,3 @@
1
+ = CloudhdrRails
2
+
3
+ This project rocks and uses MIT-LICENSE.
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'CloudhdrRails'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
@@ -0,0 +1,115 @@
1
+ var Cloudhdr = {};
2
+
3
+
4
+
5
+ Cloudhdr.JQueryUpdater = function(){
6
+ _self = this;
7
+ this.img_selector = "img[data-cloudhdr-waiting]";
8
+
9
+ this.init = function(options){
10
+ //console.log("Cloudhdr.Updater.init()");
11
+ if(options == null){ options = {}; }
12
+ this.jslib = options.jslib || "jquery";
13
+ setTimeout(this.update,200);
14
+ };
15
+
16
+ this.update = function(){
17
+ //console.log("starting update!!");
18
+ params = _self.build_update_params();
19
+ //console.debug(params);
20
+ if(params.length == 0){
21
+ //console.debug("ending because params are blank")
22
+
23
+ return;
24
+ }
25
+ $.ajax({ type: 'POST',
26
+ url : '/cloudhdr/multi_thumbnail_update.json',
27
+ dataType : 'json',
28
+ data : { images : params },
29
+ error : function(jqXHR, textStatus, errorThrown) {
30
+ //console.log(jqXHR); console.log(textStatus); console.log(errorThrown);
31
+ },
32
+ success : _self.update_response
33
+ });
34
+ }
35
+
36
+ this.update_response = function(data, textStatus, jqXHR){
37
+ //console.log("starting update_response");
38
+ $.each(data,function(key,value){
39
+ $("#"+key).replaceWith(value);
40
+ });
41
+ setTimeout(_self.update,15000);
42
+ }
43
+
44
+
45
+ this.build_update_params = function(){
46
+ params = [];
47
+ elements = _self.select_elements();
48
+ $.each(elements,function(index,elem){
49
+ // Format is : Image_1_medium_db0ce8ba5d55c25eee7c767220d654fe
50
+ // Format is : class_id_thumbnail_random
51
+ //match = $(elem).attr("id").match(/^(.*)_(.*)_(.*)_(.*)$/)
52
+ //hash = {
53
+ // class_name : match[1],
54
+ // id : match[2],
55
+ // thumbnail : match[3],
56
+ // random : match[4]
57
+ //}
58
+ params.push( $(elem).attr("id") );
59
+ });
60
+ return params;
61
+ }
62
+
63
+ this.select_elements = function(){
64
+ return $(this.img_selector);
65
+ }
66
+
67
+
68
+ }; // Cloudhdr.JQueryUpdater
69
+
70
+
71
+
72
+
73
+
74
+ Cloudhdr.Updater = function(){
75
+ _self = this;
76
+ this.img_selector = "img[data-cloudhdr-waiting]";
77
+
78
+ this.init = function(options){
79
+ //console.log("Cloudhdr.Updater.init()");
80
+ if(options == null){ options = {}; }
81
+ this.jslib = options.jslib || "jquery";
82
+ setTimeout(this.update,2000);
83
+ };
84
+
85
+ this.update = function(){
86
+ params = _self.build_update_params();
87
+ //console.debug(params);
88
+ }
89
+
90
+ this.build_update_params = function(){
91
+ params = {};
92
+ elements = _self.select_elements();
93
+
94
+ return params;
95
+ }
96
+
97
+ this.select_elements = function(){
98
+ if(this.jslib == "jquery"){
99
+ return this.select_elements_jquery();
100
+ }else if(this.jslib == "prototype"){
101
+ return this.select_elements_prototype();
102
+ }
103
+ }
104
+
105
+ this.select_elements_jquery = function(){
106
+ return $(this.img_selector);
107
+ };
108
+
109
+ this.select_elements_prototype = function(){
110
+ return $$(this.img_selector);
111
+ };
112
+
113
+ }; // Cloudhdr.PrototypeUpdater
114
+
115
+
@@ -0,0 +1,8 @@
1
+ /******************************************************
2
+ * Video Posters
3
+ */
4
+ .cloudhdr_error{
5
+ border:1px solid red;
6
+ background:#fee;
7
+ padding:10px;
8
+ }
@@ -0,0 +1,64 @@
1
+ class CloudhdrController < ApplicationController
2
+
3
+ protect_from_forgery :except=>[:cloudhdr_notification_update,:zencoder_notification_update,:thumbnail_update,:multi_thumbnail_update]
4
+
5
+ def cloudhdr_notification_update
6
+ full_params = params
7
+ CloudhdrJob.update_from_cloudhdr(full_params)
8
+ respond_to do |format|
9
+ format.json { render :json => {} }
10
+ end
11
+ end
12
+
13
+ def thumbnail_update
14
+ @img = Kernel.const_get(params[:class]).find params[:id]
15
+ @random = params[:random]
16
+ @live_vide = params[:live_video]
17
+ respond_to do |format|
18
+ format.js {}
19
+ end
20
+ end
21
+
22
+ def multi_thumbnail_update
23
+ @outputs = []
24
+ params[:images].each do |image|
25
+ # Format ex : Image_1_medium_db0ce8ba5d55c25eee7c767220d654fe
26
+ # Format is : class_id_thumbnail_random
27
+ match = image.match(/^(.*)_(.*)_(.*)_(.*)$/)
28
+ hash = {
29
+ :elem_id => image,
30
+ :class_name => match[1],
31
+ :id => match[2],
32
+ :thumbnail => match[3],
33
+ :random => match[4],
34
+ :image => Kernel.const_get(match[1]).find(match[2])
35
+ }
36
+ @outputs << hash
37
+ end
38
+ respond_to do |format|
39
+ format.json {}
40
+ end
41
+ end
42
+
43
+
44
+ # thanks to http://avdi.org/devblog/2009/07/14/recursively-symbolize-keys/
45
+ #def symbolize_keys(hash)
46
+ #puts "the hash = #{hash.class} : #{hash}"
47
+ #return hash if !hash.is_a?(Hash)
48
+ #hash.inject({}){|result, (key, value)|
49
+ #new_key = case key
50
+ #when String then key.to_sym
51
+ #else key
52
+ #end
53
+ #new_value = case value
54
+ #when Hash then symbolize_keys(value)
55
+ #else value
56
+ #end
57
+ #result[new_key] = new_value
58
+ #result
59
+ #}
60
+ #end
61
+
62
+
63
+
64
+ end
@@ -0,0 +1,245 @@
1
+ module CloudhdrHelper
2
+
3
+ def preview_reload_timeout
4
+ #time in ms between preview reloading
5
+ 10000
6
+ end
7
+
8
+
9
+ #def cloudhdr_includes
10
+ #tag = javascript_include_tag 'cloudhdr.js'
11
+ #tag += "\n"
12
+ #tag += stylesheet_link_tag 'cloudhdr.css'
13
+ #end
14
+
15
+
16
+ def cloudhdr_link(text,file)
17
+ if file.cloudhdr_status == "ready" or file.cloudhdr_status == "s3"
18
+ link_to text, file.public_filename
19
+ else
20
+ text
21
+ end
22
+ end
23
+
24
+
25
+ # for now we'll assume that a thumbnail is needed
26
+ # some files aren't displayable in a native way (NEF etc...)
27
+ #
28
+ def cloudhdr_thumbnail(image,thumbnail="small",options={})
29
+ if image.image?
30
+ return cloudhdr_image_thumbnail(image,thumbnail,options)
31
+ else
32
+ return error_div("This #{image.class} is not an image.")
33
+ end
34
+ end
35
+
36
+
37
+ # Passing a thumbnail is STRONGLY ADVISED
38
+ # Unless you are abosultely sure that you are only accepting web safe image formats you'll want to supply a thumbnail arg
39
+ #
40
+ def cloudhdr_image_thumbnail(image_upload,thumbnail="small",options={})
41
+ if ActsAsCloudhdr.storeage_mode == "offline"
42
+ cloudhdr_image_offline(image_upload,thumbnail,options)
43
+ else
44
+ cloudhdr_image_online(image_upload,thumbnail,options)
45
+ end
46
+ #return display_image(image_upload,options) if thumbnail.blank?
47
+ #thumbnail = find_or_create_thumbnail(image_upload,thumbnail,options)
48
+ #return display_image_thumbnail(image_upload,thumbnail,options) if thumbnail
49
+ #return error_div "Could not find a thumbnail for: class=#{image_upload.class} thumbnail=#{thumbnail.to_json}"
50
+ end
51
+
52
+ def cloudhdr_image_offline(image_upload,thumbnail="small",options={})
53
+ if !image_upload.web_safe?
54
+ error_div "#{image_upload.filename} can not be displayed directly because it is not web safe. Content type = #{image_upload.content_type}"
55
+ elsif thumbnail.blank?
56
+ image_tag(image_upload.public_url,options)
57
+ else
58
+ begin
59
+ # since we're in offline mode here we don't actually have files created for the thumbnail
60
+ # so we return an image with the path to the original, we don't care about cloudhdr_status
61
+ thumbnail = find_thumbnail_attributes(image_upload,thumbnail,options)
62
+ image_tag image_upload.public_url, {:width => thumbnail[:width],:height => thumbnail[:height]}.merge(options)
63
+ rescue ActsAsCloudhdr::ThumbnailAttributesNotFoundError
64
+ error_div "'#{thumbnail}' is not a valid thumbnail name or size string."
65
+ end
66
+ end
67
+ end
68
+
69
+ def cloudhdr_image_online(image_upload,thumbnail="small",options={})
70
+ if thumbnail.blank? and !image_upload.web_safe?
71
+ error_div "#{image_upload.filename} can not be displayed directly because it is not web safe. Content type = #{image_upload.content_type}"
72
+ elsif thumbnail.blank? and !image_upload.ready?
73
+ # don't know width and height yet
74
+ image_tag(image_upload.public_url,options)
75
+ elsif thumbnail.blank?
76
+ # now we have width and height
77
+ image_tag(image_upload.public_url,options.merge(:width => image_upload.width, :height => image_upload.height))
78
+ elsif !image_upload.ready?
79
+ begin
80
+ # We can only look for attributes now to show a pending message with the correct dimensions
81
+ thumb_atts = find_thumbnail_attributes(image_upload,thumbnail,options)
82
+ pending_cloudhdr_thumbnail(image_upload,thumb_atts,options)
83
+ rescue ActsAsCloudhdr::ThumbnailAttributesNotFoundError
84
+ error_div "'#{thumbnail}' is not a valid thumbnail name or size string."
85
+ end
86
+ else
87
+ begin
88
+ thumb = find_or_create_thumbnail(image_upload,thumbnail,options)
89
+ if thumb.ready?
90
+ image_tag thumb.public_url, {:width => thumb[:width],:height => thumb[:height]}.merge(options)
91
+ else
92
+ pending_cloudhdr_thumbnail(image_upload,thumb,options)
93
+ end
94
+ rescue ActsAsCloudhdr::ThumbnailNotFoundError
95
+ error_div "'#{thumbnail}' is not a valid thumbnail name or size string."
96
+ end
97
+ end
98
+ end
99
+
100
+ # def display_image(image_upload,options={})
101
+ # if ActsAsCloudhdr.storeage_mode == "offline"
102
+ # offline_cloudhdr_image_thumbnail(image_upload,image_upload,options)
103
+ # end
104
+ # end
105
+ def find_thumbnail_attributes(image_upload,thumbnail,options)
106
+ if thumbnail.is_a? String
107
+ thumb_atts = image_upload.thumbnail_attributes_for(thumbnail)
108
+ elsif thumbnail.is_a? Hash
109
+ thumb_atts = thumbnail
110
+ end
111
+ thumb_atts
112
+ end
113
+
114
+ def find_or_create_thumbnail(image_upload,thumbnail="small",options={})
115
+ if thumbnail.is_a? String
116
+ thumb = image_upload.thumbnail_for(thumbnail)
117
+ end
118
+ thumb
119
+ end
120
+
121
+
122
+
123
+ # # image = the original upload
124
+ # # thumbnail = a record representing the dimensions of the thumbnail
125
+ # # options = some other stuff
126
+ # def display_image_thumbnail(image_upload,thumbnail,options)
127
+ # puts "Thumbnail = #{thumbnail.to_json}"
128
+ # if ActsAsCloudhdr.storeage_mode == "offline"
129
+ # offline_cloudhdr_image_thumbnail(image_upload,thumbnail,options)
130
+ # elsif thumbnail.cloudhdr_status != "ready"
131
+ # pending_cloudhdr_thumbnail(image_upload,thumbnail,false,options)
132
+ # else
133
+ # image_tag thumbnail.public_url, {:width => thumbnail[:width],:height => thumbnail[:height]}.merge(options)
134
+ # end
135
+ # end
136
+
137
+ # # A special handler when the mode is 'offline'
138
+ # # The thumbnail record will contain the proper dimensions, but the path will be no good.
139
+ # # This combines the path of the original with the dimensions of the original and serves from the local store.
140
+ # def offline_cloudhdr_image_thumbnail(photo,thumbnail_atts,options={})
141
+ # image_tag photo.local_url, {:width => thumbnail_atts[:width],:height => thumbnail_atts[:height]}.merge(options)
142
+ # #if thumbnail_atts.blank?
143
+ # # image_tag photo.local_url, options
144
+ # #elsif thumbnail_atts[:aspect_mode] == "stretch"
145
+ # #
146
+ # #else
147
+ # # "<div style='overflow:hidden;background:#ccc;width:#{thumbnail_atts[:width]}px;height:#{thumbnail_atts[:height]}px'>#{image_tag(photo.local_url,{:width => thumbnail_atts[:width]}.merge(options))}</div>".html_safe
148
+ # #end
149
+ # end
150
+
151
+
152
+
153
+ # Thumbnail should either be an ActiveRecord or a Hash
154
+ def pending_cloudhdr_thumbnail(photo,thumbnail,options,spinner='waiting')
155
+ random = SecureRandom.hex(16)
156
+ Rails.logger.debug "======================================================"
157
+ Rails.logger.debug "building pending thumbnail for #{thumbnail.class} #{thumbnail.to_json}"
158
+ if thumbnail.is_a? Hash
159
+ thumb_name = thumbnail[:label]
160
+ else
161
+ thumb_name = thumbnail.thumbnail
162
+ end
163
+ width = thumbnail[:width]
164
+ height = thumbnail[:height]
165
+
166
+ elemId = "#{photo.class.to_s}_#{photo.id.to_s}_#{thumb_name}_#{random}"
167
+
168
+ tag = image_tag "#{spinner}.gif", :size=>"#{width}x#{height}", :id => elemId, "data-cloudhdr-waiting" => true
169
+ end
170
+
171
+ # def error_cloudhdr_thumbnail(photo,thumbnail,options,spinner='error')
172
+ # width = thumbnail.try :width
173
+ # height = thumbnail.try :height
174
+ # tag = image_tag "#{spinner}.gif", :size=>"#{width}x#{height}"
175
+ # end
176
+
177
+
178
+
179
+ # # for now we'll assume that a thumbnail is needed
180
+ # # some files aren't displayable in a native way (NEF etc...)
181
+ # #
182
+ # def old_cloudhdr_image_thumbnail(image_upload,thumbnail="small",options={})
183
+ # puts "thumbnail = #{thumbnail}"
184
+ # thumbnail_atts = image_upload.class.thumbnail_attributes_for thumbnail
185
+ # if ActsAsCloudhdr.storeage_mode == "offline" and (thumbnail.blank? or !thumbnail_atts.blank?)
186
+ # return offline_cloudhdr_thumbnail(image_upload,thumbnail_atts,options)
187
+ # elsif thumbnail.nil? and (image_upload.cloudhdr_status == "ready")
188
+ # return image_tag image_upload.public_url, {:size=>"#{image_upload.width}x#{image_upload.height}"}.merge(options)
189
+ # elsif thumbnail_atts.blank?
190
+ # return error_div("'#{thumbnail}' is not a valid thumbnail size for #{image_upload.class}")
191
+ # elsif image_upload.cloudhdr_status != "ready" #and image_upload.zencoder_status != "ready"
192
+ # puts "image_upload is not ready!!!!!!!!!!!!!!!!!!!!!!!!"
193
+ # return pending_cloudhdr_thumbnail(image_upload,thumbnail,false,thumbnail_atts)
194
+ # #else
195
+ # # return "<div class='notice'>Online mode is coming soon!</div>"
196
+ # end
197
+ #
198
+ # thumb = image_upload.thumbnail_for(thumbnail)
199
+ # if thumb.blank? or thumb.cloudhdr_status != "ready"
200
+ # puts "thumb (#{thumb.to_json}) is not ready!!!!!!!!!!!!!!!!!!!!!!!!"
201
+ # #this happens if the main image has been notified, but not this thumbnail
202
+ # return pending_cloudhdr_thumbnail(image_upload,thumbnail,false,thumbnail_atts)
203
+ # end
204
+ # image_tag thumb.public_url, {:size=>"#{thumb.width}x#{thumb.height}"}.merge(options)
205
+ # end
206
+
207
+
208
+ def error_div(msg)
209
+ %[<div class="cloudhdr_error">#{msg}</div>].html_safe
210
+ end
211
+
212
+
213
+
214
+
215
+ #def jquery_updater(photo,thumbnail,random)
216
+ # %[
217
+ # <script type="text/javascript">
218
+ # setTimeout(function() {
219
+ # $.ajax({ type: 'POST',
220
+ # url : '/cloudhdr/thumbnail_update.js',
221
+ # dataType : 'script',
222
+ # data : { class:'#{photo.class.to_s}', id:#{photo.id.to_s},thumbnail:'#{thumbnail}',random:'#{random}' }
223
+ # });
224
+ # },#{preview_reload_timeout});
225
+ # </script>
226
+ # ]
227
+ #end
228
+
229
+
230
+
231
+ #def prototype_updater(photo,thumbnail,random)
232
+ # %[
233
+ # <script type="text/javascript">
234
+ # setTimeout(function() {
235
+ # new Ajax.Request( '/cloudhdr/thumbnail_update', {
236
+ # evalScripts:true,
237
+ # parameters: { class:'#{photo.class.to_s}', id:#{photo.id.to_s},thumbnail:'#{thumbnail}',random:'#{random}' }
238
+ # });
239
+ # },#{preview_reload_timeout});
240
+ # </script>
241
+ # ]
242
+ #end
243
+
244
+
245
+ end
@@ -0,0 +1,189 @@
1
+ class CloudhdrJob < ActiveRecord::Base
2
+
3
+ belongs_to :image, :polymorphic=>true
4
+
5
+ scope :pending, :conditions => "cloudhdr_status != 'ready'"
6
+ #scope :for_components, :conditions => "tracking_mode = 'component'"
7
+ #scope :for_jobs, :conditions => "tracking_mode = 'job'"
8
+
9
+ def initialize(params = {}, options={})
10
+ super
11
+ #self.tracking_mode = "component" unless self.tracking_mode
12
+ end
13
+
14
+ def update_status
15
+ job_data = Cloudhdr::Job.details(cloudhdr_job_id).body
16
+ #puts job_data.to_json
17
+ puts " CloudhdrJob #{id} = #{job_data["aasm_state"]}"
18
+ puts "job_data = #{job_data}"
19
+ puts "*" * 50
20
+ puts "cloudhdr_input_id = #{cloudhdr_input_id}"
21
+ if cloudhdr_input_id
22
+ job_data["inputs"].each do |input|
23
+ #puts "input = #{input.to_json}"
24
+ puts "input id = #{input["id"]} my cloudhdr_input_id = #{cloudhdr_input_id}"
25
+ if input["id"] == cloudhdr_input_id
26
+ input.symbolize_keys!
27
+ params = {
28
+ :class => image_type,
29
+ :id => image_id,
30
+ :job => { :id => job_data["id"] },
31
+ :input => input
32
+ }
33
+ CloudhdrJob.update_from_cloudhdr(params)
34
+ end
35
+ end
36
+ elsif cloudhdr_output_id
37
+ outputs = (job_data["thumbnails"] || []) +
38
+ (job_data["hdrs"] || []) +
39
+ (job_data["tone_mappings"] || []) +
40
+ (job_data["composites"] || []) +
41
+ (job_data["hdr_htmls"] || [])
42
+ outputs.each do |output|
43
+ if output["id"] == cloudhdr_output_id
44
+ output.symbolize_keys!
45
+ output[:url] = output[:base_url] + output[:filename]
46
+ params = {
47
+ :class => image_type,
48
+ :id => image_id,
49
+ :job => { :id => job_data["id"] },
50
+ :output => output
51
+ }
52
+ CloudhdrJob.update_from_cloudhdr(params)
53
+ end
54
+ end
55
+ end
56
+ puts "+++++++++++++++"
57
+ #if job_data["aasm_state"] == "complete"
58
+ # self.cloudhdr_status = "ready"
59
+ # self.image.cloudhdr_status = "ready"
60
+ # self.image.thumbnails.each do |t|
61
+ # t.cloudhdr_status = "ready"
62
+ # end
63
+ # self.save
64
+ # #self.image.save
65
+ #end
66
+ end
67
+
68
+ def self.update_pending_jobs
69
+ CloudhdrJob.pending.find_each do |e|
70
+ e.update_status
71
+ end
72
+ end
73
+
74
+
75
+ def self.update_from_cloudhdr(params)
76
+ #if params.keys.include?("inputs") && params.keys.include?("outputs")
77
+ update_from_cloudhdr_job_style(params)
78
+ #else
79
+ # update_from_cloudhdr_component_style(params)
80
+ #end
81
+ end
82
+
83
+ def self.update_from_cloudhdr_job_style(params)
84
+ if params[:job][:type] == 'ThumbnailJob'
85
+ update_from_cloudhdr_thumbnail_job(params)
86
+ elsif params[:job][:type] == 'CompositeJob' || params[:job][:type] == 'ToneMappingJob'
87
+ update_from_cloudhdr_generic_job_with_thumbnails(params)
88
+ else
89
+ update_from_cloudhdr_generic_job(params)
90
+ end
91
+ end
92
+
93
+ def self.update_from_cloudhdr_thumbnail_job(params)
94
+ #debugger
95
+ job = self.find_by_cloudhdr_job_id params[:job][:id]
96
+ image = job.image
97
+
98
+ img_params = params[:inputs].first
99
+ update_image_and_job_from_img_params(image,job,img_params)
100
+
101
+ params[:outputs].each do |thumb_params|
102
+ thumbnail = image.thumbnail_for(thumb_params[:label])
103
+ update_image_and_job_from_img_params(thumbnail,job,thumb_params)
104
+ thumbnail.cloudhdr_status = "ready" if thumbnail.respond_to?(:cloudhdr_status=)
105
+ thumbnail.cloudhdr_status = "ready" if thumbnail.respond_to?(:cloudhdr_status=)
106
+ thumbnail.save!
107
+ end
108
+
109
+ image.cloudhdr_status = "ready" if image.respond_to?(:cloudhdr_status=)
110
+ image.cloudhdr_status = "ready" if image.respond_to?(:cloudhdr_status=)
111
+ image.save!
112
+ image.fire_ready_callback
113
+
114
+ job.cloudhdr_status = "ready"
115
+ job.save
116
+ job
117
+ end
118
+
119
+ def self.update_from_cloudhdr_generic_job(params)
120
+ #debugger
121
+ job = self.find_by_cloudhdr_job_id params[:job][:id]
122
+ image = job.image
123
+
124
+ img_params = params[:outputs].first
125
+ update_image_and_job_from_img_params(image,job,img_params)
126
+
127
+ image.cloudhdr_status = "ready" if image.respond_to?(:cloudhdr_status=)
128
+ image.cloudhdr_status = "ready" if image.respond_to?(:cloudhdr_status=)
129
+ image.save!
130
+ image.fire_ready_callback
131
+
132
+ job.cloudhdr_status = "ready"
133
+ job.save
134
+ job
135
+ end
136
+
137
+ def self.update_from_cloudhdr_generic_job_with_thumbnails(params)
138
+ #debugger
139
+ job = self.for_jobs.find_by_cloudhdr_job_id params[:job][:id]
140
+ image = job.image
141
+
142
+ img_params = {}
143
+
144
+
145
+ params[:outputs].each do |thumb_params|
146
+ if thumb_params[:label].blank?
147
+ img_params = thumb_params
148
+ next
149
+ end
150
+ thumbnail = image.thumbnail_for(thumb_params[:label])
151
+ update_image_and_job_from_img_params(thumbnail,job,thumb_params)
152
+ thumbnail.cloudhdr_status = "ready" if thumbnail.respond_to?(:cloudhdr_status=)
153
+ thumbnail.cloudhdr_status = "ready" if thumbnail.respond_to?(:cloudhdr_status=)
154
+ thumbnail.save!
155
+ end
156
+
157
+ update_image_and_job_from_img_params(image,job,img_params)
158
+ image.cloudhdr_status = "ready" if image.respond_to?(:cloudhdr_status=)
159
+ image.cloudhdr_status = "ready" if image.respond_to?(:cloudhdr_status=)
160
+ image.save!
161
+ image.fire_ready_callback
162
+
163
+ job.cloudhdr_status = "ready"
164
+ job.save
165
+ job
166
+ end
167
+
168
+
169
+
170
+
171
+ def self.update_image_and_job_from_img_params(image,job,img_params)
172
+ [ :file_size,:width,:height,:taken_at,:lat,:lng,:saturated_pixels,:gauss,:bits_per_pixel,:camera_make,
173
+ :camera_model, :orientation, :exposure_time, :f_number, :iso_speed_rating, :exposure_bias_value,
174
+ :focal_length, :focal_length_in_35mm_film, :subsec_time, :pixels, :processing_time].each do |att|
175
+ setter = att.to_s + "="
176
+ if image.respond_to? setter and !img_params[att].blank?
177
+ image.send setter, img_params[att]
178
+ end
179
+ if job.respond_to? setter and !img_params[att].blank?
180
+ job.send setter, img_params[att]
181
+ end
182
+ end
183
+ end
184
+
185
+
186
+
187
+
188
+
189
+ end
@@ -0,0 +1,3 @@
1
+ <%=
2
+ cloudhdr_thumbnail(@img,params[:thumbnail],{})
3
+ %>
@@ -0,0 +1,7 @@
1
+ {
2
+ <% @outputs.each_with_index do |output,i| %>
3
+ <% @img = output[:image] %>
4
+ <% @random = output[:random] %>
5
+ "<%= output[:elem_id] %>" : "<%= escape_javascript(render(:partial=>"thumbnail_update.html.erb", :locals => {:params => output} )) %>" <%= "," if (i+1) != @outputs.size %>
6
+ <% end %>
7
+ }
@@ -0,0 +1 @@
1
+ $('#<%= @img.class.to_s %>_<%= @img.id.to_s %>_<%= @random %>').replaceWith("<%= escape_javascript(render(:partial=>"thumbnail_update")) %>")