1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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;
},
};
|