diff --git a/buildxpi.py b/buildxpi.py index 107533b..1c54d28 100755 --- a/buildxpi.py +++ b/buildxpi.py @@ -130,7 +130,7 @@ def print_info(self): self.msg(" - Version: %s" % self.info["version"], False) self.msg(" - Filename: %s" % self.pn("xpi"), False) - xpifile = open(self.pn("xpi"), "r") + xpifile = open(self.pn("xpi"), "rb") hashname, hash = sha_hash(xpifile.read()) xpifile.close() self.msg(" - %s: %s" % (hashname, hash), False) diff --git a/src/install.rdf b/src/install.rdf index b27639c..9c7ab54 100644 --- a/src/install.rdf +++ b/src/install.rdf @@ -7,9 +7,9 @@ em:minVersion="3.6" em:maxVersion="9.*" /> @@ -18,9 +18,9 @@ + em:contributor="Chromakode slyf vilkku" /> diff --git a/src/modules/site.jsm b/src/modules/site.jsm index d97e3a1..7782388 100644 --- a/src/modules/site.jsm +++ b/src/modules/site.jsm @@ -113,8 +113,8 @@ SiteCollection.prototype.initRefreshInterval = function() { SiteCollection.prototype.onContentLoad = function(doc, win) { if (doc.location) { for (let [siteID, site] in this) { - // Remove www. - var baseRegex = /www\.?/; + // Remove https?://www. + var baseRegex = /https?:\/\/www\.?/; var baseSiteHost = site.siteURI.spec.replace(baseRegex, ""); var baseURL = doc.location.href.replace(baseRegex, ""); if (strStartsWith(baseURL, baseSiteHost)) { diff --git a/src/modules/utils/domUtils.jsm b/src/modules/utils/domUtils.jsm index 2bac5d8..fe0a916 100644 --- a/src/modules/utils/domUtils.jsm +++ b/src/modules/utils/domUtils.jsm @@ -47,18 +47,6 @@ function compareBy(keyFunction) { }; } -function sortChildren(parentElement, compareFunc) { - sorted = Array.sort(Array.slice(parentElement.childNodes), compareFunc) - - let parentElement = curElement.parentNode; - if (i == nodeList.length) { - // Insert after the last node - parentElement.insertBefore(insertElement, curElement.nextSibling); - } else { - parentElement.insertBefore(insertElement, curElement); - } -} - /** * Return the first child node of an element with the specified class. * diff --git a/unused/authentication-old.jsm b/unused/authentication-old.jsm deleted file mode 100644 index 4621808..0000000 --- a/unused/authentication-old.jsm +++ /dev/null @@ -1,139 +0,0 @@ -var loginManager = Components.classes["@mozilla.org/login-manager;1"] - .getService(Components.interfaces.nsILoginManager) - -var nsLoginInfo = new Components.Constructor("@mozilla.org/login-manager/loginInfo;1", - Components.interfaces.nsILoginInfo, - "init"); - -logger = Components.utils.import("resource://socialite/utils/log.jsm"); -Components.utils.import("resource://socialite/utils/action/action.jsm"); -http = Components.utils.import("resource://socialite/utils/action/httpRequest.jsm"); - -var EXPORTED_SYMBOLS = ["getAuthHash", "refreshAuthHash", "RedditAuth"]; - -STATUS_SUCCESS = 200; - -PASSWORD_HOSTNAME = "chrome://socialite"; -PASSWORD_REALM_PRE = "Socialite authentication for "; - -// --- - -function RedditAuth(siteURL, username, userHash) { - this.siteURL = siteURL; - this.username = username; - this.userHash = userHash; - this.modHash = null; -} - -RedditAuth.prototype.authParams = function(params) { - params["uh"] = this.userHash; - return params; -} - -RedditAuth.prototype.snarfModHash = function(modHash) { - this.modHash = modHash; -} - -RedditAuth.prototype.authModHash = function(params) { - if (this.modHash) { - params["uh"] = this.modHash; - } - return params; -} - -// --- - -var getAuthHash = Action("reddit_auth.getAuthHash", function(siteURL, action) { - logger.log("reddit_auth", "Making authenticate call"); - - var logins = loginManager.findLogins({}, PASSWORD_HOSTNAME, null, PASSWORD_REALM_PRE + siteURL); - if (logins.length == 0) { - // No stored hash... time to get one - var act = refreshAuthHash(); - act.chainTo(action); - act.perform(siteURL); - } else { - var login = logins[0]; - var rAuth = new RedditAuth(siteURL, login.username, login.password); - action.success(rAuth); - } -}); - -var refreshAuthHash = Action("reddit_auth.refreshAuthHash", function(siteURL, action) { - logger.log("reddit_auth", "Getting new user hash"); - - var act = http.GetAction( - "http://" + siteURL + "/bookmarklets/", - null, - - function success(r) { - var uh = extractUserHash(r.responseXML); - var username = extractUsername(r.responseXML); - - // Save the userHash we retrieved - var uhLoginInfo = new nsLoginInfo( - PASSWORD_HOSTNAME, - null, - PASSWORD_REALM_PRE + siteURL, - username, uh, - "", "" - ); - - // Remove any existing logins - var logins = loginManager.findLogins({}, PASSWORD_HOSTNAME, null, PASSWORD_REALM_PRE + siteURL); - for (var i = 0; i < logins.length; i++) { - if (logins[1].username == username) { - loginManager.removeLogin(logins[i]); - } - } - - // Add the new login - loginManager.addLogin(uhLoginInfo); - - var rAuth = new RedditAuth(siteURL, uh); - action.success(rAuth); - }, - function failure(r) { action.failure(); } - ); - - act.request.overrideMimeType('text/xml'); - act.perform(); -}); - -function evalXHTML_XPath(document, xpath) { - var XPathResult = Components.interfaces.nsIDOMXPathResult; - const XHTMLResolver = function(prefix) { - if (prefix=="xhtml") {return "http://www.w3.org/1999/xhtml"} - } - - return document.evaluate(xpath, document, XHTMLResolver, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); -} - -function extractUserHash(document) { - // A bit elaborate, but this is currently the best way to do things. - // By getting the information from the bookmarklets page itself, we are hopefully more safe from unassociated page changes as reddit may alter their hashing system... - - // Get the first "like" button - try { - var results = evalXHTML_XPath(document, "//xhtml:a/xhtml:img[@alt='like']/.."); - var likeButton = results.iterateNext(); - const getUserHash = /uh=(\w*)/; - - return likeButton.href.match(getUserHash)[1]; - } catch (e) { - logger.log("reddit_auth", "Unable to parse bookmarklets page for user hash: " + e.toString()); - return null; - } -} - -function extractUsername(document) { - // Get the username - try { - var results = evalXHTML_XPath(document, "//xhtml:span[@class='user']/xhtml:a"); - var usernameLink = results.iterateNext(); - return usernameLink.textContent; - } catch (e) { - logger.log("reddit_auth", "Unable to parse bookmarklets page for username: " + e.toString()); - return null; - } -} diff --git a/unused/bookmarkletAPI.jsm b/unused/bookmarkletAPI.jsm deleted file mode 100644 index e0c991d..0000000 --- a/unused/bookmarkletAPI.jsm +++ /dev/null @@ -1,56 +0,0 @@ -// High-level reddit bookmarklet commands - -logger = Components.utils.import("resource://socialite/utils/log.jsm"); -Components.utils.import("resource://socialite/utils/action/action.jsm"); -http = Components.utils.import("resource://socialite/utils/action/httpRequest.jsm"); -Components.utils.import("resource://socialite/utils/hitch.jsm"); -Components.utils.import("resource://socialite/utils/quantizer.jsm"); - -var EXPORTED_SYMBOLS = ["BookmarkletAPI"]; - -QUANTIZE_TIME = 1000; - -var BOOKMARKLET_API_PATH = "/d/"; -function APIURL(site, op) { - return "http://www." + site + BOOKMARKLET_API_PATH + op; -} - -function sameURL(func1, arg1, func2, arg2) { - var url1 = arg1[0]; - var url2 = arg2[0]; - - return (url1 == url2); -}; - -// Make a template since all bookmarklet calls are similar -function bookmarkletAction(self, op, quantizer) { - var func = hitchThis(self, function(url, action) { - logger.log("reddit", "Making ajax bookmarklet " + op + " call"); - - var params = { - u: url, - }; - params = this.reddit.auth.authParams(params); - - var act = http.GetAction(APIURL(this.reddit.auth.site, op), params); - act.chainTo(action); - act.perform(); - }); - - if (quantizer) { - func = quantizer.quantize(func); - } - - return Action("reddit.bookmarklet." + op, func); -} - -function BookmarkletAPI(reddit) { - this.reddit = reddit; - - this.voteQuantizer = new Quantizer("reddit.bookmarklet.vote.quantizer", QUANTIZE_TIME, sameURL); - this.like = bookmarkletAction(this, "like", this.voteQuantizer); - this.dislike = bookmarkletAction(this, "dislike", this.voteQuantizer); - - this.saveQuantizer = new Quantizer("reddit.bookmarklet.save.quantizer", QUANTIZE_TIME, sameURL); - this.save = bookmarkletAction(this, "save", this.saveQuantizer); -} diff --git a/unused/oneshot.jsm b/unused/oneshot.jsm deleted file mode 100644 index 3710c83..0000000 --- a/unused/oneshot.jsm +++ /dev/null @@ -1,13 +0,0 @@ -// Add an event listener that only fires once. - -var EXPORTED_SYMBOLS = ["makeOneShot"] - -function makeOneShot(instance, type, listener, useCapture) { - - var oneShotListener = function () { - instance.removeEventListener(type, oneShotListener, useCapture); - listener.apply(null, arguments); - } - - instance.addEventListener(type, oneShotListener, useCapture); -} diff --git a/unused/retry.jsm b/unused/retry.jsm deleted file mode 100644 index 9f8369a..0000000 --- a/unused/retry.jsm +++ /dev/null @@ -1,56 +0,0 @@ -// A failure callback to retry an action a set number of times - -logger = Components.utils.import("resource://socialite/utils/log.jsm"); -Components.utils.import("resource://socialite/utils/action/action.jsm"); -Components.utils.import("resource://socialite/utils/hitch.jsm"); - -var EXPORTED_SYMBOLS = ["retryAction"]; - -function retryAction(startCount, delay, retryCallback, successCallback, failureCallback) { - var act = _RetryAction(successCallback, failureCallback); - act.count = startCount; - act.delay = delay - act.retryCallback = retryCallback; - act.timer = Components.classes["@mozilla.org/timer;1"] - .createInstance(Components.interfaces.nsITimer); - return act; -} - -var _RetryAction = Action("retry", function() { - var argsLen = arguments.length; - - var retryAction = arguments[argsLen-1]; - var action = arguments[argsLen-2]; - - if (!retryAction.count) { - retryAction.failure.apply(retryAction, arguments); - } else { - logger.log(retryAction.name, action.name + " has failed, retrying (" + retryAction.count + " retrys left)"); - - var args = arguments; - var doRetry = function() { - // Call the retry callback - var continueRetry = retryAction.doCallback(this.retryCallback, null, args); - if (continueRetry == null || continueRetry == true) { - retryAction.count -= 1; - - // Perform the action again. - action.perform.apply(action, action.lastArgs); - } else { - logger.log(retryAction.name, "Retry callback has signalled to stop retrying; retry aborted"); - retryAction.failure.apply(retryAction, arguments); - } - }; - - if (retryAction.delay) { - logger.log(retryAction.name, "Waiting " + retryAction.delay + " milliseconds"); - retryAction.timer.initWithCallback( - doRetry, - retryAction.delay, - retryAction.timer.TYPE_ONE_SHOT - ); - } else { - doRetry(); - } - } -}); diff --git a/unused/sequence.jsm b/unused/sequence.jsm deleted file mode 100644 index 75c0512..0000000 --- a/unused/sequence.jsm +++ /dev/null @@ -1,17 +0,0 @@ -// A helper function to call a list of functions in sequence - -logger = Components.utils.import("resource://socialite/utils/log.jsm"); - -var EXPORTED_SYMBOLS = ["sequenceCalls"]; - -function sequenceCalls() { - var callbacks = Array.prototype.splice.call(arguments, 0) || []; - - var sequence = function () { - for (var i=0; i