/* 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; }, };