@@ -131,42 +131,17 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
131131 scheme = "mailto" ;
132132
133133 async sendItems ( aRecipients , aItipItem ) {
134- let responseMethod = aItipItem . responseMethod ;
135134 let transport = super . getProperty ( "itip.transport" ) . wrappedJSObject ;
136135 let { subject, body } = transport . _prepareItems ( aItipItem ) ;
137- let serializer = Cc [ "@mozilla.org/calendar/ics-serializer;1" ] . createInstance ( Ci . calIIcsSerializer ) ;
138- let itemList = aItipItem . getItemList ( ) ;
139- serializer . addItems ( itemList , itemList . length ) ;
140- let methodProp = cal . getIcsService ( ) . createIcalProperty ( "METHOD" ) ;
141- methodProp . value = responseMethod ;
142- serializer . addProperty ( methodProp ) ;
143- let icsText = serializer . serializeToString ( ) ;
144- let boundary = Array . from ( { length : 24 } , ( ) => Math . floor ( Math . random ( ) * 16 ) . toString ( 16 ) ) . join ( "" ) ;
145- let headers = new Map ( ) ;
146- headers . set ( "Date" , [ new Date ( ) ] ) ;
147- headers . set ( "Subject" , [ subject ] ) ;
148- headers . set ( "To" , aRecipients . map ( attendee => ( { name : attendee . commonName , email : attendee . id . replace ( / ^ m a i l t o : / , "" ) } ) ) ) ;
149- headers . set ( "Content-Type" , [ "multipart/mixed; boundary=\"" + boundary + "\"" ] ) ;
150- let mimeContent = jsmime . headeremitter . emitStructuredHeaders ( headers , { hardMargin : 800 } ) + "\r\n" ;
151- mimeContent += "--" + boundary + "\r\n" ;
152- mimeContent += "Content-Type: text/plain; charset=UTF-8\r\n\r\n" ;
153- mimeContent += body + "\r\n" ;
154- mimeContent += "--" + boundary + "\r\n" ;
155- mimeContent += "Content-Type: text/calendar; method=" + responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
156- mimeContent += icsText ;
157- mimeContent += "--" + boundary + "\r\n" ;
158- mimeContent += "Content-Type: application/ics; name=\"invite.ics\"\r\nContent-Disposition: attachment; filename=\"invite.ics\"\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
159- mimeContent += icsText ;
160- mimeContent += "--" + boundary + "--\r\n" ;
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 } ) ;
136+ let recipients = aRecipients . map ( attendee => ( { name : attendee . commonName , email : attendee . id . replace ( / ^ m a i l t o : / , "" ) } ) ) ;
137+ let responses = await this . extension . emit ( "calendar.provider.onBeforeSend" , this , aItipItem , { recipients, subject, body } ) ;
163138 for ( let response of responses ) {
164139 if ( response === true ) {
165140 return ;
166141 }
167142 if ( Array . isArray ( response ?. recipients ) ) {
168143 for ( let recipient of response . recipients ) {
169- aRecipients = aRecipients . filter ( attendee => attendee . id . replace ( / ^ m a i l t o : / , "" ) != recipient ) ;
144+ aRecipients = aRecipients . filter ( attendee => attendee . id . replace ( / ^ m a i l t o : / , "" ) != recipient . email ) ;
170145 }
171146 }
172147 }
@@ -509,8 +484,41 @@ this.calendar_provider = class extends ExtensionAPI {
509484 onBeforeSend : new EventManager ( {
510485 context,
511486 name : "calendar.provider.onBeforeSend" ,
512- register : fire => {
513- let listener = ( event , calendar , content ) => {
487+ register : ( fire , options ) => {
488+ let listener = ( event , calendar , itipItem , content ) => {
489+ content . responseMethod = itipItem . responseMethod ;
490+ if ( [ "ics" , "mime" ] . includes ( options ?. returnFormat ) ) {
491+ let serializer = Cc [ "@mozilla.org/calendar/ics-serializer;1" ] . createInstance ( Ci . calIIcsSerializer ) ;
492+ serializer . addItems ( itipItem . getItemList ( ) ) ;
493+ let methodProp = cal . getIcsService ( ) . createIcalProperty ( "METHOD" ) ;
494+ methodProp . value = content . responseMethod ;
495+ serializer . addProperty ( methodProp ) ;
496+ let icsText = serializer . serializeToString ( ) ;
497+ if ( options . returnFormat == "mime" ) {
498+ let boundary = Array . from ( { length : 24 } , ( ) => Math . floor ( Math . random ( ) * 16 ) . toString ( 16 ) ) . join ( "" ) ;
499+ let headers = new Map ( ) ;
500+ headers . set ( "Date" , [ new Date ( ) ] ) ;
501+ headers . set ( "Subject" , [ content . subject ] ) ;
502+ headers . set ( "To" , content . recipients ) ;
503+ headers . set ( "Content-Type" , [ "multipart/mixed; boundary=\"" + boundary + "\"" ] ) ;
504+ let mimeContent = jsmime . headeremitter . emitStructuredHeaders ( headers , { hardMargin : 800 } ) + "\r\n" ;
505+ mimeContent += "--" + boundary + "\r\n" ;
506+ mimeContent += "Content-Type: text/plain; charset=UTF-8\r\n\r\n" ;
507+ mimeContent += content . body + "\r\n" ;
508+ mimeContent += "--" + boundary + "\r\n" ;
509+ mimeContent += "Content-Type: text/calendar; method=" + content . responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
510+ mimeContent += icsText ;
511+ mimeContent += "--" + boundary + "\r\n" ;
512+ mimeContent += "Content-Type: application/ics; name=\"invite.ics\"\r\nContent-Disposition: attachment; filename=\"invite.ics\"\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
513+ mimeContent += icsText ;
514+ mimeContent += "--" + boundary + "--\r\n" ;
515+ content . mimeContent = mimeContent ;
516+ } else {
517+ content . icsText = icsText ;
518+ }
519+ } else {
520+ content . items = itipItem . getItemList ( ) . map ( item => convertItem ( item , options , context . extension ) ) ;
521+ }
514522 return fire . async ( convertCalendar ( context . extension , calendar ) , content ) ;
515523 } ;
516524
0 commit comments