summaryrefslogtreecommitdiffstats
path: root/comm/mail/base/content/migrationProgress.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/base/content/migrationProgress.js')
-rw-r--r--comm/mail/base/content/migrationProgress.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/comm/mail/base/content/migrationProgress.js b/comm/mail/base/content/migrationProgress.js
new file mode 100644
index 0000000000..d75536a137
--- /dev/null
+++ b/comm/mail/base/content/migrationProgress.js
@@ -0,0 +1,64 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, you can obtain one at http://mozilla.org/MPL/2.0/. */
+
+var { MigrationTasks } = ChromeUtils.import(
+ "resource:///modules/MailMigrator.jsm"
+);
+
+window.addEventListener("load", async function () {
+ let list = document.getElementById("tasks");
+ let itemTemplate = document.getElementById("taskItem");
+ let progress = document.querySelector("progress");
+ let l10nElements = [];
+
+ for (let task of MigrationTasks.tasks) {
+ if (!task.fluentID) {
+ continue;
+ }
+
+ let item = itemTemplate.content.firstElementChild.cloneNode(true);
+ item.classList.add(task.status);
+
+ let name = item.querySelector(".task-name");
+ document.l10n.setAttributes(name, task.fluentID);
+ l10nElements.push(name);
+
+ if (task.status == "running") {
+ if (task.subTasks.length) {
+ progress.value = task.subTasks.filter(
+ t => t.status == "finished"
+ ).length;
+ progress.max = task.subTasks.length;
+ progress.style.visibility = null;
+ } else {
+ progress.style.visibility = "hidden";
+ }
+ }
+
+ list.appendChild(item);
+
+ task.on("status-change", (event, status) => {
+ item.classList.remove("pending", "running", "finished");
+ item.classList.add(status);
+
+ if (status == "running") {
+ // Always hide the progress bar when starting a task. If there are
+ // sub-tasks, it will be shown by a progress event.
+ progress.style.visibility = "hidden";
+ }
+ });
+ task.on("progress", (event, value, max) => {
+ progress.value = value;
+ progress.max = max;
+ progress.style.visibility = null;
+ });
+ }
+
+ await document.l10n.translateElements(l10nElements);
+ window.sizeToContent();
+ window.moveTo(
+ (screen.width - window.outerWidth) / 2,
+ (screen.height - window.outerHeight) / 2
+ );
+});