1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "SmsMessage.h"
7 #include "nsIDOMClassInfo.h"
8 #include "jsapi.h" // For OBJECT_TO_JSVAL and JS_NewDateObjectMsec
9 #include "jsfriendapi.h" // For js_DateGetMsecSinceEpoch
10 #include "mozilla/dom/mobilemessage/Constants.h" // For MessageType
12 using namespace mozilla::dom::mobilemessage
;
14 DOMCI_DATA(MozSmsMessage
, mozilla::dom::SmsMessage
)
19 NS_INTERFACE_MAP_BEGIN(SmsMessage
)
20 NS_INTERFACE_MAP_ENTRY(nsIDOMMozSmsMessage
)
21 NS_INTERFACE_MAP_ENTRY(nsISupports
)
22 NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MozSmsMessage
)
25 NS_IMPL_ADDREF(SmsMessage
)
26 NS_IMPL_RELEASE(SmsMessage
)
28 SmsMessage::SmsMessage(int32_t aId
,
30 const nsString
& aIccId
,
31 DeliveryState aDelivery
,
32 DeliveryStatus aDeliveryStatus
,
33 const nsString
& aSender
,
34 const nsString
& aReceiver
,
35 const nsString
& aBody
,
36 MessageClass aMessageClass
,
38 uint64_t aSentTimestamp
,
39 uint64_t aDeliveryTimestamp
,
41 : mData(aId
, aThreadId
, aIccId
, aDelivery
, aDeliveryStatus
,
42 aSender
, aReceiver
, aBody
, aMessageClass
, aTimestamp
, aSentTimestamp
,
43 aDeliveryTimestamp
, aRead
)
47 SmsMessage::SmsMessage(const SmsMessageData
& aData
)
53 SmsMessage::Create(int32_t aId
,
55 const nsAString
& aIccId
,
56 const nsAString
& aDelivery
,
57 const nsAString
& aDeliveryStatus
,
58 const nsAString
& aSender
,
59 const nsAString
& aReceiver
,
60 const nsAString
& aBody
,
61 const nsAString
& aMessageClass
,
63 uint64_t aSentTimestamp
,
64 uint64_t aDeliveryTimestamp
,
67 nsIDOMMozSmsMessage
** aMessage
)
71 // SmsMessageData exposes these as references, so we can simply assign
75 data
.threadId() = aThreadId
;
76 data
.iccId() = nsString(aIccId
);
77 data
.sender() = nsString(aSender
);
78 data
.receiver() = nsString(aReceiver
);
79 data
.body() = nsString(aBody
);
82 if (aDelivery
.Equals(DELIVERY_RECEIVED
)) {
83 data
.delivery() = eDeliveryState_Received
;
84 } else if (aDelivery
.Equals(DELIVERY_SENDING
)) {
85 data
.delivery() = eDeliveryState_Sending
;
86 } else if (aDelivery
.Equals(DELIVERY_SENT
)) {
87 data
.delivery() = eDeliveryState_Sent
;
88 } else if (aDelivery
.Equals(DELIVERY_ERROR
)) {
89 data
.delivery() = eDeliveryState_Error
;
91 return NS_ERROR_INVALID_ARG
;
94 if (aDeliveryStatus
.Equals(DELIVERY_STATUS_NOT_APPLICABLE
)) {
95 data
.deliveryStatus() = eDeliveryStatus_NotApplicable
;
96 } else if (aDeliveryStatus
.Equals(DELIVERY_STATUS_SUCCESS
)) {
97 data
.deliveryStatus() = eDeliveryStatus_Success
;
98 } else if (aDeliveryStatus
.Equals(DELIVERY_STATUS_PENDING
)) {
99 data
.deliveryStatus() = eDeliveryStatus_Pending
;
100 } else if (aDeliveryStatus
.Equals(DELIVERY_STATUS_ERROR
)) {
101 data
.deliveryStatus() = eDeliveryStatus_Error
;
103 return NS_ERROR_INVALID_ARG
;
106 if (aMessageClass
.Equals(MESSAGE_CLASS_NORMAL
)) {
107 data
.messageClass() = eMessageClass_Normal
;
108 } else if (aMessageClass
.Equals(MESSAGE_CLASS_CLASS_0
)) {
109 data
.messageClass() = eMessageClass_Class0
;
110 } else if (aMessageClass
.Equals(MESSAGE_CLASS_CLASS_1
)) {
111 data
.messageClass() = eMessageClass_Class1
;
112 } else if (aMessageClass
.Equals(MESSAGE_CLASS_CLASS_2
)) {
113 data
.messageClass() = eMessageClass_Class2
;
114 } else if (aMessageClass
.Equals(MESSAGE_CLASS_CLASS_3
)) {
115 data
.messageClass() = eMessageClass_Class3
;
117 return NS_ERROR_INVALID_ARG
;
121 data
.timestamp() = aTimestamp
;
123 // Set |sentTimestamp|.
124 data
.sentTimestamp() = aSentTimestamp
;
126 // Set |deliveryTimestamp|.
127 data
.deliveryTimestamp() = aDeliveryTimestamp
;
129 nsCOMPtr
<nsIDOMMozSmsMessage
> message
= new SmsMessage(data
);
130 message
.swap(*aMessage
);
134 const SmsMessageData
&
135 SmsMessage::GetData() const
141 SmsMessage::GetType(nsAString
& aType
)
143 aType
= NS_LITERAL_STRING("sms");
148 SmsMessage::GetId(int32_t* aId
)
155 SmsMessage::GetThreadId(uint64_t* aThreadId
)
157 *aThreadId
= mData
.threadId();
162 SmsMessage::GetIccId(nsAString
& aIccId
)
164 aIccId
= mData
.iccId();
169 SmsMessage::GetDelivery(nsAString
& aDelivery
)
171 switch (mData
.delivery()) {
172 case eDeliveryState_Received
:
173 aDelivery
= DELIVERY_RECEIVED
;
175 case eDeliveryState_Sending
:
176 aDelivery
= DELIVERY_SENDING
;
178 case eDeliveryState_Sent
:
179 aDelivery
= DELIVERY_SENT
;
181 case eDeliveryState_Error
:
182 aDelivery
= DELIVERY_ERROR
;
184 case eDeliveryState_Unknown
:
185 case eDeliveryState_EndGuard
:
187 MOZ_CRASH("We shouldn't get any other delivery state!");
194 SmsMessage::GetDeliveryStatus(nsAString
& aDeliveryStatus
)
196 switch (mData
.deliveryStatus()) {
197 case eDeliveryStatus_NotApplicable
:
198 aDeliveryStatus
= DELIVERY_STATUS_NOT_APPLICABLE
;
200 case eDeliveryStatus_Success
:
201 aDeliveryStatus
= DELIVERY_STATUS_SUCCESS
;
203 case eDeliveryStatus_Pending
:
204 aDeliveryStatus
= DELIVERY_STATUS_PENDING
;
206 case eDeliveryStatus_Error
:
207 aDeliveryStatus
= DELIVERY_STATUS_ERROR
;
209 case eDeliveryStatus_EndGuard
:
211 MOZ_CRASH("We shouldn't get any other delivery status!");
218 SmsMessage::GetSender(nsAString
& aSender
)
220 aSender
= mData
.sender();
225 SmsMessage::GetReceiver(nsAString
& aReceiver
)
227 aReceiver
= mData
.receiver();
232 SmsMessage::GetBody(nsAString
& aBody
)
234 aBody
= mData
.body();
239 SmsMessage::GetMessageClass(nsAString
& aMessageClass
)
241 switch (mData
.messageClass()) {
242 case eMessageClass_Normal
:
243 aMessageClass
= MESSAGE_CLASS_NORMAL
;
245 case eMessageClass_Class0
:
246 aMessageClass
= MESSAGE_CLASS_CLASS_0
;
248 case eMessageClass_Class1
:
249 aMessageClass
= MESSAGE_CLASS_CLASS_1
;
251 case eMessageClass_Class2
:
252 aMessageClass
= MESSAGE_CLASS_CLASS_2
;
254 case eMessageClass_Class3
:
255 aMessageClass
= MESSAGE_CLASS_CLASS_3
;
258 MOZ_CRASH("We shouldn't get any other message class!");
265 SmsMessage::GetTimestamp(DOMTimeStamp
* aTimestamp
)
267 *aTimestamp
= mData
.timestamp();
272 SmsMessage::GetSentTimestamp(DOMTimeStamp
* aSentTimestamp
)
274 *aSentTimestamp
= mData
.sentTimestamp();
279 SmsMessage::GetDeliveryTimestamp(DOMTimeStamp
* aDate
)
281 *aDate
= mData
.deliveryTimestamp();
286 SmsMessage::GetRead(bool* aRead
)
288 *aRead
= mData
.read();
293 } // namespace mozilla