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