Skip to content

Commit 049af1b

Browse files
committed
Switch to onBeforeSend approach
1 parent f922376 commit 049af1b

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

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

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
105105
case "requiresNetwork":
106106
return !(this.capabilities.requires_network === false);
107107
case "itip.transport":
108-
if (this.extension.emitter.has("calendar.provider.onSend")) {
108+
if (this.extension.emitter.has("calendar.provider.onBeforeSend")) {
109109
return this;
110110
}
111111
break;
@@ -117,14 +117,14 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
117117
scheme = "mailto";
118118

119119
async sendItems(aRecipients, aItipItem) {
120-
let method = aItipItem.responseMethod;
120+
let responseMethod = aItipItem.responseMethod;
121121
let transport = super.getProperty("itip.transport").wrappedJSObject;
122122
let { subject, body } = transport._prepareItems(aItipItem);
123123
let serializer = Cc["@mozilla.org/calendar/ics-serializer;1"].createInstance(Ci.calIIcsSerializer);
124124
let itemList = aItipItem.getItemList();
125125
serializer.addItems(itemList, itemList.length);
126126
let methodProp = cal.getIcsService().createIcalProperty("METHOD");
127-
methodProp.value = method;
127+
methodProp.value = responseMethod;
128128
serializer.addProperty(methodProp);
129129
let icsText = serializer.serializeToString();
130130
let boundary = Array.from({ length: 24 }, () => Math.floor(Math.random() * 16).toString(16)).join("");
@@ -138,13 +138,27 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
138138
mimeContent += "Content-Type: text/plain; charset=UTF-8\r\n\r\n";
139139
mimeContent += body + "\r\n";
140140
mimeContent += "--" + boundary + "\r\n";
141-
mimeContent += "Content-Type: text/calendar; method=" + aItipItem.responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n";
141+
mimeContent += "Content-Type: text/calendar; method=" + responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n";
142142
mimeContent += icsText;
143143
mimeContent += "--" + boundary + "\r\n";
144144
mimeContent += "Content-Type: application/ics; name=\"invite.ics\"\r\nContent-Disposition: attachment; filename=\"invite.ics\"\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n";
145145
mimeContent += icsText;
146146
mimeContent += "--" + boundary + "--\r\n";
147-
await this.extension.emit("calendar.provider.onSend", this, mimeContent, aRecipients.map(attendee => attendee.id.replace(/^mailto:/, "")));
147+
let recipients = aRecipients.map(attendee => attendee.id.replace(/^mailto:/, ""));
148+
let responses = await this.extension.emit("calendar.provider.onBeforeSend", this, { responseMethod, recipients, subject, body, icsText, mimeContent });
149+
for (let response of responses) {
150+
if (response === true) {
151+
return;
152+
}
153+
if (Array.isArray(response?.recipients)) {
154+
for (let recipient of response.recipients) {
155+
aRecipients = aRecipients.filter(attendee => attendee.id.replace(/^mailto:/, "") != recipient);
156+
}
157+
}
158+
}
159+
if (aRecipients.length) {
160+
await transport.sendItems(aRecipients, aItipItem);
161+
}
148162
}
149163

150164
addItem(aItem, aListener) {
@@ -448,17 +462,17 @@ this.calendar_provider = class extends ExtensionAPI {
448462
},
449463
}).api(),
450464

451-
onSend: new EventManager({
465+
onBeforeSend: new EventManager({
452466
context,
453-
name: "calendar.provider.onSend",
467+
name: "calendar.provider.onBeforeSend",
454468
register: fire => {
455469
let listener = (event, calendar, content) => {
456470
return fire.async(convertCalendar(context.extension, calendar), content);
457471
};
458472

459-
context.extension.on("calendar.provider.onSend", listener);
473+
context.extension.on("calendar.provider.onBeforeSend", listener);
460474
return () => {
461-
context.extension.off("calendar.provider.onSend", listener);
475+
context.extension.off("calendar.provider.onBeforeSend", listener);
462476
};
463477
},
464478
}).api(),

calendar/api/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)