|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file, |
|
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 "use strict"; |
|
6 |
|
7 const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; |
|
8 |
|
9 Cu.import("resource://gre/modules/XPCOMUtils.jsm"); |
|
10 Cu.import("resource://gre/modules/Services.jsm"); |
|
11 |
|
12 let MMDB = {}; |
|
13 Cu.import("resource://gre/modules/MobileMessageDB.jsm", MMDB); |
|
14 |
|
15 const RIL_MOBILEMESSAGEDATABASESERVICE_CONTRACTID = |
|
16 "@mozilla.org/mobilemessage/rilmobilemessagedatabaseservice;1"; |
|
17 const RIL_MOBILEMESSAGEDATABASESERVICE_CID = |
|
18 Components.ID("{29785f90-6b5b-11e2-9201-3b280170b2ec}"); |
|
19 |
|
20 XPCOMUtils.defineLazyServiceGetter(this, "gDiskSpaceWatcher", |
|
21 "@mozilla.org/toolkit/disk-space-watcher;1", |
|
22 "nsIDiskSpaceWatcher"); |
|
23 |
|
24 const DB_NAME = "sms"; |
|
25 |
|
26 /** |
|
27 * MobileMessageDatabaseService |
|
28 */ |
|
29 function MobileMessageDatabaseService() { |
|
30 // Prime the directory service's cache to ensure that the ProfD entry exists |
|
31 // by the time IndexedDB queries for it off the main thread. (See bug 743635.) |
|
32 Services.dirsvc.get("ProfD", Ci.nsIFile); |
|
33 |
|
34 let mmdb = new MMDB.MobileMessageDB(); |
|
35 mmdb.init(DB_NAME, 0, mmdb.updatePendingTransactionToError.bind(mmdb)); |
|
36 mmdb.isDiskFull = function() { |
|
37 return gDiskSpaceWatcher.isDiskFull; |
|
38 }; |
|
39 this.mmdb = mmdb; |
|
40 } |
|
41 MobileMessageDatabaseService.prototype = { |
|
42 |
|
43 classID: RIL_MOBILEMESSAGEDATABASESERVICE_CID, |
|
44 QueryInterface: XPCOMUtils.generateQI([Ci.nsIRilMobileMessageDatabaseService, |
|
45 Ci.nsIMobileMessageDatabaseService, |
|
46 Ci.nsIObserver]), |
|
47 |
|
48 /** |
|
49 * MobileMessageDB instance. |
|
50 */ |
|
51 mmdb: null, |
|
52 |
|
53 /** |
|
54 * nsIObserver |
|
55 */ |
|
56 observe: function() {}, |
|
57 |
|
58 /** |
|
59 * nsIRilMobileMessageDatabaseService API |
|
60 */ |
|
61 |
|
62 saveReceivedMessage: function(aMessage, aCallback) { |
|
63 this.mmdb.saveReceivedMessage(aMessage, aCallback); |
|
64 }, |
|
65 |
|
66 saveSendingMessage: function(aMessage, aCallback) { |
|
67 this.mmdb.saveSendingMessage(aMessage, aCallback); |
|
68 }, |
|
69 |
|
70 setMessageDeliveryByMessageId: function(aMessageId, aReceiver, aDelivery, |
|
71 aDeliveryStatus, aEnvelopeId, |
|
72 aCallback) { |
|
73 this.mmdb.updateMessageDeliveryById(aMessageId, "messageId", aReceiver, |
|
74 aDelivery, aDeliveryStatus, |
|
75 aEnvelopeId, aCallback); |
|
76 }, |
|
77 |
|
78 setMessageDeliveryStatusByEnvelopeId: function(aEnvelopeId, aReceiver, |
|
79 aDeliveryStatus, aCallback) { |
|
80 this.mmdb.updateMessageDeliveryById(aEnvelopeId, "envelopeId", aReceiver, |
|
81 null, aDeliveryStatus, null, aCallback); |
|
82 }, |
|
83 |
|
84 setMessageReadStatusByEnvelopeId: function(aEnvelopeId, aReceiver, |
|
85 aReadStatus, aCallback) { |
|
86 this.mmdb.setMessageReadStatusByEnvelopeId(aEnvelopeId, aReceiver, |
|
87 aReadStatus, aCallback); |
|
88 }, |
|
89 |
|
90 getMessageRecordByTransactionId: function(aTransactionId, aCallback) { |
|
91 this.mmdb.getMessageRecordByTransactionId(aTransactionId, aCallback); |
|
92 }, |
|
93 |
|
94 getMessageRecordById: function(aMessageId, aCallback) { |
|
95 this.mmdb.getMessageRecordById(aMessageId, aCallback); |
|
96 }, |
|
97 |
|
98 translateCrErrorToMessageCallbackError: function(aCrError) { |
|
99 return this.mmdb.translateCrErrorToMessageCallbackError(aCrError); |
|
100 }, |
|
101 |
|
102 saveSmsSegment: function(aSmsSegment, aCallback) { |
|
103 this.mmdb.saveSmsSegment(aSmsSegment, aCallback); |
|
104 }, |
|
105 |
|
106 /** |
|
107 * nsIMobileMessageDatabaseService API |
|
108 */ |
|
109 |
|
110 getMessage: function(aMessageId, aRequest) { |
|
111 this.mmdb.getMessage(aMessageId, aRequest); |
|
112 }, |
|
113 |
|
114 deleteMessage: function(aMessageIds, aLength, aRequest) { |
|
115 this.mmdb.deleteMessage(aMessageIds, aLength, aRequest); |
|
116 }, |
|
117 |
|
118 createMessageCursor: function(aFilter, aReverse, aCallback) { |
|
119 return this.mmdb.createMessageCursor(aFilter, aReverse, aCallback); |
|
120 }, |
|
121 |
|
122 markMessageRead: function(aMessageId, aValue, aSendReadReport, aRequest) { |
|
123 this.mmdb.markMessageRead(aMessageId, aValue, aSendReadReport, aRequest); |
|
124 }, |
|
125 |
|
126 createThreadCursor: function(aCallback) { |
|
127 return this.mmdb.createThreadCursor(aCallback); |
|
128 } |
|
129 }; |
|
130 |
|
131 this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MobileMessageDatabaseService]); |