diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/calendar/base/content/dialogs/calendar-migration-dialog.js | |
parent | Initial commit. (diff) | |
download | thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/calendar/base/content/dialogs/calendar-migration-dialog.js')
-rw-r--r-- | comm/calendar/base/content/dialogs/calendar-migration-dialog.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/comm/calendar/base/content/dialogs/calendar-migration-dialog.js b/comm/calendar/base/content/dialogs/calendar-migration-dialog.js new file mode 100644 index 0000000000..bac1cd8fec --- /dev/null +++ b/comm/calendar/base/content/dialogs/calendar-migration-dialog.js @@ -0,0 +1,113 @@ +/* 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/. */ + +window.addEventListener("DOMContentLoaded", event => { + gMigrateWizard.loadMigrators(); +}); + +var gMigrateWizard = { + /** + * Called from onload of the migrator window. Takes all of the migrators + * that were passed in via window.arguments and adds them to checklist. The + * user can then check these off to migrate the data from those sources. + */ + loadMigrators() { + let wizardPage2 = document.getElementById("wizardPage2"); + wizardPage2.addEventListener("pageshow", gMigrateWizard.migrateChecked); + + let listbox = document.getElementById("datasource-list"); + + // XXX Once we have branding for lightning, this hack can go away + let props = Services.strings.createBundle("chrome://calendar/locale/migration.properties"); + + let wizard = document.querySelector("wizard"); + let desc = document.getElementById("wizard-desc"); + // Since we don't translate "Lightning"... + wizard.title = props.formatStringFromName("migrationTitle", ["Lightning"]); + desc.textContent = props.formatStringFromName("migrationDescription", ["Lightning"]); + + console.debug("migrators: " + window.arguments.length); + for (let migrator of window.arguments[0]) { + let checkbox = document.createXULElement("checkbox"); + checkbox.setAttribute("checked", true); + checkbox.setAttribute("label", migrator.title); + checkbox.migrator = migrator; + listbox.appendChild(checkbox); + } + }, + + /** + * Called from the second page of the wizard. Finds all of the migrators + * that were checked and begins migrating their data. Also controls the + * progress dialog so the user can see what is happening. (somewhat) + */ + migrateChecked() { + let migrators = []; + + // Get all the checked migrators into an array + let listbox = document.getElementById("datasource-list"); + for (let i = listbox.children.length - 1; i >= 0; i--) { + if (listbox.children[i].getAttribute("checked")) { + migrators.push(listbox.children[i].migrator); + } + } + + // If no migrators were checked, then we're done + if (migrators.length == 0) { + window.close(); + } + + // Don't let the user get away while we're migrating + // XXX may want to wire this into the 'cancel' function once that's + // written + let wizard = document.querySelector("wizard"); + wizard.canAdvance = false; + wizard.canRewind = false; + + // We're going to need this for the progress meter's description + let props = Services.strings.createBundle("chrome://calendar/locale/migration.properties"); + let label = document.getElementById("progress-label"); + let meter = document.getElementById("migrate-progressmeter"); + + let i = 0; + // Because some of our migrators involve async code, we need this + // call-back function so we know when to start the next migrator. + function getNextMigrator() { + if (migrators[i]) { + let mig = migrators[i]; + + // Increment i to point to the next migrator + i++; + console.debug("starting migrator: " + mig.title); + label.value = props.formatStringFromName("migratingApp", [mig.title]); + meter.value = ((i - 1) / migrators.length) * 100; + mig.args.push(getNextMigrator); + + try { + mig.migrate(...mig.args); + } catch (e) { + console.debug("Failed to migrate: " + mig.title); + console.debug(e); + getNextMigrator(); + } + } else { + console.debug("migration done"); + wizard.canAdvance = true; + label.value = props.GetStringFromName("finished"); + meter.value = 100; + gMigrateWizard.setCanRewindFalse(); + } + } + + // And get the first migrator + getNextMigrator(); + }, + + /** + * Makes sure the wizard "back" button can not be pressed. + */ + setCanRewindFalse() { + document.querySelector("wizard").canRewind = false; + }, +}; |