Revision control

Copy as Markdown

Other Tools

/* 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/. */
export function CalIcsSerializer() {
this.wrappedJSObject = this;
this.mItems = [];
this.mProperties = [];
this.mComponents = [];
}
CalIcsSerializer.prototype = {
QueryInterface: ChromeUtils.generateQI(["calIIcsSerializer"]),
classID: Components.ID("{207a6682-8ff1-4203-9160-729ec28c8766}"),
addItems(aItems) {
if (aItems.length > 0) {
this.mItems = this.mItems.concat(aItems);
}
},
addProperty(aProperty) {
this.mProperties.push(aProperty);
},
addComponent(aComponent) {
this.mComponents.push(aComponent);
},
serializeToString() {
const calComp = this.getIcalComponent();
return calComp.serializeToICS();
},
serializeToInputStream() {
const calComp = this.getIcalComponent();
return calComp.serializeToICSStream();
},
serializeToStream(aStream) {
const str = this.serializeToString();
// Convert the javascript string to an array of bytes, using the
// UTF8 encoder
const convStream = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(
Ci.nsIConverterOutputStream
);
convStream.init(aStream, "UTF-8");
convStream.writeString(str);
convStream.close();
},
getIcalComponent() {
const calComp = cal.icsService.createIcalComponent("VCALENDAR");
cal.item.setStaticProps(calComp);
// xxx todo: think about that the below code doesn't clone the properties/components,
// thus ownership is moved to returned VCALENDAR...
for (const prop of this.mProperties) {
calComp.addProperty(prop);
}
for (const comp of this.mComponents) {
calComp.addSubcomponent(comp);
}
for (const item of cal.iterate.items(this.mItems)) {
calComp.addSubcomponent(item.icalComponent);
}
return calComp;
},
};