diff options
Diffstat (limited to 'comm/calendar/base/content/calendar-statusbar.js')
-rw-r--r-- | comm/calendar/base/content/calendar-statusbar.js | 110 |
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); + } + } + }, +}; |