From ff4d941f195f6359ee9715d16832c6af749a9045 Mon Sep 17 00:00:00 2001
From: papush
Date: Thu, 29 Apr 2021 15:50:26 +0200
Subject: fix redirector prefs

by dynamically creating getters and setters instead of using the now
gone watch and unwatch methods
---
 chrome/js/redirectorprefs.js | 57 +++++++++++++++++++++++++++++++-------------
 1 file changed, 41 insertions(+), 16 deletions(-)

(limited to 'chrome')

diff --git a/chrome/js/redirectorprefs.js b/chrome/js/redirectorprefs.js
index 75ef936..a0cd366 100644
--- a/chrome/js/redirectorprefs.js
+++ b/chrome/js/redirectorprefs.js
@@ -1,12 +1,37 @@
 var EXPORTED_SYMBOLS = ['RedirectorPrefs'];
 
 function RedirectorPrefs() {
-	this.init();	
+	this.init();
 }
 
 RedirectorPrefs.prototype = {
-
 	_listeners : null,
+
+	watch : function(prop_name, cb) {
+		Object.defineProperty(this, prop_name, {
+			set: function(val) {
+				cb(prop_name, null, val);
+			},
+			get: function() {
+				let pb = this._prefBranch;
+				switch (pb.getPrefType(prop_name)) {
+				case pb.PREF_STRING:
+					return pb.getCharPref(prop_name);
+					break;
+				case pb.PREF_INT:
+					return pb.getIntPref(prop_name);
+					break;
+				case pb.PREF_BOOL:
+					return pb.getBoolPref(prop_name);
+					break;
+				}
+			}});
+	},
+
+	unwatch : function(prop_name) {
+		delete this[prop_name];
+	},
+
 	init : function() {
 		this._prefBranch = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.redirector.");
 		this.reload();
@@ -18,20 +43,20 @@ RedirectorPrefs.prototype = {
 		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);
-			}
-			
+			// 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) {
@@ -46,7 +71,7 @@ RedirectorPrefs.prototype = {
 			});
 		}
 	},
-	
+
 	get service() {
 		return Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranchInternal);
 	},
@@ -57,14 +82,14 @@ RedirectorPrefs.prototype = {
 		}
 		this.reload(false);
 		for each (var listener in this._listeners) {
-			listener && listener.changedPrefs && listener.changedPrefs(this);	 
+			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);
@@ -73,4 +98,4 @@ RedirectorPrefs.prototype = {
 			}
 		}
 	},
-}
\ No newline at end of file
+}
-- 
cgit v1.2.3-70-g09d2