aboutsummaryrefslogtreecommitdiffstats
path: root/hatebuWatchDog.js
diff options
context:
space:
mode:
authorsnaka2009-06-02 23:25:08 +0000
committersnaka2009-06-02 23:25:08 +0000
commitdb3faaa72c2b8cb1681246ad7542694b7ed25476 (patch)
treedfd7151dbabace3594a88faaa193177f00a21d6b /hatebuWatchDog.js
parentf387a770c6af5e73be747e5d5efba7385e98227a (diff)
downloadvimperator-plugins-db3faaa72c2b8cb1681246ad7542694b7ed25476.tar.bz2
Add new plugin 'hatebuWatchDog.js'
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@33740 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'hatebuWatchDog.js')
-rw-r--r--hatebuWatchDog.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/hatebuWatchDog.js b/hatebuWatchDog.js
new file mode 100644
index 0000000..1b8ee0f
--- /dev/null
+++ b/hatebuWatchDog.js
@@ -0,0 +1,104 @@
+//
+// hatebuWatchDog.js - hatena bookmark watch dog -
+//
+plugins.hatebuWatchDog = {};
+plugins.hatebuWatchDog = (function() {
+ // for DEVELOPMENT
+ //liberator.globalVariables.hatebuWatchDogTarget = 'http://d.hatena.ne.jp/snaka72/';
+ //liberator.globalVariables.hatebuWatchDogWatchAlways = 'true';
+
+ let previousValue = 0;
+
+ function watch() {
+ let libly = plugins.libly;
+ if (target() == '') {
+ liberator.echoerr("Please set g:hatebeWatchDogTarget before watch().");
+ return;
+ }
+ // build hatebu xml-rpc request
+ let requestBody = (
+ <methodCall>
+ <methodName>bookmark.getTotalCount</methodName>
+ <params>
+ <param><value><string>{target()}</string></value></param>
+ </params>
+ </methodCall>
+ ).toXMLString();
+
+ let req = new libly.Request(
+ 'http://b.hatena.ne.jp/xmlrpc',
+ {
+ 'Content-Type' : 'text/xml'
+ },{
+ asynchronous: false,
+ postBody : requestBody
+ }
+ );
+
+ let currentValue;
+ let resXml;
+ req.addEventListener("onSuccess", function(data) {
+ liberator.log("XML-RPC request was succeeded.");
+ resXml = new XML(data.responseText.replace(/^<\?xml version[^>]+?>/, ''));
+ currentValue = window.eval(resXml..int.toString());
+ });
+ req.addEventListener("onFailure", function(data) {
+ liberator.echoerr("Cannot remove pin");
+ });
+
+ liberator.log("reauest...");
+ req.post();
+ liberator.log("done...");
+
+ let isDifferent = currentValue != previousValue;
+ if (isDifferent || watchAlways())
+ growl('Your hatebu count became ... ' + currentValue);
+
+ return {
+ isDifferent : isDifferent,
+ count: isDifferent ? (previousValue = currentValue)
+ : previousValue
+ };
+ }
+
+ function target()
+ liberator.globalVariables.hatebuWatchDogTarget || '';
+
+ function watchAlways()
+ window.eval(liberator.globalVariables.hatebuWatchDogAlways) || false;
+
+ function getInterval()
+ window.eval(liberator.globalVariables.hatebuWatchDogInterval) || 600; // default : 10 min.
+
+ function growl(message) {
+ Cc['@mozilla.org/alerts-service;1']
+ .getService(Ci.nsIAlertsService)
+ .showAlertNotification(
+ null, //'chrome://mozapps/skin/downloads/downloadIcon.png',
+ "From hatebuWatchDog",
+ message
+ );
+ }
+
+ var watchInterval;
+ function setWatchInterval(interval) {
+ interval = interval || 600;
+ interval = interval < 60 ? 60 : interval;
+
+ // Clear interval while plugin reloaded.
+ if (watchInterval) {
+ clearInterval(watchInterval);
+ liberator.echo("timer reset!");
+ }
+ watchInterval = setInterval(function() watch(), 1000 * interval);
+ }
+
+ // Run immediatly
+ setWatchInterval(getInterval());
+
+ return {
+ watch : watch,
+ target: target,
+ interval : setWatchInterval
+ }
+})();