summaryrefslogtreecommitdiffstats
path: root/comm/calendar/base/src/CalIcsSerializer.jsm
diff options
context:
space:
mode:
Diffstat (limited to 'comm/calendar/base/src/CalIcsSerializer.jsm')
-rw-r--r--comm/calendar/base/src/CalIcsSerializer.jsm77
1 files changed, 77 insertions, 0 deletions
diff --git a/comm/calendar/base/src/CalIcsSerializer.jsm b/comm/calendar/base/src/CalIcsSerializer.jsm
new file mode 100644
index 0000000000..ebdf84f9e7
--- /dev/null
+++ b/comm/calendar/base/src/CalIcsSerializer.jsm
@@ -0,0 +1,77 @@
+/* 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 = ["CalIcsSerializer"];
+
+var { cal } = ChromeUtils.import("resource:///modules/calendar/calUtils.jsm");
+
+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() {
+ let calComp = this.getIcalComponent();
+ return calComp.serializeToICS();
+ },
+
+ serializeToInputStream(aStream) {
+ let calComp = this.getIcalComponent();
+ return calComp.serializeToICSStream();
+ },
+
+ serializeToStream(aStream) {
+ let str = this.serializeToString();
+
+ // Convert the javascript string to an array of bytes, using the
+ // UTF8 encoder
+ let convStream = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(
+ Ci.nsIConverterOutputStream
+ );
+ convStream.init(aStream, "UTF-8");
+
+ convStream.writeString(str);
+ convStream.close();
+ },
+
+ getIcalComponent() {
+ let 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 (let prop of this.mProperties) {
+ calComp.addProperty(prop);
+ }
+ for (let comp of this.mComponents) {
+ calComp.addSubcomponent(comp);
+ }
+
+ for (let item of cal.iterate.items(this.mItems)) {
+ calComp.addSubcomponent(item.icalComponent);
+ }
+
+ return calComp;
+ },
+};