;;;'use strict';(function(exports){var MessageManager={init:function mm_init(){this._mozMobileMessage=navigator.mozMobileMessage;this._mozMobileMessage.addEventListener('received',this.onMessageReceived.bind(this));this._mozMobileMessage.addEventListener('sending',this.onMessageSending.bind(this));this._mozMobileMessage.addEventListener('sent',this.onMessageSent.bind(this));this._mozMobileMessage.addEventListener('failed',this.onMessageFailed.bind(this));this._mozMobileMessage.addEventListener('readsuccess',this.onReadSuccess.bind(this));this._mozMobileMessage.addEventListener('deliverysuccess',this.onDeliverySuccess.bind(this));this._mozMobileMessage.addEventListener('deleted',this.onDeleted.bind(this));},onMessageSending:function mm_onMessageSending(e){Threads.registerMessage(e.message);this.emit('message-sending',{message:e.message});},onMessageFailed:function mm_onMessageFailed(e){this.emit('message-failed-to-send',{message:e.message});},onDeliverySuccess:function mm_onDeliverySuccess(e){this.emit('message-delivered',{message:e.message});},onReadSuccess:function mm_onReadSuccess(e){this.emit('message-read',{message:e.message});},onMessageSent:function mm_onMessageSent(e){this.emit('message-sent',{message:e.message});},onMessageReceived:function mm_onMessageReceived(e){var message=e.message;if(message.messageClass&&message.messageClass==='class-0'){return;} if(message.delivery==='not-downloaded'&&message.deliveryInfo[0].deliveryStatus==='pending'){return;} Threads.registerMessage(message);this.emit('message-received',{message:message});},onDeleted:function(e){if(e.deletedThreadIds&&e.deletedThreadIds.length){this.emit('threads-deleted',{ids:e.deletedThreadIds});}},getThreads:function mm_getThreads(options){var each=options.each;var end=options.end;var done=options.done;var cursor=null;try{cursor=this._mozMobileMessage.getThreads();}catch(e){console.error('Error occurred while retrieving threads:',e.name,e);end&&end();done&&done();return;} cursor.onsuccess=function onsuccess(){if(this.result){each&&each(this.result);this.continue();return;} end&&end();done&&done();};cursor.onerror=function onerror(){console.error('Reading the database. Error: '+this.error.name);done&&done();};},getMessage:function mm_getMsg(id){return this._mozMobileMessage.getMessage(id);},retrieveMMS:function mm_retrieveMMS(id){return this._mozMobileMessage.retrieveMMS(id);},getMessages:function mm_getMgs(options){var each=options.each;var invert=options.invert;var end=options.end;var endArgs=options.endArgs;var done=options.done;var filter=options.filter;var cursor=this._mozMobileMessage.getMessages(filter,!invert);cursor.onsuccess=function onsuccess(){if(!this.done){var shouldContinue=true;if(each){shouldContinue=each(this.result);} if(shouldContinue!==false){this.continue();}else{done&&done();}}else{end&&end(endArgs);done&&done();}};cursor.onerror=function onerror(){var msg='Reading the database. Error: '+this.error.name;console.log(msg);done&&done();};},_sanitizeServiceId:function mm_sanitizeServiceId(serviceId){if(serviceId==null||isNaN(+serviceId)){serviceId=null;}else{serviceId=+serviceId;} return serviceId;},_getSendOptionsFromServiceId:function mm_gSOFSI(serviceId){var sendOpts;if(serviceId!=null&&Settings.hasSeveralSim()){sendOpts={serviceId:serviceId};} return sendOpts;},sendSMS:function mm_send(opts){var recipients=opts.recipients||[],content=opts.content,serviceId=this._sanitizeServiceId(opts.serviceId),onsuccess=opts.onsuccess,onerror=opts.onerror,oncomplete=opts.oncomplete;if(!Array.isArray(recipients)){recipients=[recipients];} var i=0;var requestResult={hasError:false,return:[]};var sendOpts=this._getSendOptionsFromServiceId(serviceId);var requests=this._mozMobileMessage.send(recipients,content,sendOpts);var numberOfRequests=requests.length;requests.forEach(function(request,idx){request.onsuccess=function onSuccess(event){onsuccess&&onsuccess(event.target.result);requestResult.return.push({success:true,result:event.target.result,recipient:recipients[idx]});if(i===numberOfRequests-1){oncomplete&&oncomplete(requestResult);} i++;};request.onerror=function onError(event){console.error('Error Sending: '+JSON.stringify(event.target.error));onerror&&onerror(event.target.error);requestResult.hasError=true;requestResult.return.push({success:false,code:event.target.error,recipient:recipients[idx]});if(i===numberOfRequests-1){oncomplete&&oncomplete(requestResult);} i++;};});},sendMMS:function mm_sendMMS(opts){var request;var recipients=opts.recipients,subject=opts.subject,content=opts.content,serviceId=opts.serviceId=this._sanitizeServiceId(opts.serviceId),onsuccess=opts.onsuccess,onerror=opts.onerror;if(!Array.isArray(recipients)){recipients=[recipients];} var message=SMIL.generate(content);var sendOpts=this._getSendOptionsFromServiceId(serviceId);request=this._mozMobileMessage.sendMMS({receivers:recipients,subject:subject,smil:message.smil,attachments:message.attachments},sendOpts);request.onsuccess=function onSuccess(event){onsuccess&&onsuccess(event.target.result);};request.onerror=function onError(event){onerror&&onerror(event.target.error);};},resendMessage:function mm_resendMessage(opts){var message=opts.message;if(!message){throw new Error('Message to resend is not defined.');} var serviceId=Settings.getServiceIdByIccId(message.iccId);var sendOpts=this._getSendOptionsFromServiceId(serviceId);var onsuccess=opts.onsuccess;var onerror=opts.onerror;var request;if(message.type==='sms'){request=this._mozMobileMessage.send(message.receiver,message.body,sendOpts);} if(message.type==='mms'){request=this._mozMobileMessage.sendMMS({receivers:message.receivers,subject:message.subject,smil:message.smil,attachments:message.attachments},sendOpts);} request.onsuccess=function onSuccess(evt){MessageManager.deleteMessages(message.id);onsuccess&&onsuccess(evt.target.result);};request.onerror=function onError(evt){MessageManager.deleteMessages(message.id);onerror&&onerror(evt.target.error);};},deleteMessages:function mm_deleteMessages(id){return this._mozMobileMessage.delete(id).then(null,(e)=>{console.error(`Deleting in the database. [${e.name}] ${e.message || ''}`);return null;});},markThreadRead:function mm_markThreadRead(threadId,isRead=true){var filter={};filter.threadId=+threadId;filter.read=!isRead;var messagesUnreadIDs=[];var changeStatusOptions={each:function addUnreadMessage(message){messagesUnreadIDs.push(message.id);return true;},filter:filter,invert:true,end:function handleUnread(){MessageManager.markMessagesRead(messagesUnreadIDs,isRead);}};MessageManager.getMessages(changeStatusOptions);},markMessagesRead:function mm_markMessagesRead(list,isRead=true){if(!this._mozMobileMessage||!list.length){return;} var id=list.pop();var req=this._mozMobileMessage.markMessageRead(id,isRead,true);req.onsuccess=(function onsuccess(){if(!list.length||!isRead){return;}else if(isRead){this.markMessagesRead(list,isRead);}}).bind(this);req.onerror=function onerror(){console.error('Error while marking message %d as read: %s',id,this.error.name);};},getSegmentInfo:function mm_getSegmentInfo(text){if(!(this._mozMobileMessage&&this._mozMobileMessage.getSegmentInfoForText)){return Promise.reject(new Error('mozMobileMessage is unavailable.'));} var defer=Utils.Promise.defer();var request=this._mozMobileMessage.getSegmentInfoForText(text);request.onsuccess=function onsuccess(e){defer.resolve(e.target.result);};request.onerror=function onerror(e){defer.reject(e.target.error);};return defer.promise;},_isMessageBelongTo1to1Conversation:function isMessageBelongTo1to1Conversation(number,message){var isIncoming=message.delivery==='received'||message.delivery==='not-downloaded';if(isIncoming){return Utils.probablyMatches(message.sender,number);}else{switch(message.type){case'sms':return Utils.probablyMatches(message.receiver,number);case'mms':return message.receivers.length===1&&Utils.probablyMatches(message.receivers[0],number);default:console.error('Got an unknown message type: '+message.type);return false;}}},findThreadFromNumber:function mm_findThread(number){function checkCandidate(message){var isMessageInThread=MessageManager._isMessageBelongTo1to1Conversation(number,message);if(isMessageInThread){threadId=message.threadId;return false;}} var threadId=null;var deferred=Utils.Promise.defer();MessageManager.getMessages({filter:{numbers:[number]},each:checkCandidate,done:function(){if(threadId==null){deferred.reject(new Error('No thread found for number: '+number));return;}else{deferred.resolve(threadId);return;}}});return deferred.promise;},ensureThreadRegistered(threadId){var getOneMessageForThread=(threadId)=>{var defer=Utils.Promise.defer();this.getMessages({each:function(message){defer.resolve(message);return false;},done:function(){defer.reject(new Error('found no message'));},filter:{threadId:threadId}});return defer.promise;};if(Threads.has(threadId)){return Promise.resolve();} return getOneMessageForThread(threadId).then((message)=>Threads.registerMessage(message));}};Object.defineProperty(exports,'MessageManager',{get:function(){delete exports.MessageManager;exports.MessageManager=EventDispatcher.mixin(MessageManager,['message-sending','message-failed-to-send','message-delivered','message-read','message-sent','message-received','threads-deleted']);return exports.MessageManager;},configurable:true,enumerable:true});})(window);