summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/src/CalRelation.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/base/src/CalRelation.jsm')
-rw-r--r--comm/calendar/base/src/CalRelation.jsm125
1 files changed, 125 insertions, 0 deletions
diff --git a/comm/calendar/base/src/CalRelation.jsm b/comm/calendar/base/src/CalRelation.jsm
new file mode 100644
index 0000000000..78327d962c
--- /dev/null
+++ b/comm/calendar/base/src/CalRelation.jsm
@@ -0,0 +1,125 @@
+/* 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 EXPORTED_SYMBOLS = ["CalRelation"];
+
+var { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm");
+
+/**
+ * Constructor for `calIRelation` objects.
+ *
+ * @class
+ * @implements {calIRelation}
+ * @param {string} [icalString] - Optional iCal string for initializing existing relations.
+ */
+function CalRelation(icalString) {
+ this.wrappedJSObject = this;
+ this.mProperties = new Map();
+ if (icalString) {
+ this.icalString = icalString;
+ }
+}
+CalRelation.prototype = {
+ QueryInterface: ChromeUtils.generateQI(["calIRelation"]),
+ classID: Components.ID("{76810fae-abad-4019-917a-08e95d5bbd68}"),
+
+ mType: null,
+ mId: null,
+
+ /**
+ * @see calIRelation
+ */
+
+ get relType() {
+ return this.mType;
+ },
+ set relType(aType) {
+ this.mType = aType;
+ },
+
+ get relId() {
+ return this.mId;
+ },
+ set relId(aRelId) {
+ this.mId = aRelId;
+ },
+
+ get icalProperty() {
+ let icalatt = cal.icsService.createIcalProperty("RELATED-TO");
+ if (this.mId) {
+ icalatt.value = this.mId;
+ }
+
+ if (this.mType) {
+ icalatt.setParameter("RELTYPE", this.mType);
+ }
+
+ for (let [key, value] of this.mProperties.entries()) {
+ try {
+ icalatt.setParameter(key, value);
+ } catch (e) {
+ if (e.result == Cr.NS_ERROR_ILLEGAL_VALUE) {
+ // Illegal values should be ignored, but we could log them if
+ // the user has enabled logging.
+ cal.LOG("Warning: Invalid relation property value " + key + "=" + value);
+ } else {
+ throw e;
+ }
+ }
+ }
+ return icalatt;
+ },
+
+ set icalProperty(attProp) {
+ // Reset the property bag for the parameters, it will be re-initialized
+ // from the ical property.
+ this.mProperties = new Map();
+
+ if (attProp.value) {
+ this.mId = attProp.value;
+ }
+ for (let [name, value] of cal.iterate.icalParameter(attProp)) {
+ if (name == "RELTYPE") {
+ this.mType = value;
+ continue;
+ }
+
+ this.setParameter(name, value);
+ }
+ },
+
+ get icalString() {
+ let comp = this.icalProperty;
+ return comp ? comp.icalString : "";
+ },
+ set icalString(val) {
+ let prop = cal.icsService.createIcalPropertyFromString(val);
+ if (prop.propertyName != "RELATED-TO") {
+ throw Components.Exception("", Cr.NS_ERROR_ILLEGAL_VALUE);
+ }
+ this.icalProperty = prop;
+ },
+
+ getParameter(aName) {
+ return this.mProperties.get(aName);
+ },
+
+ setParameter(aName, aValue) {
+ return this.mProperties.set(aName, aValue);
+ },
+
+ deleteParameter(aName) {
+ return this.mProperties.delete(aName);
+ },
+
+ clone() {
+ let newRelation = new CalRelation();
+ newRelation.mId = this.mId;
+ newRelation.mType = this.mType;
+ for (let [name, value] of this.mProperties.entries()) {
+ newRelation.mProperties.set(name, value);
+ }
+ return newRelation;
+ },
+};