-rw-r--r-- | content/flickr.js | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/content/flickr.js b/content/flickr.js index add628a..b5bfa43 100644 --- a/content/flickr.js +++ b/content/flickr.js | |||
@@ -100,111 +100,105 @@ Flickr.prototype = { | |||
100 | 100 | ||
101 | api_sig: function(paramstr) { | 101 | api_sig: function(paramstr) { |
102 | return MD5(toutf8(this.api_shs+paramstr)); | 102 | return MD5(toutf8(this.api_shs+paramstr)); |
103 | }, | 103 | }, |
104 | api_call_url: function(params,url) { | 104 | api_call_url: function(params,url) { |
105 | params.api_key = this.api_key; | 105 | params.api_key = this.api_key; |
106 | var pp = new Array(); | 106 | var pp = new Array(); |
107 | for(var p in params) { | 107 | for(var p in params) { |
108 | pp.push(p); | 108 | pp.push(p); |
109 | } | 109 | } |
110 | var pstr = ''; | 110 | var pstr = ''; |
111 | var rv = (url?url:this.rest_url)+'?'; | 111 | var rv = (url?url:this.rest_url)+'?'; |
112 | for(var p in pp.sort()) { | 112 | for(var p in pp.sort()) { |
113 | var pn = pp[p]; | 113 | var pn = pp[p]; |
114 | pstr += pn+params[pn]; | 114 | pstr += pn+params[pn]; |
115 | rv += pn+'='+params[pn]+'&'; | 115 | rv += pn+'='+params[pn]+'&'; |
116 | } | 116 | } |
117 | rv += 'api_sig='+this.api_sig(pstr); | 117 | rv += 'api_sig='+this.api_sig(pstr); |
118 | return rv; | 118 | return rv; |
119 | }, | 119 | }, |
120 | api_call: function(params, on_success, on_failure) { | 120 | api_call: function(params, on_success, on_failure) { |
121 | if(params.auth_token == 'default') | 121 | if(params.auth_token == 'default') |
122 | params.auth_token = this.token; | 122 | params.auth_token = this.token; |
123 | var x = new XMLHttpRequest(); | 123 | var x = new XMLHttpRequest(); |
124 | x.open("GET",this.api_call_url(params)); | 124 | x.open("GET",this.api_call_url(params)); |
125 | x.onreadystatechange=function() { | 125 | x.onreadystatechange=function() { |
126 | if(x.readyState!=4) return false; | 126 | if(x.readyState!=4) return false; |
127 | if(x.status==200) { | 127 | if(x.status==200) { |
128 | var stat = x.responseXML.firstChild.getAttribute('stat'); | 128 | var stat = x.responseXML.firstChild.getAttribute('stat'); |
129 | if(stat=='ok') { | 129 | if(stat=='ok') { |
130 | if(on_success) on_success(x); | 130 | if(on_success) on_success(x); |
131 | }else{ | 131 | }else{ |
132 | var e = x.responseXML.getElementsByTagName('err').item(0); | 132 | var e = x.responseXML.getElementsByTagName('err').item(0); |
133 | var ecode = e.getAttribute('code'); | 133 | var ecode = e.getAttribute('code'); |
134 | var emsg = e.getAttribute('msg'); | 134 | var emsg = e.getAttribute('msg'); |
135 | dump(params.method+' failed: '+ecode+' '+emsg+'\n'); | 135 | dump(params.method+' failed: '+ecode+' '+emsg+'\n'); |
136 | if(on_failure) on_failure(x,stat,ecode,emsg); | 136 | if(on_failure) on_failure(x,stat,ecode,emsg); |
137 | } | 137 | } |
138 | }else{ | 138 | }else{ |
139 | if(on_failure) on_failure(x); | 139 | if(on_failure) on_failure(x); |
140 | } | 140 | } |
141 | return true; | 141 | return true; |
142 | } | 142 | } |
143 | x.send(null); | 143 | x.send(null); |
144 | return true; | 144 | return true; |
145 | }, | 145 | }, |
146 | 146 | ||
147 | frob: null, | 147 | frob: null, |
148 | authorize_0: function(on_s, on_f) { | 148 | authorize_0: function(perms, on_s, on_f) { |
149 | var _this = this; | 149 | var _this = this; |
150 | this.api_call( | 150 | this.api_call( |
151 | { method: 'flickr.auth.getFrob' }, | 151 | { method: 'flickr.auth.getFrob' }, |
152 | function(x) { | 152 | function(x) { |
153 | _this.frob = xp_str('/rsp/frob',x.responseXML); | 153 | _this.frob = xp_str('/rsp/frob',x.responseXML); |
154 | var u = _this.api_call_url( | 154 | var u = _this.api_call_url( |
155 | { frob: _this.frob, perms: 'delete' }, _this.auth_url ); | 155 | { frob: _this.frob, perms: perms?perms:'delete' }, _this.auth_url ); |
156 | var wm = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService( | 156 | if(on_s) on_s(x,_this.frob,u); |
157 | Components.interfaces.nsIWindowMediator ); | ||
158 | var bw = wm.getMostRecentWindow('navigator:browser'); | ||
159 | var b = bw.getBrowser(); | ||
160 | var t = b.addTab(u); | ||
161 | b.selectedTab = t; | ||
162 | if(on_s) on_s(); | ||
163 | }, function(x,s,c,m) { | 157 | }, function(x,s,c,m) { |
164 | if(on_f) on_f(x,s,c,m); | 158 | if(on_f) on_f(x,s,c,m); |
165 | } | 159 | } |
166 | ); | 160 | ); |
167 | }, | 161 | }, |
168 | token: null, | 162 | token: null, |
169 | perms: null, | 163 | perms: null, |
170 | user: null, | 164 | user: null, |
171 | authorize_1: function(on_s, on_f) { | 165 | authorize_1: function(on_s, on_f) { |
172 | var _this = this; | 166 | var _this = this; |
173 | this.api_call( | 167 | this.api_call( |
174 | { method: 'flickr.auth.getToken', frob: this.frob }, | 168 | { method: 'flickr.auth.getToken', frob: this.frob }, |
175 | function(x) { | 169 | function(x) { |
176 | _this.token = xp_str('/rsp/auth/token',x.responseXML); | 170 | _this.token = xp_str('/rsp/auth/token',x.responseXML); |
177 | _this.perms = xp_str('/rsp/auth/perms',x.responseXML); | 171 | _this.perms = xp_str('/rsp/auth/perms',x.responseXML); |
178 | var u = xp_node('/rsp/auth/user',x.responseXML); | 172 | var u = xp_node('/rsp/auth/user',x.responseXML); |
179 | _this.user = { | 173 | _this.user = { |
180 | nsid: u.getAttribute('nsid'), | 174 | nsid: u.getAttribute('nsid'), |
181 | username: u.getAttribute('username'), | 175 | username: u.getAttribute('username'), |
182 | fullname: u.getAttribute('fullname') | 176 | fullname: u.getAttribute('fullname') |
183 | }; | 177 | }; |
184 | if(on_s) on_s(x); | 178 | if(on_s) on_s(x); |
185 | }, function(x,s,c,m) { | 179 | }, function(x,s,c,m) { |
186 | if(on_f) on_f(x,s,c,m); | 180 | if(on_f) on_f(x,s,c,m); |
187 | } | 181 | } |
188 | ); | 182 | ); |
189 | }, | 183 | }, |
190 | 184 | ||
191 | prefs: Components.classes['@mozilla.org/preferences-service;1'].getService( | 185 | prefs: Components.classes['@mozilla.org/preferences-service;1'].getService( |
192 | Components.interfaces.nsIPrefBranch | 186 | Components.interfaces.nsIPrefBranch |
193 | ), | 187 | ), |
194 | prefs_root: 'net.klever.kin.flickr', | 188 | prefs_root: 'net.klever.kin.flickr', |
195 | save_token: function() { | 189 | save_token: function() { |
196 | // TODO: don't clear when there's nothing to clear or catch exceptions | 190 | // TODO: don't clear when there's nothing to clear or catch exceptions |
197 | if(this.token) | 191 | if(this.token) |
198 | this.prefs.setCharPref(this.prefs_root+'.auth_token',this.token); | 192 | this.prefs.setCharPref(this.prefs_root+'.auth_token',this.token); |
199 | else | 193 | else |
200 | this.prefs.clearUserPref(this.prefs_root+'.auth_token'); | 194 | this.prefs.clearUserPref(this.prefs_root+'.auth_token'); |
201 | if(this.perms) | 195 | if(this.perms) |
202 | this.prefs.setCharPref(this.prefs_root+'.auth_perms',this.perms); | 196 | this.prefs.setCharPref(this.prefs_root+'.auth_perms',this.perms); |
203 | else | 197 | else |
204 | this.prefs.clearUserPref(this.prefs_root+'.auth_perms'); | 198 | this.prefs.clearUserPref(this.prefs_root+'.auth_perms'); |
205 | if(this.user && this.user.nsid!=null && this.user.nsid!=undefined) | 199 | if(this.user && this.user.nsid!=null && this.user.nsid!=undefined) |
206 | this.prefs.setCharPref(this.prefs_root+'.auth_user.nsid',this.user.nsid); | 200 | this.prefs.setCharPref(this.prefs_root+'.auth_user.nsid',this.user.nsid); |
207 | else | 201 | else |
208 | this.prefs.clearUserPref(this.prefs_root+'.auth_user.nsid'); | 202 | this.prefs.clearUserPref(this.prefs_root+'.auth_user.nsid'); |
209 | if(this.user && this.user.username!=null && this.user.username!=undefined) | 203 | if(this.user && this.user.username!=null && this.user.username!=undefined) |
210 | this.prefs.setCharPref(this.prefs_root+'.auth_user.username',this.user.username); | 204 | this.prefs.setCharPref(this.prefs_root+'.auth_user.username',this.user.username); |