dom/mobilemessage/src/SmsMessage.cpp

changeset 0
6474c204b198
     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

mercurial