summaryrefslogtreecommitdiff
path: root/calendar/base/src/calTimezone.js
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/base/src/calTimezone.js')
-rw-r--r--calendar/base/src/calTimezone.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/calendar/base/src/calTimezone.js b/calendar/base/src/calTimezone.js
new file mode 100644
index 000000000..ac88d511c
--- /dev/null
+++ b/calendar/base/src/calTimezone.js
@@ -0,0 +1,109 @@
+/* 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/. */
+
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+Components.utils.import("resource://calendar/modules/calUtils.jsm");
+Components.utils.import("resource://calendar/modules/ical.js");
+
+function calICALJSTimezone(innerObject) {
+ this.innerObject = innerObject || new ICAL.Timezone();
+ this.wrappedJSObject = this;
+}
+
+var calTimezoneInterfaces = [Components.interfaces.calITimezone];
+var calTimezoneClassID = Components.ID("{6702eb17-a968-4b43-b562-0d0c5f8e9eb5}");
+calICALJSTimezone.prototype = {
+ QueryInterface: XPCOMUtils.generateQI(calTimezoneInterfaces),
+ classID: calTimezoneClassID,
+ classInfo: XPCOMUtils.generateCI({
+ contractID: "@mozilla.org/calendar/timezone;1",
+ classDescription: "Calendar Timezone",
+ classID: calTimezoneClassID,
+ interfaces: calTimezoneInterfaces
+ }),
+
+ innerObject: null,
+
+ get provider() { return cal.getTimezoneService(); },
+ get icalComponent() {
+ let innerComp = this.innerObject.component;
+ let comp = null;
+ if (innerComp) {
+ comp = cal.getIcsService().createIcalComponent("VTIMEZONE");
+ comp.icalComponent = innerComp;
+ }
+ return comp;
+ },
+ get tzid() { return this.innerObject.tzid; },
+ get isFloating() { return this.innerObject == ICAL.Timezone.localTimezone; },
+ get isUTC() { return this.innerObject == ICAL.Timezone.utcTimezone; },
+ get latitude() { return this.innerObject.latitude; },
+ get longitude() { return this.innerObject.longitude; },
+ get displayName() {
+ let bundle = ICAL.Timezone.cal_tz_bundle;
+ let stringName = "pref.timezone." + this.tzid.replace(/\//g, ".");
+ let displayName = this.tzid;
+ try {
+ displayName = bundle.GetStringFromName(stringName);
+ } catch (e) {
+ // Just use the TZID if the string is mising.
+ }
+ this.__defineGetter__("displayName", () => {
+ return displayName;
+ });
+ return displayName;
+ },
+
+ tostring: function() { return this.innerObject.toString(); }
+};
+
+function calLibicalTimezone(tzid, component, latitude, longitude) {
+ this.wrappedJSObject = this;
+ this.tzid = tzid;
+ this.mComponent = component;
+ this.mUTC = false;
+ this.isFloating = false;
+ this.latitude = latitude;
+ this.longitude = longitude;
+}
+calLibicalTimezone.prototype = {
+ QueryInterface: XPCOMUtils.generateQI(calTimezoneInterfaces),
+ classID: calTimezoneClassID,
+ classInfo: XPCOMUtils.generateCI({
+ contractID: "@mozilla.org/calendar/timezone;1",
+ classDescription: "Calendar Timezone",
+ classID: calTimezoneClassID,
+ interfaces: calTimezoneInterfaces
+ }),
+
+ toString: function() {
+ return (this.icalComponent ? this.icalComponent.toString() : this.tzid);
+ },
+
+ get isUTC() { return this.mUTC; },
+
+ get icalComponent() {
+ let comp = this.mComponent;
+ if (comp && (typeof comp == "string")) {
+ this.mComponent = cal.getIcsService().parseICS("BEGIN:VCALENDAR\r\n" + comp + "\r\nEND:VCALENDAR\r\n", null)
+ .getFirstSubcomponent("VTIMEZONE");
+ }
+ return this.mComponent;
+ },
+
+ get displayName() {
+ if (this.mDisplayName === undefined) {
+ try {
+ this.mDisplayName = g_stringBundle.GetStringFromName("pref.timezone." + this.tzid.replace(/\//g, "."));
+ } catch (exc) {
+ // don't assert here, but gracefully fall back to TZID:
+ cal.LOG("Timezone property lookup failed! Falling back to " + this.tzid + "\n" + exc);
+ this.mDisplayName = this.tzid;
+ }
+ }
+ return this.mDisplayName;
+ },
+
+ get provider() { return cal.getTimezoneService(); }
+};