From f2f202f3162fd18e1f6956f1607e6146d07ff651 Mon Sep 17 00:00:00 2001 From: UCyborg Date: Sun, 17 Jul 2022 13:48:27 +0200 Subject: [PATCH] Address compatibility issues with SeaMonkey 2.53.13 * Replaced legacy Iterator usage with Object.entries / Symbol.iterator. * Handle removed parameters of NSIInputStreamInput.input API. * Bumped up extension version and minimum versions of supported applications. * Also target Pale Moon, Iceape-UXP and Iceweasel-UXP. Co-authored-by: dirkf --- chrome/content/common/internalFunctions.js | 2 +- chrome/content/dta/manager/manager.js | 4 +-- chrome/content/dta/manager/utils.js | 2 +- install.rdf | 35 +++++++++++++++++++--- modules/api.jsm | 2 +- modules/manager/verificator.js | 22 ++++++++++---- modules/manager/visitormanager.js | 2 +- modules/support/filtermanager.js | 2 +- modules/utils.js | 2 +- 9 files changed, 56 insertions(+), 17 deletions(-) diff --git a/chrome/content/common/internalFunctions.js b/chrome/content/common/internalFunctions.js index d89a7f38c..10a71b66d 100644 --- a/chrome/content/common/internalFunctions.js +++ b/chrome/content/common/internalFunctions.js @@ -17,7 +17,7 @@ var Exception = Components.Exception; Cu.import("chrome://dta-modules/content/glue.jsm", this); (function() { - for (let [k,v] in new Iterator(require("constants"))) { + for (let [k,v] of Object.entries(require("constants"))) { Object.defineProperty(this, k, {value: v, enumerable:true}); } }).call(this); diff --git a/chrome/content/dta/manager/manager.js b/chrome/content/dta/manager/manager.js index 2dd4ccab7..09316bc06 100644 --- a/chrome/content/dta/manager/manager.js +++ b/chrome/content/dta/manager/manager.js @@ -2017,7 +2017,7 @@ var QueueItem = class QueueItem { if (isNaN(size) || size < 0) { if (log.enabled) { log(LOG_ERROR, "Bug: invalid partial size!", size); - for (let [i,c] in Iterator(this.chunks)) { + for (let [i,c] of Object.entries(this.chunks)) { log(LOG_DEBUG, "Chunk " + i + ": " + c); } } @@ -2717,7 +2717,7 @@ var QueueItem = class QueueItem { } let scoreboard = ""; let len = this.totalSize.toString().length; - for (let [i,c] in Iterator(this.chunks)) { + for (let [i,c] of Object.entries(this.chunks)) { scoreboard += i + ": " + c + "\n"; } log(LOG_DEBUG, "scoreboard\n" + scoreboard); diff --git a/chrome/content/dta/manager/utils.js b/chrome/content/dta/manager/utils.js index 1cd845407..aec476dae 100644 --- a/chrome/content/dta/manager/utils.js +++ b/chrome/content/dta/manager/utils.js @@ -688,7 +688,7 @@ var Tooltip = { let bl = b.length; for (let pass of this._ucPasses) { - for (var [i, chunk] in Iterator(b)) { + for (let [i, chunk] of Object.entries(b)) { if (pass.fs) { ctx.fillStyle = this._createInnerShadowGradient(ctx, cheight, pass.fs); } diff --git a/install.rdf b/install.rdf index 8e142ff6e..465762aba 100644 --- a/install.rdf +++ b/install.rdf @@ -5,7 +5,7 @@ dta@downthemall.net DownThemAll! The mass downloader for Firefox. - 3.1.1pre + 3.1.2pre true true 2 @@ -26,17 +26,44 @@ {ec8030f7-c20a-464f-9b0e-13a3a9e97384} - 45.0 + 47.0 56.* - + {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} 2.40 - 2.53.12.* + 2.53.* + + + + + + + {8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4} + 28.0.0 + 31.* + + + + + + + {9184b6fe-4a5c-484d-8b4b-efbfccbfb514} + 52.9.0 + 52.* + + + + + + + {ec8030f7-c20a-464f-9b0e-13a3a9e97384} + 52.9.0 + 52.* diff --git a/modules/api.jsm b/modules/api.jsm index 6d0a32d33..2c4f3b253 100644 --- a/modules/api.jsm +++ b/modules/api.jsm @@ -17,7 +17,7 @@ let wrap = (_k, _v) => { }; }; -for (let [k,v] in Iterator(api)) { +for (let [k,v] of Object.entries(api)) { let [_k,_v] = [k,v]; Object.defineProperty(this, _k, { get: wrap(_k, _v), diff --git a/modules/manager/verificator.js b/modules/manager/verificator.js index e2f3f43b7..260a70e22 100644 --- a/modules/manager/verificator.js +++ b/modules/manager/verificator.js @@ -24,6 +24,17 @@ function _verify(file, hashCollection, progressCallback) { } const stream = new Instances.FileInputStream(file, flags, 502 /* 0766*/, 0); + const getInputStreamPump = function(stream, seg_size, seg_num, flag) { + // see modules/glue.jsm:149 for prefix Plain to instantiate w/o init + let pump = new Instances.PlainInputStreamPump(); + if (pump.init.length > 5) { + pump.init(stream, 0, -1, seg_size, seg_num, flag); + } else { + pump.init(stream, seg_size, seg_num, flag); + } + return pump; + } + return new Promise(function(resolve, reject) { const listener = { QueryInterface: QI([Ci.nsIStreamListener, Ci.nsIRequestObserver]), @@ -53,7 +64,7 @@ function _verify(file, hashCollection, progressCallback) { progressCallback(Math.min(completed, total)); } }; - let pump = new Instances.InputStreamPump(stream, 0, -1, SEGSIZE, SEGNUM, false); + let pump = getInputStreamPump(stream, SEGSIZE, SEGNUM, false); pump.asyncRead(listener, null); }.bind(this)); } @@ -72,8 +83,8 @@ function _multiVerify(file, hashCollection, progressCallback) { log(LOG_DEBUG, "enabled OS_READAHEAD"); } let stream = new Instances.FileInputStream(file, flags, 502 /* 0766 */, 0).QueryInterface(Ci.nsISeekableStream); - let partials = new Iterator(hashCollection.partials); - let partial = partials.next()[1]; + let partials = hashCollection.partials[Symbol.iterator](); + let partial = partials.next().value[1]; log(LOG_DEBUG, partial.toSource()); let partialHash = new Instances.Hash(nsICryptoHash[partial.type]); let partialPending = hashCollection.parLength; @@ -170,8 +181,9 @@ function _multiVerify(file, hashCollection, progressCallback) { } }; let tee = new Instances.StreamListenerTee(listenerMain, po); - new Instances.InputStreamPump(stream, 0, -1, SEGSIZE, SEGNUM, false).asyncRead(tee, null); - new Instances.InputStreamPump(pi, 0, -1, SEGSIZE, SEGNUM, true).asyncRead(listenerPartials, null); + getInputStreamPump(stream, SEGSIZE, SEGNUM, false).asyncRead(tee, null); + getInputStreamPump(pi, SEGSIZE, SEGNUM, true).asyncRead(listenerPartials, null); + }.bind(this)); } diff --git a/modules/manager/visitormanager.js b/modules/manager/visitormanager.js index 0e89928f3..9b0f95258 100644 --- a/modules/manager/visitormanager.js +++ b/modules/manager/visitormanager.js @@ -400,7 +400,7 @@ class VisitorManager { * if no timestamp found */ get time() { - for (let [,v] in new Iterator(this._visitors)) { + for (let [,v] of Object.entries(this._visitors)) { if (v.time && v.time > 0) { return v.time; } diff --git a/modules/support/filtermanager.js b/modules/support/filtermanager.js index 58987ab9f..61c56c0d7 100644 --- a/modules/support/filtermanager.js +++ b/modules/support/filtermanager.js @@ -616,7 +616,7 @@ class FilterManagerImpl { // Load all let all = []; - for (let [id, obj] in Iterator(filters)) { + for (let [id, obj] of Object.entries(filters)) { try { let f = new Filter(id); f.load(obj); diff --git a/modules/utils.js b/modules/utils.js index 2060f8b93..b0a73f69a 100644 --- a/modules/utils.js +++ b/modules/utils.js @@ -215,7 +215,7 @@ naturalSort.strtol = function strtol(str, rv) { str.toLowerCase().split(""), e => e.charCodeAt(0) ); - for (let [idx,c] in new Iterator(chars)) { + for (let [idx,c] of Object.entries(chars)) { if ((c >= 48 && c <= 57) || (base === 16 && c >= 97 && c <= 100)) { continue; }