From 4b612baf4f29178214edec130856d83a40bf473d Mon Sep 17 00:00:00 2001 From: Einar Egilsson Date: Sun, 4 Sep 2011 22:53:16 +0200 Subject: Total restructuring of files and deletion of old files --- chrome/js/redirectorprefs.js | 76 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 chrome/js/redirectorprefs.js (limited to 'chrome/js/redirectorprefs.js') diff --git a/chrome/js/redirectorprefs.js b/chrome/js/redirectorprefs.js new file mode 100644 index 0000000..75ef936 --- /dev/null +++ b/chrome/js/redirectorprefs.js @@ -0,0 +1,76 @@ +var EXPORTED_SYMBOLS = ['RedirectorPrefs']; + +function RedirectorPrefs() { + this.init(); +} + +RedirectorPrefs.prototype = { + + _listeners : null, + init : function() { + this._prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.redirector."); + this.reload(); + this._listeners = []; + this.service.addObserver('extensions.redirector', this, false); + }, + + dispose : function() { + this._listeners = null; + this.service.removeObserver('extensions.redirector', this); + }, + + reload : function(addWatch) { + var b = this._prefBranch; + for each (var name in b.getChildList('')){ + this.unwatch(name); + var type = b.getPrefType(name); + if (type == b.PREF_STRING) { + this[name] = b.getCharPref(name); + } else if (type == b.PREF_INT) { + this[name] = b.getIntPref(name); + } else if (type == b.PREF_BOOL) { + this[name] = b.getBoolPref(name); + } + + this.watch(name, function(id,oldval,newval) { + var type = b.getPrefType(id); + if (type == b.PREF_STRING) { + b.setCharPref(id,newval); + } else if (type == b.PREF_INT) { + b.setIntPref(id, newval); + } else if (type == b.PREF_BOOL) { + dump(id+ ' ' + newval) + b.setBoolPref(id, newval); + } + return newval; + }); + } + }, + + get service() { + return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranchInternal); + }, + + observe : function(subject, topic, data) { + if (topic != 'nsPref:changed') { + return; + } + this.reload(false); + for each (var listener in this._listeners) { + listener && listener.changedPrefs && listener.changedPrefs(this); + } + }, + + addListener : function(listener) { + this._listeners.push(listener); + }, + + removeListener : function(listener) { + for (var i = 0; i < this._listeners.length; i++) { + this._listeners.splice(i,1); + if (this._listeners[i] == listener) { + return; + } + } + }, +} \ No newline at end of file -- cgit v1.2.3-70-g09d2