summaryrefslogtreecommitdiffabout
authorMichael Krelin <hacker@klever.net>2011-08-28 16:23:16 (UTC)
committer Michael Krelin <hacker@klever.net>2011-08-28 16:23:16 (UTC)
commit63b7d8b9cd7b4c4fd010a46bb2737a47d5afa65e (patch) (unidiff)
tree3533952c3632c34b25c399c2d9b6cf586d1cd4b0
parente58247a43552504e34ae31a5262a8a9dd338243c (diff)
downloadfireflix-63b7d8b9cd7b4c4fd010a46bb2737a47d5afa65e.zip
fireflix-63b7d8b9cd7b4c4fd010a46bb2737a47d5afa65e.tar.gz
fireflix-63b7d8b9cd7b4c4fd010a46bb2737a47d5afa65e.tar.bz2
more jsonification (is this code ever used?)
Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--content/fireflix.js18
1 files changed, 6 insertions, 12 deletions
diff --git a/content/fireflix.js b/content/fireflix.js
index d70ab4d..34cfd3e 100644
--- a/content/fireflix.js
+++ b/content/fireflix.js
@@ -44,400 +44,394 @@ var fireflix = {
44 this.auth_info.disabled = !au; 44 this.auth_info.disabled = !au;
45 if(au) { 45 if(au) {
46 this.auth_info.value = this.flickr.user.fullname+' ['+this.flickr.user.username+']'; /* TODO: move to locale */ 46 this.auth_info.value = this.flickr.user.fullname+' ['+this.flickr.user.username+']'; /* TODO: move to locale */
47 }else{ 47 }else{
48 this.auth_info.value = this.no_auth_info_label; 48 this.auth_info.value = this.no_auth_info_label;
49 } 49 }
50 }, 50 },
51 on_cmd_auth: function() { 51 on_cmd_auth: function() {
52 var _this = this; 52 var _this = this;
53 this.flickr.authorize_0( 53 this.flickr.authorize_0(
54 'delete', 54 'delete',
55 function(x,f,u) { 55 function(x,f,u) {
56 _this.openTab(u); 56 _this.openTab(u);
57 _this.set_auth_state(_this.flickr.token,true); 57 _this.set_auth_state(_this.flickr.token,true);
58 }, function(x,s,c,m) { 58 }, function(x,s,c,m) {
59 _this.flickr_failure(x,s,c,m); 59 _this.flickr_failure(x,s,c,m);
60 } 60 }
61 ); 61 );
62 }, 62 },
63 on_cmd_auth_done: function() { 63 on_cmd_auth_done: function() {
64 this.set_auth_state(this.flickr.token,false); 64 this.set_auth_state(this.flickr.token,false);
65 var _this = this; 65 var _this = this;
66 this.flickr.authorize_1( 66 this.flickr.authorize_1(
67 function() { 67 function() {
68 _this.flickr.save_token(); 68 _this.flickr.save_token();
69 _this.refresh_stuff(); 69 _this.refresh_stuff();
70 _this.set_auth_state(_this.flickr.token,false); 70 _this.set_auth_state(_this.flickr.token,false);
71 _this.auth_info.value = 71 _this.auth_info.value =
72 _this.flickr.user.fullname+' ['+_this.flickr.user.username+']'; 72 _this.flickr.user.fullname+' ['+_this.flickr.user.username+']';
73 }, function(x,s,c,m) { 73 }, function(x,s,c,m) {
74 _this.set_auth_state(_this.flickr.token,false); /* XXX: no reset token? */ 74 _this.set_auth_state(_this.flickr.token,false); /* XXX: no reset token? */
75 _this.flickr_failure(x,s,c,m); 75 _this.flickr_failure(x,s,c,m);
76 } 76 }
77 ); 77 );
78 }, 78 },
79 on_cmd_auth_unauth: function() { 79 on_cmd_auth_unauth: function() {
80 this.flickr.reset_token(); 80 this.flickr.reset_token();
81 this.set_auth_state(false,false); 81 this.set_auth_state(false,false);
82 }, 82 },
83 83
84 refresh_sets: function() { this.photosets.refresh_sets(); }, 84 refresh_sets: function() { this.photosets.refresh_sets(); },
85 refresh_stuff: function() { 85 refresh_stuff: function() {
86 this.refresh_sets(); 86 this.refresh_sets();
87 this.refresh_user_tags(); 87 this.refresh_user_tags();
88 }, 88 },
89 89
90 /* photoset treeview */ 90 /* photoset treeview */
91 photoset: { 91 photoset: {
92 photos: new Array(), 92 photos: new Array(),
93 fireflix: null, 93 fireflix: null,
94 init: function(f) { 94 init: function(f) {
95 this.fireflix = f; 95 this.fireflix = f;
96 pull_elements(this,document,[ 'set_photo', 'set_photo_props' ]); 96 pull_elements(this,document,[ 'set_photo', 'set_photo_props' ]);
97 document.getElementById('setphotos').view = this; 97 document.getElementById('setphotos').view = this;
98 }, 98 },
99 rowCount: 0, 99 rowCount: 0,
100 getCellText: function(r,c) { 100 getCellText: function(r,c) {
101 var p = this.photos[r]; 101 var p = this.photos[r];
102 if(c.id=='sp_title') return p.title; 102 if(c.id=='sp_title') return p.title;
103 if(c.id=='sp_taken') return p.datetaken; 103 if(c.id=='sp_taken') return p.datetaken;
104 if(c.id=='sp_upload') { 104 if(c.id=='sp_upload') {
105 var du = new Date(p.dateupload*1000); 105 var du = new Date(p.dateupload*1000);
106 var rv = du.getFullYear()+'-'+(du.getMonth()+1)+'-'+du.getDate() 106 var rv = du.getFullYear()+'-'+(du.getMonth()+1)+'-'+du.getDate()
107 +' '+ 107 +' '+
108 du.getHours()+':'+du.getMinutes()+':'+du.getSeconds(); 108 du.getHours()+':'+du.getMinutes()+':'+du.getSeconds();
109 return rv.replace(/(\D)(\d)(\D)/,'$10$2$3'); 109 return rv.replace(/(\D)(\d)(\D)/,'$10$2$3');
110 } 110 }
111 return c.id; 111 return c.id;
112 }, 112 },
113 setTree: function(t) { this.tree = t }, 113 setTree: function(t) { this.tree = t },
114 isContainer: function(r) { return false; }, 114 isContainer: function(r) { return false; },
115 isSeparator: function(r) { return false; }, 115 isSeparator: function(r) { return false; },
116 isSorted: function(r) { return false; }, 116 isSorted: function(r) { return false; },
117 getLevel: function(r) { return 0; }, 117 getLevel: function(r) { return 0; },
118 getImageSrc: function(r,c) { return null }, 118 getImageSrc: function(r,c) { return null },
119 getRowProperties: function(r,p) {}, 119 getRowProperties: function(r,p) {},
120 getCellProperties: function(cid,cel,p) {}, 120 getCellProperties: function(cid,cel,p) {},
121 getColumnProperties: function(cid,cel,p) { }, 121 getColumnProperties: function(cid,cel,p) { },
122 cycleHeader: function(cid,e) { }, 122 cycleHeader: function(cid,e) { },
123 getParentIndex: function(r) { return -1; }, 123 getParentIndex: function(r) { return -1; },
124 drop: function(r,o) { }, 124 drop: function(r,o) { },
125 canDropBeforeAfter: function(r,b) { return false }, 125 canDropBeforeAfter: function(r,b) { return false },
126 126
127 import_json: function(jp) { 127 import_json: function(jp) {
128 this.tree.beginUpdateBatch(); 128 this.tree.beginUpdateBatch();
129 this.photos = new Array(); 129 this.photos = new Array();
130 for(var i in jp) this.photos.push(new Photo(jp[i])); 130 for(var i in jp) this.photos.push(new Photo(jp[i]));
131 this.rowCount =this.photos.length; 131 this.rowCount =this.photos.length;
132 this.tree.endUpdateBatch(); 132 this.tree.endUpdateBatch();
133 this.selection.clearSelection(); 133 this.selection.clearSelection();
134 }, 134 },
135 load_photos: function(psid) { 135 load_photos: function(psid) {
136 var that = this; 136 var that = this;
137 this.fireflix.flickr.api_call_json( 137 this.fireflix.flickr.api_call_json(
138 { 138 {
139 method: 'flickr.photosets.getPhotos', 139 method: 'flickr.photosets.getPhotos',
140 auth_token: 'default', 140 auth_token: 'default',
141 photoset_id: psid, 141 photoset_id: psid,
142 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update' 142 extras: 'license,date_upload,date_taken,owner_name,icon_server,original_format,last_update'
143 }, function(x,j) { 143 }, function(x,j) {
144 that.import_json(j.photoset.photo); 144 that.import_json(j.photoset.photo);
145 }, function(x,s,c,m) { 145 }, function(x,s,c,m) {
146 that.fireflix.flickr_failure(x,s,c,m); 146 that.fireflix.flickr_failure(x,s,c,m);
147 } 147 }
148 ); 148 );
149 }, 149 },
150 on_select: function() { 150 on_select: function() {
151 if(this.selection.count==1) { 151 if(this.selection.count==1) {
152 var p = this.photos[this.selection.currentIndex]; 152 var p = this.photos[this.selection.currentIndex];
153 this.set_photo.src = 153 this.set_photo.src =
154 this.fireflix.flickr.get_photo_url(p.server,p.id,p.secret,'t'); 154 this.fireflix.flickr.get_photo_url(p.server,p.id,p.secret,'t');
155 this.set_photo_props.hidden = false; 155 this.set_photo_props.hidden = false;
156 }else{ 156 }else{
157 this.set_photo_props.hidden = true; 157 this.set_photo_props.hidden = true;
158 } 158 }
159 }, 159 },
160 on_cmd_open: function(ev) { 160 on_cmd_open: function(ev) {
161 if(this.selection.currentIndex<0) return; 161 if(this.selection.currentIndex<0) return;
162 var p = this.photos[this.selection.currentIndex]; 162 var p = this.photos[this.selection.currentIndex];
163 if(!p.id) return; 163 if(!p.id) return;
164 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p')); 164 this.fireflix.openTab(this.fireflix.flickr.make_photo_url(p,'p'));
165 } 165 }
166 }, 166 },
167 167
168 /* photosets treeview */ 168 /* photosets treeview */
169 photosets: { 169 photosets: {
170 sets: new Array(), 170 sets: new Array(),
171 fireflix: null, 171 fireflix: null,
172 init: function(f) { 172 init: function(f) {
173 this.fireflix = f; 173 this.fireflix = f;
174 document.getElementById('setslist').view = this; 174 document.getElementById('setslist').view = this;
175 }, 175 },
176 rowCount: 0, 176 rowCount: 0,
177 getCellText: function(r,c) { 177 getCellText: function(r,c) {
178 var s = this.sets[r]; 178 var s = this.sets[r];
179 if(c.id=='sl_name') return s.title; 179 if(c.id=='sl_name') return s.title;
180 if(c.id=='sl_photos') return s.photos; 180 if(c.id=='sl_photos') return s.photos;
181 return c.id; 181 return c.id;
182 }, 182 },
183 setTree: function(t) { this.tree = t }, 183 setTree: function(t) { this.tree = t },
184 isContainer: function(r) { return false; }, 184 isContainer: function(r) { return false; },
185 isSeparator: function(r) { return false; }, 185 isSeparator: function(r) { return false; },
186 isSorted: function() { return false; }, 186 isSorted: function() { return false; },
187 getLevel: function(r) { return 0; }, 187 getLevel: function(r) { return 0; },
188 getImageSrc: function(r,c) { return null }, 188 getImageSrc: function(r,c) { return null },
189 getRowProperties: function(r,p) {}, 189 getRowProperties: function(r,p) {},
190 getCellProperties: function(cid,cel,p) { }, 190 getCellProperties: function(cid,cel,p) { },
191 getColumnProperties: function(cid,cel,p) { }, 191 getColumnProperties: function(cid,cel,p) { },
192 cycleHeader: function(cid,e) { }, 192 cycleHeader: function(cid,e) { },
193 getParentIndex: function(r) { return -1; }, 193 getParentIndex: function(r) { return -1; },
194 drop: function(r,o) { }, 194 drop: function(r,o) { },
195 canDropBeforeAfter: function(r,b) { return false }, 195 canDropBeforeAfter: function(r,b) { return false },
196 196
197 import_json: function(j) { 197 import_json: function(j) {
198 this.tree.beginUpdateBatch(); 198 this.tree.beginUpdateBatch();
199 this.sets = new Array(); 199 this.sets = new Array();
200 for(var i in j) this.sets.push(new Photoset(j[i])); 200 for(var i in j) this.sets.push(new Photoset(j[i]));
201 this.rowCount = this.sets.length; 201 this.rowCount = this.sets.length;
202 this.tree.endUpdateBatch(); 202 this.tree.endUpdateBatch();
203 }, 203 },
204 refresh_sets: function() { 204 refresh_sets: function() {
205 var that = this; 205 var that = this;
206 this.fireflix.flickr.api_call_json( 206 this.fireflix.flickr.api_call_json(
207 { 207 {
208 method: 'flickr.photosets.getList', 208 method: 'flickr.photosets.getList',
209 auth_token: 'default' 209 auth_token: 'default'
210 }, function(x,j) { 210 }, function(x,j) {
211 that.import_json(j.photosets.photoset); 211 that.import_json(j.photosets.photoset);
212 }, function(x,s,c,m) { 212 }, function(x,s,c,m) {
213 that.fireflix.flickr_failure(x,s,c,m); 213 that.fireflix.flickr_failure(x,s,c,m);
214 } 214 }
215 ); 215 );
216 }, 216 },
217 on_select: function() { 217 on_select: function() {
218 if(this.selection.count==1) { 218 if(this.selection.count==1) {
219 this.fireflix.cmd_set_props.setAttribute('disabled','false'); 219 this.fireflix.cmd_set_props.setAttribute('disabled','false');
220 var s = this.sets[this.selection.currentIndex]; 220 var s = this.sets[this.selection.currentIndex];
221 this.fireflix.photoset.load_photos(s.id); 221 this.fireflix.photoset.load_photos(s.id);
222 }else{ 222 }else{
223 this.fireflix.cmd_set_props.setAttribute('disabled','true'); 223 this.fireflix.cmd_set_props.setAttribute('disabled','true');
224 } 224 }
225 }, 225 },
226 on_cmd_open_in_flickr: function(ev) { 226 on_cmd_open_in_flickr: function(ev) {
227 if(this.selection.currentIndex<0) return; 227 if(this.selection.currentIndex<0) return;
228 var p = this.sets[this.selection.currentIndex]; 228 var p = this.sets[this.selection.currentIndex];
229 if(!p.id) return; 229 if(!p.id) return;
230 this.fireflix.openTab(this.fireflix.flickr.make_photoset_url(p)); 230 this.fireflix.openTab(this.fireflix.flickr.make_photoset_url(p));
231 } 231 }
232 }, 232 },
233 233
234 refresh_user_tags: function() { 234 refresh_user_tags: function() {
235 var lb = document.getElementById('tagslist'); 235 var lb = document.getElementById('tagslist');
236 var _this = this; 236 var that = this;
237 this.flickr.api_call( 237 this.flickr.api_call_json(
238 { 238 {
239 method: 'flickr.tags.getListUser', 239 method: 'flickr.tags.getListUser',
240 auth_token: 'default', 240 auth_token: 'default',
241 }, function(xr) { 241 }, function(x,j) {
242 var x = xr.responseXML; 242 var tt = j.who.tags.tag;
243 var xp = x.evaluate( 243 for(var i in tt) lb.appendItem(tt[i]._content);
244 '/rsp/who/tags/tag', x, null,
245 XPathResult.ORDERED_NODE_ITERATOR_TYPE, null );
246 // TODO: clear list
247 var n; while(n=xp.iterateNext()) {
248 lb.appendItem(n.firstChild.nodeValue);
249 }
250 }, function(x,s,c,m) { 244 }, function(x,s,c,m) {
251 _this.flickr_failure(x,s,c,m); 245 that.flickr_failure(x,s,c,m);
252 } 246 }
253 ); 247 );
254 }, 248 },
255 249
256 uploadObserver: { 250 uploadObserver: {
257 fireflix: null, 251 fireflix: null,
258 init: function(f) { 252 init: function(f) {
259 this.fireflix = f; 253 this.fireflix = f;
260 }, 254 },
261 getSupportedFlavours: function() { 255 getSupportedFlavours: function() {
262 var rv = new FlavourSet(); 256 var rv = new FlavourSet();
263 rv.appendFlavour('application/x-moz-file','nsIFile'); 257 rv.appendFlavour('application/x-moz-file','nsIFile');
264 rv.appendFlavour('application/x-moz-url'); 258 rv.appendFlavour('application/x-moz-url');
265 rv.appendFlavour('text/uri-list'); 259 rv.appendFlavour('text/uri-list');
266 rv.appendFlavour('text/unicode'); 260 rv.appendFlavour('text/unicode');
267 return rv; 261 return rv;
268 }, 262 },
269 canHandleMultipleItems: true, 263 canHandleMultipleItems: true,
270 onDragOver: function(ev,fl,sess) { 264 onDragOver: function(ev,fl,sess) {
271 return true; 265 return true;
272 }, 266 },
273 onDrop: function(ev,dd,s) { 267 onDrop: function(ev,dd,s) {
274 var ldf = null; 268 var ldf = null;
275 for(var i in dd.dataList) { 269 for(var i in dd.dataList) {
276 var di = dd.dataList[i]; 270 var di = dd.dataList[i];
277 var dif = di.first; 271 var dif = di.first;
278 if( 272 if(
279 ldf==null 273 ldf==null
280 || ldf.flavour.contentType!=dif.flavour.contentType 274 || ldf.flavour.contentType!=dif.flavour.contentType
281 || ldf.contentLength!=dif.contentLength 275 || ldf.contentLength!=dif.contentLength
282 || ldf.data!=dif.data ) 276 || ldf.data!=dif.data )
283 this.drop_item(ev,di,s); 277 this.drop_item(ev,di,s);
284 ldf = dif; 278 ldf = dif;
285 } 279 }
286 }, 280 },
287 drop_item: function(ev,di,s) { 281 drop_item: function(ev,di,s) {
288 var d = di.first; 282 var d = di.first;
289 switch(d.flavour.contentType) { 283 switch(d.flavour.contentType) {
290 case 'text/unicode': 284 case 'text/unicode':
291 this.drop_urilist(ev,d.data,s); 285 this.drop_urilist(ev,d.data,s);
292 break; 286 break;
293 case 'application/x-moz-file': 287 case 'application/x-moz-file':
294 this.fireflix.uploads.add(d.data.path); 288 this.fireflix.uploads.add(d.data.path);
295 document.getElementById('fireflix_tabs').selectedTab 289 document.getElementById('fireflix_tabs').selectedTab
296 = document.getElementById('tab_upload'); 290 = document.getElementById('tab_upload');
297 break; 291 break;
298 case 'text/uri-list': 292 case 'text/uri-list':
299 // is it ascii or could it be utf8? 293 // is it ascii or could it be utf8?
300 this.drop_urilist(ev,splitascii(d.data),s); 294 this.drop_urilist(ev,splitascii(d.data),s);
301 break; 295 break;
302 default: alert(d.flavour.contentType+':'+d.data); break; 296 default: alert(d.flavour.contentType+':'+d.data); break;
303 }; 297 };
304 }, 298 },
305 drop_urilist: function(ev,ul,s) { 299 drop_urilist: function(ev,ul,s) {
306 // TODO: check for being a file? 300 // TODO: check for being a file?
307 var us = decodeURIComponent(ul).split(/[\r\n]/); 301 var us = decodeURIComponent(ul).split(/[\r\n]/);
308 for(var ui in us) 302 for(var ui in us)
309 if(/\S/.test(us[ui])) 303 if(/\S/.test(us[ui]))
310 this.fireflix.uploads.add(us[ui]); 304 this.fireflix.uploads.add(us[ui]);
311 document.getElementById('fireflix_tabs').selectedTab 305 document.getElementById('fireflix_tabs').selectedTab
312 = document.getElementById('tab_upload'); 306 = document.getElementById('tab_upload');
313 } 307 }
314 }, 308 },
315 309
316 uploads: { 310 uploads: {
317 fireflix: null, 311 fireflix: null,
318 init: function(f) { 312 init: function(f) {
319 this.fireflix=f; 313 this.fireflix=f;
320 pull_elements(this,document,[ 314 pull_elements(this,document,[
321 'upload_filename','upload_title','upload_file_preview', 315 'upload_filename','upload_title','upload_file_preview',
322 'upload_file_props','upload_progress','upload_tags', 316 'upload_file_props','upload_progress','upload_tags',
323 'cmd_uploads_upload', 'upload_failure', 'upload_is_public', 317 'cmd_uploads_upload', 'upload_failure', 'upload_is_public',
324 'upload_is_friends', 'upload_is_family' 318 'upload_is_friends', 'upload_is_family'
325 ]); 319 ]);
326 document.getElementById('uploadlist').view = this; 320 document.getElementById('uploadlist').view = this;
327 this.upload_is_public.addEventListener( 321 this.upload_is_public.addEventListener(
328 'CheckboxStateChange', { that: this, 322 'CheckboxStateChange', { that: this,
329 handleEvent: function(ev) { this.that.propsToSel('is_public'); } 323 handleEvent: function(ev) { this.that.propsToSel('is_public'); }
330 }, false ); 324 }, false );
331 this.upload_is_friends.addEventListener( 325 this.upload_is_friends.addEventListener(
332 'CheckboxStateChange', { that: this, 326 'CheckboxStateChange', { that: this,
333 handleEvent: function(ev) { this.that.propsToSel('is_friends'); } 327 handleEvent: function(ev) { this.that.propsToSel('is_friends'); }
334 }, false ); 328 }, false );
335 this.upload_is_family.addEventListener( 329 this.upload_is_family.addEventListener(
336 'CheckboxStateChange', { that: this, 330 'CheckboxStateChange', { that: this,
337 handleEvent: function(ev) { this.that.propsToSel('is_family'); } 331 handleEvent: function(ev) { this.that.propsToSel('is_family'); }
338 }, false ); 332 }, false );
339 }, 333 },
340 files: new Array(), 334 files: new Array(),
341 rowCount: 0, 335 rowCount: 0,
342 getCellText: function(r,c) { 336 getCellText: function(r,c) {
343 var f = this.files[r]; 337 var f = this.files[r];
344 if(c.id=='up_file') return f.file; 338 if(c.id=='up_file') return f.file;
345 if(c.id=='up_title') return f.title; 339 if(c.id=='up_title') return f.title;
346 if(c.id=='up_status') return f.state; 340 if(c.id=='up_status') return f.state;
347 return c.id; 341 return c.id;
348 }, 342 },
349 setTree: function(t) { this.tree = t }, 343 setTree: function(t) { this.tree = t },
350 isContainer: function(r) { return false; }, 344 isContainer: function(r) { return false; },
351 isSeparator: function(r) { return false; }, 345 isSeparator: function(r) { return false; },
352 isSorted: function(r) { return false; }, 346 isSorted: function(r) { return false; },
353 getLevel: function(r) { return 0; }, 347 getLevel: function(r) { return 0; },
354 getImageSrc: function(r,c) { return null }, 348 getImageSrc: function(r,c) { return null },
355 getRowProperties: function(r,p) { 349 getRowProperties: function(r,p) {
356 try { 350 try {
357 if(!Components) return; 351 if(!Components) return;
358 }catch(e) { return } 352 }catch(e) { return }
359 var f = this.files[r]; 353 var f = this.files[r];
360 var as = Components.classes['@mozilla.org/atom-service;1']. 354 var as = Components.classes['@mozilla.org/atom-service;1'].
361 getService(Components.interfaces.nsIAtomService); 355 getService(Components.interfaces.nsIAtomService);
362 p.AppendElement(as.getAtom(f.state)); 356 p.AppendElement(as.getAtom(f.state));
363 }, 357 },
364 getCellProperties: function(r,c,p) { this.getRowProperties(r,p); }, 358 getCellProperties: function(r,c,p) { this.getRowProperties(r,p); },
365 getColumnProperties: function(c,p) { }, 359 getColumnProperties: function(c,p) { },
366 cycleHeader: function(cid,e) { }, 360 cycleHeader: function(cid,e) { },
367 getParentIndex: function(r) { return -1; }, 361 getParentIndex: function(r) { return -1; },
368 drop: function(r,o) { }, 362 drop: function(r,o) { },
369 canDropBeforeAfter: function(r,b) { return false }, 363 canDropBeforeAfter: function(r,b) { return false },
370 364
371 add: function(f) { 365 add: function(f) {
372 if(f.indexOf('file:/')==0) { 366 if(f.indexOf('file:/')==0) {
373 f = f.substr(5); 367 f = f.substr(5);
374 while(f.substr(0,2)=='//') { // XXX: not very performant, is it? ;-) 368 while(f.substr(0,2)=='//') { // XXX: not very performant, is it? ;-)
375 f = f.substr(1); 369 f = f.substr(1);
376 } 370 }
377 } 371 }
378 var t = f; 372 var t = f;
379 var ls = t.lastIndexOf('/'); 373 var ls = t.lastIndexOf('/');
380 if(ls>0) t = t.substr(ls+1); 374 if(ls>0) t = t.substr(ls+1);
381 ls = t.lastIndexOf('\\'); 375 ls = t.lastIndexOf('\\');
382 if(ls>0) t = t.substr(ls+1); 376 if(ls>0) t = t.substr(ls+1);
383 var ld = t.lastIndexOf('.'); 377 var ld = t.lastIndexOf('.');
384 if(ld>0) t = t.substr(0,ld); 378 if(ld>0) t = t.substr(0,ld);
385 this.files.push( { 379 this.files.push( {
386 file: f, 380 file: f,
387 title: t, 381 title: t,
388 tags: '', 382 tags: '',
389 is_public: true, is_friend: false, is_family: false, 383 is_public: true, is_friend: false, is_family: false,
390 state: 'pending' 384 state: 'pending'
391 } ); 385 } );
392 this.rowCount = this.files.length; 386 this.rowCount = this.files.length;
393 this.tree.rowCountChanged(this.rowCount-1,1); 387 this.tree.rowCountChanged(this.rowCount-1,1);
394 }, 388 },
395 389
396 upload_worker: function() { 390 upload_worker: function() {
397 for(var f in this.files) { 391 for(var f in this.files) {
398 if(this.files[f].state=='pending') { 392 if(this.files[f].state=='pending') {
399 var ff = this.files[f]; 393 var ff = this.files[f];
400 this.on_file_upload(ff); 394 this.on_file_upload(ff);
401 ff.state='uploading'; 395 ff.state='uploading';
402 this.tree.invalidate(); 396 this.tree.invalidate();
403 var _this = this; 397 var _this = this;
404 this.fireflix.flickr.upload_file( 398 this.fireflix.flickr.upload_file(
405 ff.file, { 399 ff.file, {
406 title: ff.title, tags: ff.tags, 400 title: ff.title, tags: ff.tags,
407 is_public: ff.is_public?'1':'0', 401 is_public: ff.is_public?'1':'0',
408 is_friend: ff.is_friend?'1':'0', 402 is_friend: ff.is_friend?'1':'0',
409 is_family: ff.is_family?'1':'0' 403 is_family: ff.is_family?'1':'0'
410 }, function(x,p) { 404 }, function(x,p) {
411 ff.photoid = p; 405 ff.photoid = p;
412 _this.batch_ids.push(p); 406 _this.batch_ids.push(p);
413 ff.state='completed'; 407 ff.state='completed';
414 _this.tree.invalidate(); 408 _this.tree.invalidate();
415 window.setTimeout(_this.upload_to,0,_this); 409 window.setTimeout(_this.upload_to,0,_this);
416 }, function(x,s,c,m) { 410 }, function(x,s,c,m) {
417 ff.state='failed'; 411 ff.state='failed';
418 ff.flickr_errcode = c; 412 ff.flickr_errcode = c;
419 ff.flickr_errmsg = m; 413 ff.flickr_errmsg = m;
420 _this.tree.invalidate(); 414 _this.tree.invalidate();
421 window.setTimeout(_this.upload_to,0,_this); 415 window.setTimeout(_this.upload_to,0,_this);
422 } 416 }
423 ); 417 );
424 return; 418 return;
425 } 419 }
426 } 420 }
427 this.on_finish_upload(); 421 this.on_finish_upload();
428 }, 422 },
429 upload_to: function(_this) { _this.upload_worker(); }, 423 upload_to: function(_this) { _this.upload_worker(); },
430 on_file_upload: function(f) { 424 on_file_upload: function(f) {
431 this.cmd_uploads_upload.setAttribute('disabled','true'); 425 this.cmd_uploads_upload.setAttribute('disabled','true');
432 for(var fi in this.files) { 426 for(var fi in this.files) {
433 if(this.files[fi].file==f.file) { 427 if(this.files[fi].file==f.file) {
434 this.tree.ensureRowIsVisible(fi); 428 this.tree.ensureRowIsVisible(fi);
435 this.selection.rangedSelect(fi,fi,false); 429 this.selection.rangedSelect(fi,fi,false);
436 this.selection.currentIndex = fi; 430 this.selection.currentIndex = fi;
437 this.selToProps(); 431 this.selToProps();
438 break; 432 break;
439 } 433 }
440 } 434 }
441 }, 435 },
442 on_finish_upload: function() { 436 on_finish_upload: function() {
443 if(this.batch_ids.length) { 437 if(this.batch_ids.length) {