@@ -130,42 +130,17 @@ class ExtCalendarProvider extends cal.provider.BaseClass {
130130 scheme = "mailto" ;
131131
132132 async sendItems ( aRecipients , aItipItem ) {
133- let responseMethod = aItipItem . responseMethod ;
134133 let transport = super . getProperty ( "itip.transport" ) . wrappedJSObject ;
135134 let { subject, body } = transport . _prepareItems ( aItipItem ) ;
136- let serializer = Cc [ "@mozilla.org/calendar/ics-serializer;1" ] . createInstance ( Ci . calIIcsSerializer ) ;
137- let itemList = aItipItem . getItemList ( ) ;
138- serializer . addItems ( itemList , itemList . length ) ;
139- let methodProp = cal . getIcsService ( ) . createIcalProperty ( "METHOD" ) ;
140- methodProp . value = responseMethod ;
141- serializer . addProperty ( methodProp ) ;
142- let icsText = serializer . serializeToString ( ) ;
143- let boundary = Array . from ( { length : 24 } , ( ) => Math . floor ( Math . random ( ) * 16 ) . toString ( 16 ) ) . join ( "" ) ;
144- let headers = new Map ( ) ;
145- headers . set ( "Date" , [ new Date ( ) ] ) ;
146- headers . set ( "Subject" , [ subject ] ) ;
147- headers . set ( "To" , aRecipients . map ( attendee => ( { name : attendee . commonName , email : attendee . id . replace ( / ^ m a i l t o : / , "" ) } ) ) ) ;
148- headers . set ( "Content-Type" , [ "multipart/mixed; boundary=\"" + boundary + "\"" ] ) ;
149- let mimeContent = jsmime . headeremitter . emitStructuredHeaders ( headers , { hardMargin : 800 } ) + "\r\n" ;
150- mimeContent += "--" + boundary + "\r\n" ;
151- mimeContent += "Content-Type: text/plain; charset=UTF-8\r\n\r\n" ;
152- mimeContent += body + "\r\n" ;
153- mimeContent += "--" + boundary + "\r\n" ;
154- mimeContent += "Content-Type: text/calendar; method=" + responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
155- mimeContent += icsText ;
156- mimeContent += "--" + boundary + "\r\n" ;
157- mimeContent += "Content-Type: application/ics; name=\"invite.ics\"\r\nContent-Disposition: attachment; filename=\"invite.ics\"\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
158- mimeContent += icsText ;
159- mimeContent += "--" + boundary + "--\r\n" ;
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 } ) ;
135+ let recipients = aRecipients . map ( attendee => ( { name : attendee . commonName , email : attendee . id . replace ( / ^ m a i l t o : / , "" ) } ) ) ;
136+ let responses = await this . extension . emit ( "calendar.provider.onBeforeSend" , this , aItipItem , { recipients, subject, body } ) ;
162137 for ( let response of responses ) {
163138 if ( response === true ) {
164139 return ;
165140 }
166141 if ( Array . isArray ( response ?. recipients ) ) {
167142 for ( let recipient of response . recipients ) {
168- aRecipients = aRecipients . filter ( attendee => attendee . id . replace ( / ^ m a i l t o : / , "" ) != recipient ) ;
143+ aRecipients = aRecipients . filter ( attendee => attendee . id . replace ( / ^ m a i l t o : / , "" ) != recipient . email ) ;
169144 }
170145 }
171146 }
@@ -466,8 +441,41 @@ this.calendar_provider = class extends ExtensionAPI {
466441 onBeforeSend : new EventManager ( {
467442 context,
468443 name : "calendar.provider.onBeforeSend" ,
469- register : fire => {
470- let listener = ( event , calendar , content ) => {
444+ register : ( fire , options ) => {
445+ let listener = ( event , calendar , itipItem , content ) => {
446+ content . responseMethod = itipItem . responseMethod ;
447+ if ( [ "ics" , "mime" ] . includes ( options ?. returnFormat ) ) {
448+ let serializer = Cc [ "@mozilla.org/calendar/ics-serializer;1" ] . createInstance ( Ci . calIIcsSerializer ) ;
449+ serializer . addItems ( itipItem . getItemList ( ) ) ;
450+ let methodProp = cal . getIcsService ( ) . createIcalProperty ( "METHOD" ) ;
451+ methodProp . value = content . responseMethod ;
452+ serializer . addProperty ( methodProp ) ;
453+ let icsText = serializer . serializeToString ( ) ;
454+ if ( options . returnFormat == "mime" ) {
455+ let boundary = Array . from ( { length : 24 } , ( ) => Math . floor ( Math . random ( ) * 16 ) . toString ( 16 ) ) . join ( "" ) ;
456+ let headers = new Map ( ) ;
457+ headers . set ( "Date" , [ new Date ( ) ] ) ;
458+ headers . set ( "Subject" , [ content . subject ] ) ;
459+ headers . set ( "To" , content . recipients ) ;
460+ headers . set ( "Content-Type" , [ "multipart/mixed; boundary=\"" + boundary + "\"" ] ) ;
461+ let mimeContent = jsmime . headeremitter . emitStructuredHeaders ( headers , { hardMargin : 800 } ) + "\r\n" ;
462+ mimeContent += "--" + boundary + "\r\n" ;
463+ mimeContent += "Content-Type: text/plain; charset=UTF-8\r\n\r\n" ;
464+ mimeContent += content . body + "\r\n" ;
465+ mimeContent += "--" + boundary + "\r\n" ;
466+ mimeContent += "Content-Type: text/calendar; method=" + content . responseMethod + "; charset=UTF-8\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
467+ mimeContent += icsText ;
468+ mimeContent += "--" + boundary + "\r\n" ;
469+ mimeContent += "Content-Type: application/ics; name=\"invite.ics\"\r\nContent-Disposition: attachment; filename=\"invite.ics\"\r\nContent-Transfer-Encoding: 8BIT\r\n\r\n" ;
470+ mimeContent += icsText ;
471+ mimeContent += "--" + boundary + "--\r\n" ;
472+ content . mimeContent = mimeContent ;
473+ } else {
474+ content . icsText = icsText ;
475+ }
476+ } else {
477+ content . items = itipItem . getItemList ( ) . map ( item => convertItem ( item , options , context . extension ) ) ;
478+ }
471479 return fire . async ( convertCalendar ( context . extension , calendar ) , content ) ;
472480 } ;
473481
0 commit comments