• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "map_mse_event.h"
17 #include <sstream>
18 
19 namespace OHOS {
20 namespace bluetooth {
21 const std::string MapMseEvent::PATH = "telecom/msg/";
22 
MapMseEvent()23 MapMseEvent::MapMseEvent()
24 {}
25 
MapMseEvent(const std::string & eventType,const std::string & handle,const std::string & folder,const std::string & oldFolder,MessageType msgType)26 MapMseEvent::MapMseEvent(const std::string &eventType, const std::string &handle, const std::string &folder,
27     const std::string &oldFolder, MessageType msgType)
28     : version_("1.0"), eventType_(eventType), handle_(handle), folder_(folder), oldFolder_(oldFolder), msgType_(msgType)
29 {
30     SetFolderPath(folder, msgType);
31     if ((msgType != MessageType::EMAIL) && (msgType != MessageType::IM) && (oldFolder != "")) {
32         oldFolder_ = PATH + oldFolder;
33     }
34 }
35 
MapMseEvent(const std::string & eventType,const std::string & handle,const std::string & folder,MessageType msgType)36 MapMseEvent::MapMseEvent(
37     const std::string &eventType, const std::string &handle, const std::string &folder, MessageType msgType)
38     : version_("1.0"), eventType_(eventType), handle_(handle), folder_(folder), msgType_(msgType)
39 {
40     SetFolderPath(folder, msgType);
41 }
42 
43 // /* extended event type 1.1 */
MapMseEvent(const MseEventType11 & event)44 MapMseEvent::MapMseEvent(const MseEventType11 &event)
45     : version_("1.1"),
46       eventType_(event.eventType_),
47       handle_(event.handle_),
48       folder_(event.folder_),
49       msgType_(event.msgType_),
50       datetime_(event.datetime_),
51       subject_(event.subject_),
52       senderName_(event.senderName_),
53       priority_(event.priority_)
54 {
55     SetFolderPath(event.folder_, event.msgType_);
56 }
57 
58 /* extended event type 1.2 message events */
MapMseEvent(const MseEventType121 & event)59 MapMseEvent::MapMseEvent(const MseEventType121 &event)
60     : version_("1.2"),
61       eventType_(event.eventType_),
62       handle_(event.handle_),
63       folder_(event.folder_),
64       msgType_(event.msgType_),
65       datetime_(event.datetime_),
66       subject_(event.subject_),
67       senderName_(event.senderName_),
68       priority_(event.priority_),
69       conversationID_(event.conversationID_),
70       conversationName_(event.conversationName_)
71 {
72     SetFolderPath(event.folder_, event.msgType_);
73 }
74 
MapMseEvent(const MseEventType122 & event)75 MapMseEvent::MapMseEvent(const MseEventType122 &event)
76     : version_("1.2"),
77       eventType_(event.eventType_),
78       handle_(event.handle_),
79       folder_(event.folder_),
80       msgType_(event.msgType_),
81       datetime_(event.datetime_),
82       subject_(event.subject_),
83       senderName_(event.senderName_),
84       priority_(event.priority_),
85       conversationID_(event.conversationID_),
86       conversationName_(event.conversationName_),
87       participantUci_(event.participantUci_),
88       contactUid_(event.contactUid_)
89 {
90     SetFolderPath(event.folder_, event.msgType_);
91 }
92 
MapMseEvent(const MseEventType123 & event)93 MapMseEvent::MapMseEvent(const MseEventType123 &event)
94     : version_("1.2"),
95       eventType_(event.eventType_),
96       handle_(event.handle_),
97       folder_(event.folder_),
98       msgType_(event.msgType_),
99       datetime_(event.datetime_),
100       senderName_(event.senderName_),
101       conversationID_(event.conversationID_),
102       conversationName_(event.conversationName_),
103       extendedData_(event.extendedData_),
104       participantUci_(event.participantUci_),
105       contactUid_(event.contactUid_)
106 {}
107 
MapMseEvent(const MseEventType124 & event)108 MapMseEvent::MapMseEvent(const MseEventType124 &event)
109     : version_("1.2"),
110       eventType_(event.eventType_),
111       senderName_(event.senderName_),
112       conversationID_(event.conversationID_),
113       conversationName_(event.conversationName_),
114       presenceAvailability_(event.presenceState_),
115       presenceText_(event.presenceStatus_),
116       lastActivity_(event.lastActivity_),
117       chatState_(event.chatState_),
118       extendedData_(event.extendedData_),
119       participantUci_(event.participantUci_),
120       contactUid_(event.contactUid_)
121 {}
122 
Ver12ToXml(xmlNodePtr & node) const123 void MapMseEvent::Ver12ToXml(xmlNodePtr &node) const
124 {
125     if (MAP_V12 == version_) {
126         if (conversationName_ != "")
127             xmlNewProp(node, BAD_CAST"conversation_name", BAD_CAST conversationName_.c_str());
128         if (conversationID_ != "")
129             xmlNewProp(node, BAD_CAST"conversation_id", BAD_CAST conversationID_.c_str());
130         if (presenceAvailability_ != -1)
131             xmlNewProp(node, BAD_CAST"presence_availability", BAD_CAST std::to_string(presenceAvailability_).c_str());
132         if (presenceText_ != "")
133             xmlNewProp(node, BAD_CAST"presence_text", BAD_CAST presenceText_.c_str());
134         if (lastActivity_ != "")
135             xmlNewProp(node, BAD_CAST"last_activity", BAD_CAST lastActivity_.c_str());
136         if (chatState_ != -1)
137             xmlNewProp(node, BAD_CAST"chat_state", BAD_CAST std::to_string(chatState_).c_str());
138         if (readStatus_ != "")
139             xmlNewProp(node, BAD_CAST"read_status", BAD_CAST readStatus_.c_str());
140         if (participantUci_ != "")
141             xmlNewProp(node, BAD_CAST"participant_uci", BAD_CAST participantUci_.c_str());
142         if (extendedData_ != "")
143             xmlNewProp(node, BAD_CAST"extended_data", BAD_CAST extendedData_.c_str());
144         if (contactUid_ != "")
145             xmlNewProp(node, BAD_CAST"contact_uid", BAD_CAST contactUid_.c_str());
146     }
147 }
148 
ToReportXml(void) const149 std::string MapMseEvent::ToReportXml(void) const
150 {
151     xmlChar *xmlbuff;
152     int buffersize;
153     std::ostringstream oss;
154 
155     xmlDocPtr doc = xmlNewDoc(BAD_CAST MAP_V10.c_str());
156     xmlNodePtr root_node = xmlNewNode(NULL, BAD_CAST "MAP-event-report");
157     xmlDocSetRootElement(doc, root_node);
158     xmlNewProp(root_node, BAD_CAST "version", BAD_CAST version_.c_str());
159 
160     xmlNodePtr node = xmlNewNode(NULL, BAD_CAST"event");
161     xmlAddChild(root_node, node);
162     xmlNewProp(node, BAD_CAST"type", BAD_CAST eventType_.c_str());
163     if (handle_ != "")
164         xmlNewProp(node, BAD_CAST"handle", BAD_CAST handle_.c_str());
165     if (folder_ != "")
166         xmlNewProp(node, BAD_CAST"folder", BAD_CAST folder_.c_str());
167     if (oldFolder_ != "")
168         xmlNewProp(node, BAD_CAST"old_folder", BAD_CAST oldFolder_.c_str());
169     if (MessageType::NONE != msgType_)
170         xmlNewProp(node, BAD_CAST"msg_type", BAD_CAST GetMessageNameByType(msgType_).c_str());
171     if (MAP_V11 == version_ || MAP_V12 == version_) {
172         if (datetime_ != "")
173             xmlNewProp(node, BAD_CAST"datetime", BAD_CAST datetime_.c_str());
174         if (subject_ != "")
175             xmlNewProp(node, BAD_CAST"subject", BAD_CAST subject_.c_str());
176         if (senderName_ != "")
177             xmlNewProp(node, BAD_CAST"sender_name", BAD_CAST senderName_.c_str());
178         if (priority_ == 0 || priority_ == 1)
179             xmlNewProp(node, BAD_CAST"priority", BAD_CAST ((priority_ == 1) ? "yes" : "no"));
180     }
181     Ver12ToXml(node);
182 
183     xmlDocDumpFormatMemory(doc, &xmlbuff, &buffersize, 1);
184     oss << xmlbuff;
185     xmlFree(xmlbuff);
186     xmlFreeDoc(doc);
187 
188     return oss.str();
189 }
190 
SetReadStatus(const int status)191 void MapMseEvent::SetReadStatus(const int status)
192 {
193     if (status == 1) {
194         readStatus_ = "yes";
195     } else if (status == 0) {
196         readStatus_ = "no";
197     }
198 }
199 
~MapMseEvent()200 MapMseEvent::~MapMseEvent()
201 {}
202 
SetFolderPath(const std::string & name,const MessageType & type)203 void MapMseEvent::SetFolderPath(const std::string &name, const MessageType &type)
204 {
205     if ((type != MessageType::EMAIL) && (type != MessageType::IM) && (name != "")) {
206         folder_ = PATH + name;
207     }
208 }
209 
GetMessageNameByType(const MessageType type) const210 std::string MapMseEvent::GetMessageNameByType(const MessageType type) const
211 {
212     if (type == MessageType::EMAIL) {
213         return "EMAIL";
214     } else if (type == MessageType::IM) {
215         return "IM";
216     } else if (type == MessageType::MMS) {
217         return "MMS";
218     } else if (type == MessageType::SMS_GSM) {
219         return "SMS_GSM";
220     } else if (type == MessageType::SMS_CDMA) {
221         return "SMS_CDMA";
222     } else {
223         return "NONE";
224     }
225 }
226 }  // namespace bluetooth
227 }  // namespace OHOS
228