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