michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: "use strict"; michael@0: michael@0: const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; michael@0: michael@0: Cu.import("resource://gre/modules/XPCOMUtils.jsm"); michael@0: Cu.import("resource://gre/modules/Services.jsm"); michael@0: michael@0: let MMDB = {}; michael@0: Cu.import("resource://gre/modules/MobileMessageDB.jsm", MMDB); michael@0: michael@0: const RIL_MOBILEMESSAGEDATABASESERVICE_CONTRACTID = michael@0: "@mozilla.org/mobilemessage/rilmobilemessagedatabaseservice;1"; michael@0: const RIL_MOBILEMESSAGEDATABASESERVICE_CID = michael@0: Components.ID("{29785f90-6b5b-11e2-9201-3b280170b2ec}"); michael@0: michael@0: XPCOMUtils.defineLazyServiceGetter(this, "gDiskSpaceWatcher", michael@0: "@mozilla.org/toolkit/disk-space-watcher;1", michael@0: "nsIDiskSpaceWatcher"); michael@0: michael@0: const DB_NAME = "sms"; michael@0: michael@0: /** michael@0: * MobileMessageDatabaseService michael@0: */ michael@0: function MobileMessageDatabaseService() { michael@0: // Prime the directory service's cache to ensure that the ProfD entry exists michael@0: // by the time IndexedDB queries for it off the main thread. (See bug 743635.) michael@0: Services.dirsvc.get("ProfD", Ci.nsIFile); michael@0: michael@0: let mmdb = new MMDB.MobileMessageDB(); michael@0: mmdb.init(DB_NAME, 0, mmdb.updatePendingTransactionToError.bind(mmdb)); michael@0: mmdb.isDiskFull = function() { michael@0: return gDiskSpaceWatcher.isDiskFull; michael@0: }; michael@0: this.mmdb = mmdb; michael@0: } michael@0: MobileMessageDatabaseService.prototype = { michael@0: michael@0: classID: RIL_MOBILEMESSAGEDATABASESERVICE_CID, michael@0: QueryInterface: XPCOMUtils.generateQI([Ci.nsIRilMobileMessageDatabaseService, michael@0: Ci.nsIMobileMessageDatabaseService, michael@0: Ci.nsIObserver]), michael@0: michael@0: /** michael@0: * MobileMessageDB instance. michael@0: */ michael@0: mmdb: null, michael@0: michael@0: /** michael@0: * nsIObserver michael@0: */ michael@0: observe: function() {}, michael@0: michael@0: /** michael@0: * nsIRilMobileMessageDatabaseService API michael@0: */ michael@0: michael@0: saveReceivedMessage: function(aMessage, aCallback) { michael@0: this.mmdb.saveReceivedMessage(aMessage, aCallback); michael@0: }, michael@0: michael@0: saveSendingMessage: function(aMessage, aCallback) { michael@0: this.mmdb.saveSendingMessage(aMessage, aCallback); michael@0: }, michael@0: michael@0: setMessageDeliveryByMessageId: function(aMessageId, aReceiver, aDelivery, michael@0: aDeliveryStatus, aEnvelopeId, michael@0: aCallback) { michael@0: this.mmdb.updateMessageDeliveryById(aMessageId, "messageId", aReceiver, michael@0: aDelivery, aDeliveryStatus, michael@0: aEnvelopeId, aCallback); michael@0: }, michael@0: michael@0: setMessageDeliveryStatusByEnvelopeId: function(aEnvelopeId, aReceiver, michael@0: aDeliveryStatus, aCallback) { michael@0: this.mmdb.updateMessageDeliveryById(aEnvelopeId, "envelopeId", aReceiver, michael@0: null, aDeliveryStatus, null, aCallback); michael@0: }, michael@0: michael@0: setMessageReadStatusByEnvelopeId: function(aEnvelopeId, aReceiver, michael@0: aReadStatus, aCallback) { michael@0: this.mmdb.setMessageReadStatusByEnvelopeId(aEnvelopeId, aReceiver, michael@0: aReadStatus, aCallback); michael@0: }, michael@0: michael@0: getMessageRecordByTransactionId: function(aTransactionId, aCallback) { michael@0: this.mmdb.getMessageRecordByTransactionId(aTransactionId, aCallback); michael@0: }, michael@0: michael@0: getMessageRecordById: function(aMessageId, aCallback) { michael@0: this.mmdb.getMessageRecordById(aMessageId, aCallback); michael@0: }, michael@0: michael@0: translateCrErrorToMessageCallbackError: function(aCrError) { michael@0: return this.mmdb.translateCrErrorToMessageCallbackError(aCrError); michael@0: }, michael@0: michael@0: saveSmsSegment: function(aSmsSegment, aCallback) { michael@0: this.mmdb.saveSmsSegment(aSmsSegment, aCallback); michael@0: }, michael@0: michael@0: /** michael@0: * nsIMobileMessageDatabaseService API michael@0: */ michael@0: michael@0: getMessage: function(aMessageId, aRequest) { michael@0: this.mmdb.getMessage(aMessageId, aRequest); michael@0: }, michael@0: michael@0: deleteMessage: function(aMessageIds, aLength, aRequest) { michael@0: this.mmdb.deleteMessage(aMessageIds, aLength, aRequest); michael@0: }, michael@0: michael@0: createMessageCursor: function(aFilter, aReverse, aCallback) { michael@0: return this.mmdb.createMessageCursor(aFilter, aReverse, aCallback); michael@0: }, michael@0: michael@0: markMessageRead: function(aMessageId, aValue, aSendReadReport, aRequest) { michael@0: this.mmdb.markMessageRead(aMessageId, aValue, aSendReadReport, aRequest); michael@0: }, michael@0: michael@0: createThreadCursor: function(aCallback) { michael@0: return this.mmdb.createThreadCursor(aCallback); michael@0: } michael@0: }; michael@0: michael@0: this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MobileMessageDatabaseService]);