111 строки
3.5 KiB
JavaScript
111 строки
3.5 KiB
JavaScript
/* 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) {
|
|
Cu.reportError("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);
|
|
}
|
|
}
|
|
},
|
|
};
|