diff options
author | anekos | 2011-08-30 21:09:14 +0900 |
---|---|---|
committer | anekos | 2011-08-30 21:09:14 +0900 |
commit | 2865f8bb95fa15ae1f7ab774aaddd4d8b94c7fcf (patch) | |
tree | 620ac601c8234ebf53265a1a1d8a4a28ad1a2d1e | |
parent | 24e7c317f5d3e1c6ce354d82793c178c0290a890 (diff) | |
download | vimperator-plugins-2865f8bb95fa15ae1f7ab774aaddd4d8b94c7fcf.tar.bz2 |
ポストに失敗したらトークン的なものを自動的に取りに行くようにした
-rw-r--r-- | google-plus-commando.js | 58 |
1 files changed, 32 insertions, 26 deletions
diff --git a/google-plus-commando.js b/google-plus-commando.js index 6cbcb74..99949ff 100644 --- a/google-plus-commando.js +++ b/google-plus-commando.js @@ -36,7 +36,7 @@ THE POSSIBILITY OF SUCH DAMAGE. // INFO {{{ let INFO = <> - <plugin name="GooglePlusCommando" version="2.3.1" + <plugin name="GooglePlusCommando" version="2.3.2" href="http://github.com/vimpr/vimperator-plugins/blob/master/google-plus-commando.js" summary="The handy commands for Google+" lang="en-US" @@ -1084,9 +1084,10 @@ let g:gplus_commando_map_menu = "m" return; } + window.setTimeout(function () { let pd = new PostData(message, win, image, acls); - postGooglePlus(pd); + postGooglePlus(pd, true); }, 0); }, { literal: 0, @@ -1107,10 +1108,13 @@ let g:gplus_commando_map_menu = "m" /** * Google+のページから必要データを保存する + * @param {function} onComplete * @return {Boolean} */ - function setupGooglePlus () { + function setupGooglePlus (onComplete) { function onSuccess () { + if (onComplete) + onComplete(); liberator.echomsg('Initialized: googleplus'); } @@ -1187,8 +1191,9 @@ let g:gplus_commando_map_menu = "m" /** * Post to Google+ * @param {PostData} aPostData + * @param {boolean} resetup */ - function postGooglePlus (aPostData) { + function postGooglePlus (aPostData, aRetry) { let data = aPostData.getPostData(); let queries = []; for (let key in data) @@ -1199,30 +1204,31 @@ let g:gplus_commando_map_menu = "m" xhr.open('POST', aPostData.POST_URL, true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8'); xhr.setRequestHeader('Origin', HOME_URL); - xhr.onreadystatechange = postGooglePlus.readyStateChange; + + xhr.onreadystatechange = function () { + let xhr = aEvent.target, + msg = 'Google+: ', + XBW = window.XULBrowserWindow; + if (xhr.readyState == 4) { + let ok = xhr.status == 200; + msg += ok ? 'Posted' : 'Post failed (' + xhr.statusText + ')'; + if (!ok && retry) { + msg += ' ... Retry'; + setupGooglePlus(postGooglePlus.bind(null, aPostData, false)); + } + window.setTimeout(function (XBW, msg) { + if (XBW.jsDefaultStatus.indexOf('Google+:') == 0) + XBW.setJSDefaultStatus(''); + }, 2000, XBW, msg); + } else { + msg += 'sending...'; + } + liberator.log(msg, 0); + XBW.setJSDefaultStatus(msg); + }; + xhr.send(queries.join('&')); } - /** - * Google+への送信状況を表示する - * @param {Event} aEvent - * aEvent.target は XMLHttpRequestオブジェクト - */ - postGooglePlus.readyStateChange = function GooglePlus_readyStateChange (aEvent) { - let xhr = aEvent.target, - msg = 'Google+: ', - XBW = window.XULBrowserWindow; - if (xhr.readyState == 4) { - msg += (xhr.status == 200) ? 'Posted' : 'Post faild (' + xhr.statusText + ')'; - window.setTimeout(function (XBW, msg) { - if (XBW.jsDefaultStatus.indexOf('Google+:') == 0) - XBW.setJSDefaultStatus(''); - }, 2000, XBW, msg); - } else { - msg += 'sending...'; - } - liberator.log(msg, 0); - XBW.setJSDefaultStatus(msg); - }; XPCOMUtils.defineLazyServiceGetter(__context__, 'MIME', '@mozilla.org/mime;1', 'nsIMIMEService'); |