Actualizacion maquina principal
[dotfiles/.git] / .config / BraveSoftware / Brave-Browser / Default / Extensions / cimiefiiaegbelhefglklhhakcgmhkai / 1.7.6_0 / extension-downloads.js
diff --git a/.config/BraveSoftware/Brave-Browser/Default/Extensions/cimiefiiaegbelhefglklhhakcgmhkai/1.7.6_0/extension-downloads.js b/.config/BraveSoftware/Brave-Browser/Default/Extensions/cimiefiiaegbelhefglklhhakcgmhkai/1.7.6_0/extension-downloads.js
new file mode 100644 (file)
index 0000000..031e99b
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+    Copyright (C) 2017-2019 Kai Uwe Broulik <kde@privat.broulik.de>
+
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 3 of
+    the License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+var activeDownloads = []
+var downloadUpdateInterval = 0;
+
+function startSendingDownloadUpdates() {
+    if (!downloadUpdateInterval) {
+        downloadUpdateInterval = setInterval(sendDownloadUpdates, 1000);
+    }
+}
+
+function stopSendingDownloadUpdates() {
+    if (downloadUpdateInterval) {
+        clearInterval(downloadUpdateInterval);
+        downloadUpdateInterval = 0;
+    }
+}
+
+function sendDownloadUpdates() {
+    chrome.downloads.search({
+        state: 'in_progress',
+        paused: false
+    }, function (results) {
+        if (!results.length) {
+            stopSendingDownloadUpdates();
+            return;
+        }
+
+        results.forEach(function (download) {
+            if (activeDownloads.indexOf(download.id) === -1) {
+                return;
+            }
+
+            var payload = {
+                id: download.id,
+                bytesReceived: download.bytesReceived,
+                estimatedEndTime: download.estimatedEndTime,
+                // Firefox ends along "-1" as totalBytes on download creation
+                // but then never updates it, so we send this along periodically, too
+                totalBytes: download.totalBytes
+            };
+
+            port.postMessage({subsystem: "downloads", event: "update", download: payload});
+        });
+    });
+}
+
+function createDownload(download) {
+    // don't bother telling us about completed downloads...
+    // otherwise on browser startup we'll spawn a gazillion download progress notification
+    if (download.state === "complete" || download.state === "interrupted") {
+        return;
+    }
+
+    activeDownloads.push(download.id);
+    startSendingDownloadUpdates();
+
+    port.postMessage({subsystem: "downloads", event: "created", download: download});
+}
+
+function sendDownloads() {
+    // When extension is (re)loaded, create each download initially
+    chrome.downloads.search({
+        state: 'in_progress',
+    }, function (results) {
+        results.forEach(createDownload);
+    });
+}
+
+chrome.downloads.onCreated.addListener(createDownload);
+
+chrome.downloads.onChanged.addListener(function (delta) {
+    if (activeDownloads.indexOf(delta.id) === -1) {
+        return;
+    }
+
+    // An interrupted download was resumed. When a download is interrupted, we finish (and delete)
+    // the job but the browser re-uses the existing download, so when this happen,
+    // pretend a new download was created.
+    if (delta.state) {
+        if (delta.state.previous === "interrupted" && delta.state.current === "in_progress") {
+            console.log("Resuming previously interrupted download, pretending a new download was created");
+            chrome.downloads.search({
+                id: delta.id
+            }, function (downloads) {
+                createDownload(downloads[0]);
+            });
+            return;
+        }
+    }
+
+    // The update timer stops automatically when there are no running downloads
+    // so make sure to restart it when a download is unpaused
+    if (delta.paused) {
+        if (delta.paused.previous && !delta.paused.current) {
+            startSendingDownloadUpdates();
+        }
+    }
+
+    var payload = {};
+
+    Object.keys(delta).forEach((key) => {
+        payload[key] = delta[key].current;
+    });
+
+    payload.id = delta.id; // not a delta, ie. has no current and thus isn't added by the loop below
+
+    port.postMessage({subsystem: "downloads", event: "update", download: payload});
+});
+
+addCallback("downloads", "cancel", function (message) {
+    var downloadId = message.downloadId;
+
+    console.log("Requested to cancel download", downloadId);
+
+    chrome.downloads.cancel(downloadId);
+});
+
+addCallback("downloads", "suspend", function (message) {
+    var downloadId = message.downloadId;
+
+    console.log("Requested to suspend download", downloadId);
+
+    chrome.downloads.pause(downloadId);
+});
+
+addCallback("downloads", "resume", function (message) {
+    var downloadId = message.downloadId;
+
+    console.log("Requested to resume download", downloadId);
+
+    chrome.downloads.resume(downloadId);
+});
+
+addCallback("downloads", "createAll", () => {
+    sendDownloads();
+});