3 require 'active_support/all'
\r
4 require 'rest_client'
\r
10 puts "uploader.rb src_host src_email src_token dest_host dest_email dest_token"
\r
11 puts "upload on child dirs"
\r
19 dest_email = ARGV[4]
\r
20 dest_token = ARGV[5]
\r
23 def initialize src_host, src_email, src_token, dest_host, dest_email, dest_token
\r
24 @src_host = src_host
\r
25 @src_email = src_email
\r
26 @src_token = src_token
\r
27 @dest_host = dest_host
\r
28 @dest_email = dest_email
\r
29 @dest_token = dest_token
\r
31 self.licenses(@src_host).each do |l|
\r
32 @src_licenses[l['id'].to_i] = l
\r
35 self.licenses(@dest_host).each do |l|
\r
36 @dest_licenses[l['name']] = l
\r
38 @src_speech_balloon_templates = {}
\r
39 self.speech_balloon_templates(@src_host, @src_email, @src_token).each do |sb|
\r
40 @src_speech_balloon_templates[sb['id'].to_i] = sb
\r
42 @dest_speech_balloon_templates = {}
\r
43 self.speech_balloon_templates(@dest_host, @src_email, @src_token).each do |sb|
\r
44 @dest_speech_balloon_templates[sb['name']] = sb
\r
46 @src_writing_formats = {}
\r
47 self.writing_formats(@dest_host, @src_email, @src_token).each do |wf|
\r
48 # self.writing_formats(@src_host, @src_auth).each do |wf|
\r
49 @src_writing_formats[wf['id'].to_i] = wf
\r
51 @dest_writing_formats = {}
\r
52 self.writing_formats(@dest_host, @dest_email, @dest_token).each do |wf|
\r
53 @dest_writing_formats[wf['name']] = wf
\r
55 @src_system_pictures = {}
\r
56 self.system_pictures(@src_host, @dest_email, @dest_token).each do |sp|
\r
57 @src_system_pictures[sp['id'].to_i] = sp
\r
59 @dest_system_pictures = {}
\r
60 self.system_pictures(@dest_host, @dest_email, @dest_token).each do |sp|
\r
61 @dest_system_pictures[sp['md5']] = sp
\r
67 u = host + 'licenses.json'
\r
68 r = RestClient.get(u, :params => {:page_size => 100})
\r
72 def license_groups host
\r
74 u = host + 'license_groups.json'
\r
75 r = RestClient.get(u, :params => {:page_size => 100})
\r
78 res[l['id'].to_i] = l
\r
83 def speech_balloon_templates host, email, token
\r
85 u = host + 'speech_balloon_templates.json'
\r
86 r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token})
\r
90 def writing_formats host, email, token
\r
92 u = host + 'writing_formats.json'
\r
93 r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token})
\r
97 def system_pictures host, email, token
\r
99 u = host + 'system_pictures.json'
\r
100 r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token})
\r
104 def panels host, email, token
\r
106 u = host + 'home/panels.json'
\r
107 r = RestClient.get(u, {:params => {:page_size => 100}}, {:email => email, :token => token})
\r
108 resp = JSON.parse r
\r
109 status = resp['page_status']
\r
110 resp['list'].each do |panel|
\r
111 res[panel['id'].to_i] = panel
\r
116 def picture id, host, email, token
\r
118 u = host + 'pictures/'
\r
119 r = RestClient.get(u, {:params => {:id => id}}, {:email => email, :token => token})
\r
123 def search_resource_picture md5, host, email, token
\r
125 u = host + 'resource_pictures/search.json'
\r
126 r = RestClient.get(u, {:params => {:md5 => md5}}, {:email => email, :token => token})
\r
130 def prepare_panel_picture panel_picture
\r
131 element_name = 'panel_pictures'
\r
132 puts 'panel_picture:' + panel_picture['id'].to_s
\r
133 # get picture from src
\r
134 picture = self.picture panel_picture['picture_id'], @src_host, @src_email, @src_token
\r
135 puts 'picture:' + picture['id'].to_s
\r
136 # get resource_picture if exists?
\r
137 # choose latest resource_picture if find same rp at server
\r
138 rps = self.search_resource_picture picture['md5'], @dest_host, @dest_email, @dest_token
\r
141 puts 'resource picture ok:' + rp['id'].to_s + '(' + rp['md5'].to_s + ')'
\r
147 # get lisence's id if exists?
\r
148 src_ls_name = @src_licenses[picture['license_id']]['name'].gsub /License\:/, 'Licenses:'
\r
149 puts 'license:' + picture['license_id'].to_s + '(' + src_ls_name + ')'
\r
150 if dl = @dest_licenses[src_ls_name]
\r
151 puts 'license ok(' + dl['id'].to_s + ')'
\r
157 panel_picture['picture_id'] = rp['picture_id']
\r
160 def prepare_speech_balloon speech_balloon
\r
161 element_name = 'speech_balloons'
\r
162 puts 'sb:' + e['id'].to_s
\r
163 src_sb_name = @src_speech_balloon_templates[e['speech_balloon_template_id']]['name']
\r
164 puts 'speech_balloon_template:' + e['speech_balloon_template_id'].to_s + '(' + src_sb_name + ')'
\r
165 if dsb = @dest_speech_balloon_templates[src_sb_name]
\r
166 puts 'speech_balloon_template ok(' + dsb['id'].to_s + ')'
\r
168 puts 'no speech_balloon_template'
\r
172 src_sp_md5 = @src_system_pictures[e['balloon']['system_picture_id']]['md5']
\r
173 puts 'balloon picture:' + e['balloon']['system_picture_id'].to_s + '(' + src_sp_md5 + ')'
\r
174 if dsp = @dest_system_pictures[src_sp_md5]
\r
175 puts 'balloon picture ok(' + dsp['id'].to_s + ')'
\r
177 puts 'no balloon picture'
\r
181 src_wf_name = @src_writing_formats[e['speech']['writing_format_id']]['name']
\r
182 puts 'speech writing_format:' + e['speech']['writing_format_id'].to_s + '(' + src_wf_name + ')'
\r
183 if dwf = @dest_writing_formats[src_wf_name]
\r
184 puts 'speech writing_format ok(' + dwf['id'].to_s + ')'
\r
186 puts 'no speech writing_format'
\r
190 e['speech_balloon_template_id'] = dsb['id']
\r
191 e["speech_balloon_template_settings"] = e["settings"]
\r
192 e.delete 'settings'
\r
193 e["speech_balloon_template_classname"] = dsb["classname"]
\r
194 e.delete 'classname'
\r
195 #e.delete 'speech_balloon_template'
\r
196 balloon = e['balloon']
\r
198 balloon.delete 'id'
\r
199 balloon.delete 'speech_balloon_id'
\r
200 balloon["speech_balloon_template_settings"] = e["settings"]
\r
201 balloon.delete 'settings'
\r
202 balloon['system_picture_id'] = dsp['id']
\r
203 balloon['speech_balloon_template_id'] = dsb['id']
\r
204 balloon["speech_balloon_template_classname"] = dsb["classname"]
\r
206 speech = e['speech']
\r
209 speech.delete 'speech_balloon_id'
\r
210 speech["speech_balloon_template_settings"] = e["settings"]
\r
211 speech.delete 'settings'
\r
212 speech['speech_balloon_template_id'] = dsb['id']
\r
213 speech["speech_balloon_template_classname"] = dsb["classname"]
\r
214 speech['writing_format_id'] = dwf['id']
\r
215 # speech["writing_format_classname"] = 'Pettanr' + dwf["classname"]
\r
216 speech["writing_format_classname"] = dwf["classname"]
\r
218 e['balloon_attributes'] = balloon
\r
219 e['speech_attributes'] = speech
\r
222 def prepare_ground_color ground_color
\r
223 element_name = 'ground_colors'
\r
224 puts 'ground_color:' + ground_color['id'].to_s
\r
227 def prepare_ground_picture ground_picture
\r
228 element_name = 'ground_pictures'
\r
229 puts 'ground_picture:' + ground_picture['id'].to_s
\r
230 rps = self.resource_picture ground_picture['picture']['md5'], @dest_host, @dest_auth
\r
233 puts 'picture ok(' + rp['id'].to_s + ')'
\r
239 #e['license_id'] = dl['id']
\r
240 ground_picture['picture_id'] = rp['id']
\r
241 #e.delete 'license'
\r
244 def add_attribute panel_json, attribute
\r
247 e.delete 'panel_id'
\r
248 panel_json[element_name + '_attributes'] ||= {}
\r
249 panel_json[element_name + '_attributes']['new' + eid.to_s] = e
\r
253 self.panels(@src_host, @src_email, @src_token).each do |key, panel_json|
\r
254 puts 'source panel:' + key.to_s
\r
256 panel_json['panel_pictures'].each do |panel_picture|
\r
257 self.prepare_panel_picture panel_picture
\r
258 self.add_attribute panel_json, panel_picture
\r
260 panel_json['speech_balloons'].each do |speech_balloon|
\r
261 self.prepare_speech_balloon speech_balloon
\r
263 panel_json['ground_colors'].each do |ground_color|
\r
264 self.prepare_ground_color ground_color
\r
266 panel_json['ground_pictures'].each do |ground_picture|
\r
267 self.prepare_ground_picture ground_picture
\r
270 puts '============ importable'
\r
271 panel_json.delete 'id'
\r
272 panel_json.delete 'author'
\r
273 panel_json.delete 'author_id'
\r
274 panel_json.delete "created_at"
\r
275 panel_json.delete 'updated_at'
\r
282 u = Importer.new src_host, src_email, src_token, dest_host, dest_email, dest_token
\r
284 u.each_panel do |panel_json|
\r
285 u = dest_host + 'panels'
\r
287 File.open('/Sites/panel_create.json', 'w') do |f|
\r
288 f.write JSON.pretty_generate(panel_json)
\r
291 r = RestClient.post(u,
\r
292 {:json => panel_json}.to_json,
\r
293 :content_type => :json, :accept => :json, :email => dest_email, :token => dest_token
\r
297 puts ' failed: ' + r.to_s
\r