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