1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/mobilemessage/src/SmsMessage.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,293 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this file, 1.7 + * You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#include "SmsMessage.h" 1.10 +#include "nsIDOMClassInfo.h" 1.11 +#include "jsapi.h" // For OBJECT_TO_JSVAL and JS_NewDateObjectMsec 1.12 +#include "jsfriendapi.h" // For js_DateGetMsecSinceEpoch 1.13 +#include "mozilla/dom/mobilemessage/Constants.h" // For MessageType 1.14 + 1.15 +using namespace mozilla::dom::mobilemessage; 1.16 + 1.17 +DOMCI_DATA(MozSmsMessage, mozilla::dom::SmsMessage) 1.18 + 1.19 +namespace mozilla { 1.20 +namespace dom { 1.21 + 1.22 +NS_INTERFACE_MAP_BEGIN(SmsMessage) 1.23 + NS_INTERFACE_MAP_ENTRY(nsIDOMMozSmsMessage) 1.24 + NS_INTERFACE_MAP_ENTRY(nsISupports) 1.25 + NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(MozSmsMessage) 1.26 +NS_INTERFACE_MAP_END 1.27 + 1.28 +NS_IMPL_ADDREF(SmsMessage) 1.29 +NS_IMPL_RELEASE(SmsMessage) 1.30 + 1.31 +SmsMessage::SmsMessage(int32_t aId, 1.32 + uint64_t aThreadId, 1.33 + const nsString& aIccId, 1.34 + DeliveryState aDelivery, 1.35 + DeliveryStatus aDeliveryStatus, 1.36 + const nsString& aSender, 1.37 + const nsString& aReceiver, 1.38 + const nsString& aBody, 1.39 + MessageClass aMessageClass, 1.40 + uint64_t aTimestamp, 1.41 + uint64_t aSentTimestamp, 1.42 + uint64_t aDeliveryTimestamp, 1.43 + bool aRead) 1.44 + : mData(aId, aThreadId, aIccId, aDelivery, aDeliveryStatus, 1.45 + aSender, aReceiver, aBody, aMessageClass, aTimestamp, aSentTimestamp, 1.46 + aDeliveryTimestamp, aRead) 1.47 +{ 1.48 +} 1.49 + 1.50 +SmsMessage::SmsMessage(const SmsMessageData& aData) 1.51 + : mData(aData) 1.52 +{ 1.53 +} 1.54 + 1.55 +/* static */ nsresult 1.56 +SmsMessage::Create(int32_t aId, 1.57 + uint64_t aThreadId, 1.58 + const nsAString& aIccId, 1.59 + const nsAString& aDelivery, 1.60 + const nsAString& aDeliveryStatus, 1.61 + const nsAString& aSender, 1.62 + const nsAString& aReceiver, 1.63 + const nsAString& aBody, 1.64 + const nsAString& aMessageClass, 1.65 + uint64_t aTimestamp, 1.66 + uint64_t aSentTimestamp, 1.67 + uint64_t aDeliveryTimestamp, 1.68 + bool aRead, 1.69 + JSContext* aCx, 1.70 + nsIDOMMozSmsMessage** aMessage) 1.71 +{ 1.72 + *aMessage = nullptr; 1.73 + 1.74 + // SmsMessageData exposes these as references, so we can simply assign 1.75 + // to them. 1.76 + SmsMessageData data; 1.77 + data.id() = aId; 1.78 + data.threadId() = aThreadId; 1.79 + data.iccId() = nsString(aIccId); 1.80 + data.sender() = nsString(aSender); 1.81 + data.receiver() = nsString(aReceiver); 1.82 + data.body() = nsString(aBody); 1.83 + data.read() = aRead; 1.84 + 1.85 + if (aDelivery.Equals(DELIVERY_RECEIVED)) { 1.86 + data.delivery() = eDeliveryState_Received; 1.87 + } else if (aDelivery.Equals(DELIVERY_SENDING)) { 1.88 + data.delivery() = eDeliveryState_Sending; 1.89 + } else if (aDelivery.Equals(DELIVERY_SENT)) { 1.90 + data.delivery() = eDeliveryState_Sent; 1.91 + } else if (aDelivery.Equals(DELIVERY_ERROR)) { 1.92 + data.delivery() = eDeliveryState_Error; 1.93 + } else { 1.94 + return NS_ERROR_INVALID_ARG; 1.95 + } 1.96 + 1.97 + if (aDeliveryStatus.Equals(DELIVERY_STATUS_NOT_APPLICABLE)) { 1.98 + data.deliveryStatus() = eDeliveryStatus_NotApplicable; 1.99 + } else if (aDeliveryStatus.Equals(DELIVERY_STATUS_SUCCESS)) { 1.100 + data.deliveryStatus() = eDeliveryStatus_Success; 1.101 + } else if (aDeliveryStatus.Equals(DELIVERY_STATUS_PENDING)) { 1.102 + data.deliveryStatus() = eDeliveryStatus_Pending; 1.103 + } else if (aDeliveryStatus.Equals(DELIVERY_STATUS_ERROR)) { 1.104 + data.deliveryStatus() = eDeliveryStatus_Error; 1.105 + } else { 1.106 + return NS_ERROR_INVALID_ARG; 1.107 + } 1.108 + 1.109 + if (aMessageClass.Equals(MESSAGE_CLASS_NORMAL)) { 1.110 + data.messageClass() = eMessageClass_Normal; 1.111 + } else if (aMessageClass.Equals(MESSAGE_CLASS_CLASS_0)) { 1.112 + data.messageClass() = eMessageClass_Class0; 1.113 + } else if (aMessageClass.Equals(MESSAGE_CLASS_CLASS_1)) { 1.114 + data.messageClass() = eMessageClass_Class1; 1.115 + } else if (aMessageClass.Equals(MESSAGE_CLASS_CLASS_2)) { 1.116 + data.messageClass() = eMessageClass_Class2; 1.117 + } else if (aMessageClass.Equals(MESSAGE_CLASS_CLASS_3)) { 1.118 + data.messageClass() = eMessageClass_Class3; 1.119 + } else { 1.120 + return NS_ERROR_INVALID_ARG; 1.121 + } 1.122 + 1.123 + // Set |timestamp|. 1.124 + data.timestamp() = aTimestamp; 1.125 + 1.126 + // Set |sentTimestamp|. 1.127 + data.sentTimestamp() = aSentTimestamp; 1.128 + 1.129 + // Set |deliveryTimestamp|. 1.130 + data.deliveryTimestamp() = aDeliveryTimestamp; 1.131 + 1.132 + nsCOMPtr<nsIDOMMozSmsMessage> message = new SmsMessage(data); 1.133 + message.swap(*aMessage); 1.134 + return NS_OK; 1.135 +} 1.136 + 1.137 +const SmsMessageData& 1.138 +SmsMessage::GetData() const 1.139 +{ 1.140 + return mData; 1.141 +} 1.142 + 1.143 +NS_IMETHODIMP 1.144 +SmsMessage::GetType(nsAString& aType) 1.145 +{ 1.146 + aType = NS_LITERAL_STRING("sms"); 1.147 + return NS_OK; 1.148 +} 1.149 + 1.150 +NS_IMETHODIMP 1.151 +SmsMessage::GetId(int32_t* aId) 1.152 +{ 1.153 + *aId = mData.id(); 1.154 + return NS_OK; 1.155 +} 1.156 + 1.157 +NS_IMETHODIMP 1.158 +SmsMessage::GetThreadId(uint64_t* aThreadId) 1.159 +{ 1.160 + *aThreadId = mData.threadId(); 1.161 + return NS_OK; 1.162 +} 1.163 + 1.164 +NS_IMETHODIMP 1.165 +SmsMessage::GetIccId(nsAString& aIccId) 1.166 +{ 1.167 + aIccId = mData.iccId(); 1.168 + return NS_OK; 1.169 +} 1.170 + 1.171 +NS_IMETHODIMP 1.172 +SmsMessage::GetDelivery(nsAString& aDelivery) 1.173 +{ 1.174 + switch (mData.delivery()) { 1.175 + case eDeliveryState_Received: 1.176 + aDelivery = DELIVERY_RECEIVED; 1.177 + break; 1.178 + case eDeliveryState_Sending: 1.179 + aDelivery = DELIVERY_SENDING; 1.180 + break; 1.181 + case eDeliveryState_Sent: 1.182 + aDelivery = DELIVERY_SENT; 1.183 + break; 1.184 + case eDeliveryState_Error: 1.185 + aDelivery = DELIVERY_ERROR; 1.186 + break; 1.187 + case eDeliveryState_Unknown: 1.188 + case eDeliveryState_EndGuard: 1.189 + default: 1.190 + MOZ_CRASH("We shouldn't get any other delivery state!"); 1.191 + } 1.192 + 1.193 + return NS_OK; 1.194 +} 1.195 + 1.196 +NS_IMETHODIMP 1.197 +SmsMessage::GetDeliveryStatus(nsAString& aDeliveryStatus) 1.198 +{ 1.199 + switch (mData.deliveryStatus()) { 1.200 + case eDeliveryStatus_NotApplicable: 1.201 + aDeliveryStatus = DELIVERY_STATUS_NOT_APPLICABLE; 1.202 + break; 1.203 + case eDeliveryStatus_Success: 1.204 + aDeliveryStatus = DELIVERY_STATUS_SUCCESS; 1.205 + break; 1.206 + case eDeliveryStatus_Pending: 1.207 + aDeliveryStatus = DELIVERY_STATUS_PENDING; 1.208 + break; 1.209 + case eDeliveryStatus_Error: 1.210 + aDeliveryStatus = DELIVERY_STATUS_ERROR; 1.211 + break; 1.212 + case eDeliveryStatus_EndGuard: 1.213 + default: 1.214 + MOZ_CRASH("We shouldn't get any other delivery status!"); 1.215 + } 1.216 + 1.217 + return NS_OK; 1.218 +} 1.219 + 1.220 +NS_IMETHODIMP 1.221 +SmsMessage::GetSender(nsAString& aSender) 1.222 +{ 1.223 + aSender = mData.sender(); 1.224 + return NS_OK; 1.225 +} 1.226 + 1.227 +NS_IMETHODIMP 1.228 +SmsMessage::GetReceiver(nsAString& aReceiver) 1.229 +{ 1.230 + aReceiver = mData.receiver(); 1.231 + return NS_OK; 1.232 +} 1.233 + 1.234 +NS_IMETHODIMP 1.235 +SmsMessage::GetBody(nsAString& aBody) 1.236 +{ 1.237 + aBody = mData.body(); 1.238 + return NS_OK; 1.239 +} 1.240 + 1.241 +NS_IMETHODIMP 1.242 +SmsMessage::GetMessageClass(nsAString& aMessageClass) 1.243 +{ 1.244 + switch (mData.messageClass()) { 1.245 + case eMessageClass_Normal: 1.246 + aMessageClass = MESSAGE_CLASS_NORMAL; 1.247 + break; 1.248 + case eMessageClass_Class0: 1.249 + aMessageClass = MESSAGE_CLASS_CLASS_0; 1.250 + break; 1.251 + case eMessageClass_Class1: 1.252 + aMessageClass = MESSAGE_CLASS_CLASS_1; 1.253 + break; 1.254 + case eMessageClass_Class2: 1.255 + aMessageClass = MESSAGE_CLASS_CLASS_2; 1.256 + break; 1.257 + case eMessageClass_Class3: 1.258 + aMessageClass = MESSAGE_CLASS_CLASS_3; 1.259 + break; 1.260 + default: 1.261 + MOZ_CRASH("We shouldn't get any other message class!"); 1.262 + } 1.263 + 1.264 + return NS_OK; 1.265 +} 1.266 + 1.267 +NS_IMETHODIMP 1.268 +SmsMessage::GetTimestamp(DOMTimeStamp* aTimestamp) 1.269 +{ 1.270 + *aTimestamp = mData.timestamp(); 1.271 + return NS_OK; 1.272 +} 1.273 + 1.274 +NS_IMETHODIMP 1.275 +SmsMessage::GetSentTimestamp(DOMTimeStamp* aSentTimestamp) 1.276 +{ 1.277 + *aSentTimestamp = mData.sentTimestamp(); 1.278 + return NS_OK; 1.279 +} 1.280 + 1.281 +NS_IMETHODIMP 1.282 +SmsMessage::GetDeliveryTimestamp(DOMTimeStamp* aDate) 1.283 +{ 1.284 + *aDate = mData.deliveryTimestamp(); 1.285 + return NS_OK; 1.286 +} 1.287 + 1.288 +NS_IMETHODIMP 1.289 +SmsMessage::GetRead(bool* aRead) 1.290 +{ 1.291 + *aRead = mData.read(); 1.292 + return NS_OK; 1.293 +} 1.294 + 1.295 +} // namespace dom 1.296 +} // namespace mozilla