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