• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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 #ifndef OHOS_VCARD_CONSRACT_H
17 #define OHOS_VCARD_CONSRACT_H
18 #include <memory>
19 #include <mutex>
20 #include <type_traits>
21 #include <vector>
22 
23 #include "vcard_anniversary_data.h"
24 #include "vcard_birthday_data.h"
25 #include "vcard_constant.h"
26 #include "vcard_contact_data.h"
27 #include "vcard_email_data.h"
28 #include "vcard_event_data.h"
29 #include "vcard_im_data.h"
30 #include "vcard_name_data.h"
31 #include "vcard_nickname_data.h"
32 #include "vcard_note_data.h"
33 #include "vcard_organization_data.h"
34 #include "vcard_phone_data.h"
35 #include "vcard_photo_data.h"
36 #include "vcard_postal_data.h"
37 #include "vcard_raw_data.h"
38 #include "vcard_rdb_helper.h"
39 #include "vcard_relation_data.h"
40 #include "vcard_sip_data.h"
41 #include "vcard_website_data.h"
42 #include "vcard_group_data.h"
43 #include "vcard_uid_data.h"
44 
45 namespace OHOS {
46 namespace Telephony {
47 class VCardContact {
48 public:
VCardContact()49     VCardContact()
50     {
51         vCardType_ = VERSION_21;
52         nameData_ = std::make_shared<VCardNameData>();
53         birthday_ = std::make_shared<VCardBirthdayData>();
54         anniversary_ = std::make_shared<VCardAnniversaryData>();
55     };
~VCardContact()56     ~VCardContact() {}
57     void AddRawData(std::shared_ptr<VCardRawData> rawData, int32_t &errorCode);
58     int32_t BuildContactData(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues);
59     void BuildRawContactDataDisplayName(DataShare::DataShareValuesBucket &rawContactDataValue);
60     int32_t BuildContact(std::shared_ptr<DataShare::DataShareResultSet> resultSet);
61     int32_t BuildOneData(std::shared_ptr<DataShare::DataShareResultSet> resultSet);
62     void Init();
63     std::shared_ptr<VCardNameData> GetNameData();
64     std::vector<std::shared_ptr<VCardNameData>> GetNames();
65     std::vector<std::shared_ptr<VCardRelationData>> GetRelations();
66     std::vector<std::shared_ptr<VCardImData>> GetIms();
67     std::vector<std::shared_ptr<VCardSipData>> GetSips();
68     std::vector<std::shared_ptr<VCardPhoneData>> GetPhones();
69     std::vector<std::shared_ptr<VCardOrganizationData>> GetOrganizations();
70     std::vector<std::shared_ptr<VCardWebsiteData>> GetWebsites();
71     std::vector<std::shared_ptr<VCardPhotoData>> GetPhotos();
72     std::vector<std::shared_ptr<VCardEmailData>> GetEmails();
73     std::vector<std::shared_ptr<VCardNicknameData>> GetNicknames();
74     std::vector<std::shared_ptr<VCardPostalData>> GetPostalDatas();
75     std::vector<std::shared_ptr<VCardEventData>> GetEventDatas();
76     std::vector<std::shared_ptr<VCardNoteData>> GetNotes();
77     std::shared_ptr<VCardBirthdayData> GetBirthdays();
78     std::vector<std::shared_ptr<VCardGroupData>> GetGroups();
79     std::string GetUid();
80 
81 private:
82     void BuildValuesBucket(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues,
83         std::shared_ptr<VCardContactData> contactData);
84     template<typename T>
85     void BuildValuesBuckets(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues,
86         std::vector<std::shared_ptr<T>> &contactDatas);
87     template<typename T>
88     void BuildData(
89         std::shared_ptr<DataShare::DataShareResultSet> resultSet, std::vector<std::shared_ptr<T>> &contactDatas);
90     int32_t BuildOtherData(int32_t typeId, std::shared_ptr<DataShare::DataShareResultSet> resultSet);
91     void AddDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values,
92         std::string propValue, std::vector<std::string> groups,
93         std::map<std::string, std::vector<std::string>> parasMap);
94     void HandleName(std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap);
95     void HandleSortAsName(std::map<std::string, std::vector<std::string>> parasMap);
96     void HandleNickName(std::string nickName);
97     void HandlePhoneticNameFromSound(std::vector<std::string> elems);
98     void AddPostal(int32_t type, std::vector<std::string> propValueList, std::string label, bool isPrimary);
99     void AddEmail(int32_t type, std::string data, std::string label, std::string displayname, bool isPrimary);
100     void HandleOrgValue(int32_t type, std::vector<std::string> orgList,
101         std::map<std::string, std::vector<std::string>> paramMap, bool isPrimary);
102     std::string BuildSinglePhoneticNameFromSortAsParam(std::map<std::string, std::vector<std::string>> paramMap);
103     void AddNewOrganization(std::string organizationName, std::string departmentName, std::string company,
104         std::string titleName, std::string phoneticName, int32_t type, bool isPrimary);
105     void HandleTitleValue(std::string title);
106     void AddPhotoBytes(std::string formatName, std::string photoBytes, bool isPrimary);
107     void HandleSipCase(std::string propValue, std::vector<std::string> typeCollection);
108     void AddPhone(int32_t type, std::string data, std::string label, bool isPrimary);
109     void AddSip(std::string sipData, int32_t type, std::string label, bool isPrimary);
110     void AddNote(const std::string note);
111     void AddIms(std::string name, std::string rawValue, std::string propValue, std::vector<std::string> values,
112         std::map<std::string, std::vector<std::string>> parasMap);
113     void AddNameData(std::string name, std::string rawValue, std::vector<std::string> values,
114         std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
115     void AddCustom(
116         std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
117     void SetSip(std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
118     void AddSipData(
119         std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue);
120     void AddPhonesData(std::string rawValue, std::string propValue, std::vector<std::string> values,
121         std::map<std::string, std::vector<std::string>> parasMap);
122     void AddOrganizationsData(std::string rawValue, std::string propValue, std::vector<std::string> values,
123         std::map<std::string, std::vector<std::string>> parasMap);
124     void AddEmailsData(std::string rawValue, std::string propValue, std::vector<std::string> values,
125         std::map<std::string, std::vector<std::string>> parasMap);
126     void AddPostalDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
127         std::map<std::string, std::vector<std::string>> parasMap);
128     void AddSoundDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
129         std::map<std::string, std::vector<std::string>> parasMap);
130     void AddPhotoDatas(std::string byte, std::string rawValue, std::string propValue, std::vector<std::string> values,
131         std::map<std::string, std::vector<std::string>> parasMap);
132     void AddSkypePstnNumDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
133     void AddWebSiteDatas(std::string rawValue, std::string propValue, std::vector<std::string> values,
134         std::map<std::string, std::vector<std::string>> parasMap);
135     void AddBirthdayDatas(std::string rawValue);
136     void AddAnniversaryDatas(std::string propValue);
137     void AddImppDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
138     void HandlePhoneCase(std::string phoneNumber, std::string rawValue, std::string propValue,
139         std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap);
140     void AddOtherDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values,
141         std::string propValue, std::vector<std::string> groups,
142         std::map<std::string, std::vector<std::string>> parasMap);
143     std::vector<std::string> GetValueListFromParasMap(
144         std::string rawValue, std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
145     void CheckNameExist();
146     std::string ConvertHarmonyEvents(std::string type, std::string value);
147     void AddGroups(std::string rawValue);
148     void AddRemainDatas(std::string name, std::string rawValue, std::vector<std::string> values,
149         std::string propValue, std::map<std::string, std::vector<std::string>> parasMap);
150     void AddUID(std::string rawValue);
151     bool HasValidNameData();
152     void UpdateDisplayName();
153     bool IsNameAllPrintableAscii();
154     void FillFullName(const std::string &name, const std::string &split, std::string &fullName);
155 
156 private:
157     const int32_t SORT_NAME_MAX_VALUE_SIZE = 3;
158     const int32_t N_MAX_VALUE_SIZE = 5;
159     const int32_t N_SUFFIX_VALUE_INDEX = 4;
160     const int32_t N_PREFIX_VALUE_INDEX = 3;
161     const int32_t N_MIDDLE_VALUE_INDEX = 2;
162     const int32_t N_GIVEN_VALUE_INDEX = 1;
163     const int32_t N_FAMILY_VALUE_INDEX = 0;
164     const int32_t PHONETIC_FAMILY_VALUE_INDEX = 0;
165     const int32_t PHONETIC_GIVEN_VALUE_INDEX = 1;
166     const int32_t PHONETIC_MIDDLE_VALUE_INDEX = 2;
167     const int32_t PHONE_NAME_SOUND_MAX_VALUE_SIZE = 3;
168     std::string vCardType_;
169     std::shared_ptr<VCardNameData> nameData_;
170     std::shared_ptr<VCardBirthdayData> birthday_;
171     std::shared_ptr<VCardAnniversaryData> anniversary_;
172     std::vector<std::shared_ptr<VCardNameData>> names_;
173     std::vector<std::shared_ptr<VCardPhoneData>> phones_;
174     std::vector<std::shared_ptr<VCardRelationData>> relations_;
175     std::vector<std::shared_ptr<VCardEmailData>> emails_;
176     std::vector<std::shared_ptr<VCardPostalData>> postals_;
177     std::vector<std::shared_ptr<VCardOrganizationData>> organizations_;
178     std::vector<std::shared_ptr<VCardImData>> ims_;
179     std::vector<std::shared_ptr<VCardPhotoData>> photos_;
180     std::vector<std::shared_ptr<VCardWebsiteData>> websites_;
181     std::vector<std::shared_ptr<VCardSipData>> sips_;
182     std::vector<std::shared_ptr<VCardNicknameData>> nicknames_;
183     std::vector<std::shared_ptr<VCardNoteData>> notes_;
184     std::vector<std::shared_ptr<VCardEventData>> events_;
185     std::vector<std::shared_ptr<VCardGroupData>> groups_;
186     std::shared_ptr<VCardUidData> uid_;
187 };
188 } // namespace Telephony
189 } // namespace OHOS
190 #endif // OHOS_OHOS_VCARD_CONSRACT_H
191