cloudhdr_rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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")) %>")