diff options
author | Einar Egilsson | 2011-09-04 22:53:16 +0200 |
---|---|---|
committer | Einar Egilsson | 2011-09-04 22:53:16 +0200 |
commit | 4b612baf4f29178214edec130856d83a40bf473d (patch) | |
tree | 20e36e3fcf7a24e829640c2fd605622f14af0edc /chrome/js/redirectorprefs.js | |
parent | 8fb65cf8aeaaf66636698310c0168929fc1a2ce0 (diff) |
Total restructuring of files and deletion of old files
Diffstat (limited to 'chrome/js/redirectorprefs.js')
-rw-r--r-- | chrome/js/redirectorprefs.js | 76 |
1 files changed, 76 insertions, 0 deletions
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 |