summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/content/calendar-statusbar.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/base/content/calendar-statusbar.js')
-rw-r--r--comm/calendar/base/content/calendar-statusbar.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/comm/calendar/base/content/calendar-statusbar.js b/comm/calendar/base/content/calendar-statusbar.js
new file mode 100644
index 0000000000..8d463ffc67
--- /dev/null
+++ b/comm/calendar/base/content/calendar-statusbar.js
@@ -0,0 +1,110 @@
+/* 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 { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm");
+
+/* exported gCalendarStatusFeedback */
+
+/**
+ * This code might change soon if we support Thunderbird's activity manager.
+ * NOTE: The naming "Meteors" is historical.
+ */
+var gCalendarStatusFeedback = {
+ mCalendarStep: 0,
+ mCalendarCount: 0,
+ mWindow: null,
+ mStatusText: null,
+ mStatusBar: null,
+ mStatusProgressPanel: null,
+ mThrobber: null,
+ mProgressMode: Ci.calIStatusObserver.NO_PROGRESS,
+ mCurIndex: 0,
+ mInitialized: false,
+ mCalendars: {},
+
+ QueryInterface: ChromeUtils.generateQI(["calIStatusObserver"]),
+
+ initialize(aWindow) {
+ if (!this.mInitialized) {
+ this.mWindow = aWindow;
+ this.mStatusText = this.mWindow.document.getElementById("statusText");
+ this.mStatusBar = this.mWindow.document.getElementById("statusbar-icon");
+ this.mStatusProgressPanel = this.mWindow.document.getElementById("statusbar-progresspanel");
+ this.mThrobber = this.mWindow.document.getElementById("navigator-throbber");
+ this.mInitialized = true;
+ }
+ },
+
+ showStatusString(status) {
+ this.mStatusText.setAttribute("label", status);
+ },
+
+ get spinning() {
+ return this.mProgressMode;
+ },
+
+ startMeteors(aProgressMode, aCalendarCount) {
+ if (aProgressMode != Ci.calIStatusObserver.NO_PROGRESS) {
+ if (!this.mInitialized) {
+ console.error("StatusObserver has not been initialized!");
+ return;
+ }
+ this.mCalendars = {};
+ this.mCurIndex = 0;
+ if (aCalendarCount) {
+ this.mCalendarCount = this.mCalendarCount + aCalendarCount;
+ this.mCalendarStep = Math.trunc(100 / this.mCalendarCount);
+ }
+ this.mProgressMode = aProgressMode;
+ this.mStatusProgressPanel.removeAttribute("collapsed");
+ if (this.mProgressMode == Ci.calIStatusObserver.DETERMINED_PROGRESS) {
+ this.mStatusBar.value = 0;
+ let commonStatus = cal.l10n.getCalString("gettingCalendarInfoCommon");
+ this.showStatusString(commonStatus);
+ }
+ if (this.mThrobber) {
+ this.mThrobber.setAttribute("busy", true);
+ }
+ }
+ },
+
+ stopMeteors() {
+ if (!this.mInitialized) {
+ return;
+ }
+ if (this.spinning != Ci.calIStatusObserver.NO_PROGRESS) {
+ this.mProgressMode = Ci.calIStatusObserver.NO_PROGRESS;
+ this.mStatusProgressPanel.collapsed = true;
+ this.mStatusBar.value = 0;
+ this.mCalendarCount = 0;
+ this.showStatusString("");
+ if (this.mThrobber) {
+ this.mThrobber.setAttribute("busy", false);
+ }
+ }
+ },
+
+ calendarCompleted(aCalendar) {
+ if (!this.mInitialized) {
+ return;
+ }
+ if (this.spinning != Ci.calIStatusObserver.NO_PROGRESS) {
+ if (this.spinning == Ci.calIStatusObserver.DETERMINED_PROGRESS) {
+ if (!this.mCalendars[aCalendar.id] || this.mCalendars[aCalendar.id] === undefined) {
+ this.mCalendars[aCalendar.id] = true;
+ this.mStatusBar.value = parseInt(this.mStatusBar.value, 10) + this.mCalendarStep;
+ this.mCurIndex++;
+ let curStatus = cal.l10n.getCalString("gettingCalendarInfoDetail", [
+ this.mCurIndex,
+ this.mCalendarCount,
+ ]);
+ this.showStatusString(curStatus);
+ }
+ }
+ if (this.mThrobber) {
+ this.mThrobber.setAttribute("busy", true);
+ }
+ }
+ },
+};