@@ -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 ( / ^ m a i l t o : / , "" ) ) ) ;
147+ let recipients = aRecipients . map ( attendee => attendee . id . replace ( / ^ m a i l t o : / , "" ) ) ;
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 ( / ^ m a i l t o : / , "" ) != 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 ( ) ,
0 commit comments