Skip to content

Commit d74ab49

Browse files
committed
Switch to onBeforeSend approach
1 parent cab2185 commit d74ab49

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

calendar/experiments/calendar/parent/ext-calendar-provider.js

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
118118
case "requiresNetwork":
119119
return !(this.capabilities.requires_network === false);
120120
case "itip.transport":
121-
if (this.extension.emitter.has("calendar.provider.onSend")) {
121+
if (this.extension.emitter.has("calendar.provider.onBeforeSend")) {
122122
return this;
123123
}
124124
break;
@@ -130,14 +130,14 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
130130
scheme = "mailto";
131131

132132
async sendItems(aRecipients, aItipItem) {
133-
let method = aItipItem.responseMethod;
133+
let responseMethod = aItipItem.responseMethod;
134134
let transport = super.getProperty("itip.transport").wrappedJSObject;
135135
let { subject, body } = transport._prepareItems(aItipItem);
136136
let serializer = Cc["@mozilla.org/calendar/ics-serializer;1"].createInstance(Ci.calIIcsSerializer);
137137
let itemList = aItipItem.getItemList();
138138
serializer.addItems(itemList, itemList.length);
139139
let methodProp = cal.getIcsService().createIcalProperty("METHOD");
140-
methodProp.value = method;
140+
methodProp.value = responseMethod;
141141
serializer.addProperty(methodProp);
142142
let icsText = serializer.serializeToString();
143143
let boundary = Array.from({ length: 24 }, () => Math.floor(Math.random() * 16).toString(16)).join("");
@@ -151,13 +151,27 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
151151
mimeContent += "Content-Type: text/plain; charset=UTF-8\r\n\r\n";
152152
mimeContent += body + "\r\n";
153153
mimeContent += "--" + boundary + "\r\n";
154-
mimeContent += "Content-Type: text/calendar; method=" + aItipItem.responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n";
154+
mimeContent += "Content-Type: text/calendar; method=" + responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n";
155155
mimeContent += icsText;
156156
mimeContent += "--" + boundary + "\r\n";
157157
mimeContent += "Content-Type: application/ics; name=\"invite.ics\"\r\nContent-Disposition: attachment; filename=\"invite.ics\"\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n";
158158
mimeContent += icsText;
159159
mimeContent += "--" + boundary + "--\r\n";
160-
await this.extension.emit("calendar.provider.onSend", this, mimeContent, aRecipients.map(attendee => attendee.id.replace(/^mailto:/, "")));
160+
let recipients = aRecipients.map(attendee => attendee.id.replace(/^mailto:/, ""));
161+
let responses = await this.extension.emit("calendar.provider.onBeforeSend", this, { responseMethod, recipients, subject, body, icsText, mimeContent });
162+
for (let response of responses) {
163+
if (response === true) {
164+
return;
165+
}
166+
if (Array.isArray(response?.recipients)) {
167+
for (let recipient of response.recipients) {
168+
aRecipients = aRecipients.filter(attendee => attendee.id.replace(/^mailto:/, "") != recipient);
169+
}
170+
}
171+
}
172+
if (aRecipients.length) {
173+
await transport.sendItems(aRecipients, aItipItem);
174+
}
161175
}
162176

163177
addItem(aItem, aListener) {
@@ -449,17 +463,17 @@ this.calendar_provider = class extends ExtensionAPI {
449463
},
450464
}).api(),
451465

452-
onSend: new EventManager({
466+
onBeforeSend: new EventManager({
453467
context,
454-
name: "calendar.provider.onSend",
468+
name: "calendar.provider.onBeforeSend",
455469
register: fire => {
456470
let listener = (event, calendar, content) => {
457471
return fire.async(convertCalendar(context.extension, calendar), content);
458472
};
459473

460-
context.extension.on("calendar.provider.onSend", listener);
474+
context.extension.on("calendar.provider.onBeforeSend", listener);
461475
return () => {
462-
context.extension.off("calendar.provider.onSend", listener);
476+
context.extension.off("calendar.provider.onBeforeSend", listener);
463477
};
464478
},
465479
}).api(),

calendar/experiments/calendar/schema/calendar-provider.json

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,22 @@
8888
]
8989
},
9090
{
91-
"name": "onSend",
91+
"name": "onBeforeSend",
9292
"type": "function",
9393
"parameters": [
9494
{ "name": "calendar", "$ref": "calendar.calendars.Calendar" },
95-
{ "name": "mimeContent", "type": "string" }
95+
{
96+
"name": "mimeContent",
97+
"type": "object",
98+
"properties": {
99+
"responseMethod": { "type": "string" },
100+
"recipients": { "type": "array", "items": { "type": "string" } },
101+
"subject": { "type": "string" },
102+
"body": { "type": "string" },
103+
"icsText": { "type": "string" },
104+
"mimeContent": { "type": "string" }
105+
}
106+
}
96107
]
97108
}
98109
]

0 commit comments

Comments
 (0)