Skip to content

Commit 6212d38

Browse files
committed
Switch to onBeforeSend approach
1 parent fb5abd3 commit 6212d38

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
@@ -119,7 +119,7 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
119119
case "requiresNetwork":
120120
return !(this.capabilities.requires_network === false);
121121
case "itip.transport":
122-
if (this.extension.emitter.has("calendar.provider.onSend")) {
122+
if (this.extension.emitter.has("calendar.provider.onBeforeSend")) {
123123
return this;
124124
}
125125
break;
@@ -131,14 +131,14 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
131131
scheme = "mailto";
132132

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

164178
addItem(aItem, aListener) {
@@ -492,17 +506,17 @@ this.calendar_provider = class extends ExtensionAPI {
492506
},
493507
}).api(),
494508

495-
onSend: new EventManager({
509+
onBeforeSend: new EventManager({
496510
context,
497-
name: "calendar.provider.onSend",
511+
name: "calendar.provider.onBeforeSend",
498512
register: fire => {
499513
let listener = (event, calendar, content) => {
500514
return fire.async(convertCalendar(context.extension, calendar), content);
501515
};
502516

503-
context.extension.on("calendar.provider.onSend", listener);
517+
context.extension.on("calendar.provider.onBeforeSend", listener);
504518
return () => {
505-
context.extension.off("calendar.provider.onSend", listener);
519+
context.extension.off("calendar.provider.onBeforeSend", listener);
506520
};
507521
},
508522
}).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)