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 44 namespace OHOS { 45 namespace Telephony { 46 class VCardContact { 47 public: VCardContact()48 VCardContact() 49 { 50 vCardType_ = VERSION_21; 51 nameData_ = std::make_shared<VCardNameData>(); 52 birthday_ = std::make_shared<VCardBirthdayData>(); 53 anniversary_ = std::make_shared<VCardAnniversaryData>(); 54 }; ~VCardContact()55 ~VCardContact() {} 56 void AddRawData(std::shared_ptr<VCardRawData> rawData, int32_t &errorCode); 57 int32_t BuildContactData(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues); 58 int32_t BuildContact(std::shared_ptr<DataShare::DataShareResultSet> resultSet); 59 void Init(); 60 std::shared_ptr<VCardNameData> GetNameData(); 61 std::vector<std::shared_ptr<VCardNameData>> GetNames(); 62 std::vector<std::shared_ptr<VCardRelationData>> GetRelations(); 63 std::vector<std::shared_ptr<VCardImData>> GetIms(); 64 std::vector<std::shared_ptr<VCardSipData>> GetSips(); 65 std::vector<std::shared_ptr<VCardPhoneData>> GetPhones(); 66 std::vector<std::shared_ptr<VCardOrganizationData>> GetOrganizations(); 67 std::vector<std::shared_ptr<VCardWebsiteData>> GetWebsites(); 68 std::vector<std::shared_ptr<VCardPhotoData>> GetPhotos(); 69 std::vector<std::shared_ptr<VCardEmailData>> GetEmails(); 70 std::vector<std::shared_ptr<VCardNicknameData>> GetNicknames(); 71 std::vector<std::shared_ptr<VCardPostalData>> GetPostalDatas(); 72 std::vector<std::shared_ptr<VCardEventData>> GetEventDatas(); 73 std::vector<std::shared_ptr<VCardNoteData>> GetNotes(); 74 std::shared_ptr<VCardBirthdayData> GetBirthdays(); 75 std::vector<std::shared_ptr<VCardGroupData>> GetGroups(); 76 77 private: 78 void BuildValuesBucket(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues, 79 std::shared_ptr<VCardContactData> contactData); 80 template<typename T> 81 void BuildValuesBuckets(int32_t rawId, std::vector<DataShare::DataShareValuesBucket> &contactDataValues, 82 std::vector<std::shared_ptr<T>> &contactDatas); 83 template<typename T> 84 void BuildData( 85 std::shared_ptr<DataShare::DataShareResultSet> resultSet, std::vector<std::shared_ptr<T>> &contactDatas); 86 int32_t BuildOneData(std::shared_ptr<DataShare::DataShareResultSet> resultSet); 87 int32_t BuildOtherData(int32_t typeId, std::shared_ptr<DataShare::DataShareResultSet> resultSet); 88 void AddDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values, 89 std::string propValue, std::vector<std::string> groups, 90 std::map<std::string, std::vector<std::string>> parasMap); 91 void HandleName(std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap); 92 void HandleSortAsName(std::map<std::string, std::vector<std::string>> parasMap); 93 void HandleNickName(std::string nickName); 94 void HandlePhoneticNameFromSound(std::vector<std::string> elems); 95 void AddPostal(int32_t type, std::vector<std::string> propValueList, std::string label, bool isPrimary); 96 void AddEmail(int32_t type, std::string data, std::string label, std::string displayname, bool isPrimary); 97 void HandleOrgValue(int32_t type, std::vector<std::string> orgList, 98 std::map<std::string, std::vector<std::string>> paramMap, bool isPrimary); 99 std::string BuildSinglePhoneticNameFromSortAsParam(std::map<std::string, std::vector<std::string>> paramMap); 100 void AddNewOrganization(std::string organizationName, std::string departmentName, std::string company, 101 std::string titleName, std::string phoneticName, int32_t type, bool isPrimary); 102 void HandleTitleValue(std::string title); 103 void AddPhotoBytes(std::string formatName, std::string photoBytes, bool isPrimary); 104 void HandleSipCase(std::string propValue, std::vector<std::string> typeCollection); 105 void AddPhone(int32_t type, std::string data, std::string label, bool isPrimary); 106 void AddSip(std::string sipData, int32_t type, std::string label, bool isPrimary); 107 void AddNote(const std::string note); 108 void AddIms(std::string name, std::string rawValue, std::string propValue, std::vector<std::string> values, 109 std::map<std::string, std::vector<std::string>> parasMap); 110 void AddNameData(std::string name, std::string rawValue, std::vector<std::string> values, 111 std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 112 void AddCustom( 113 std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 114 void SetSip(std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 115 void AddSipData( 116 std::string rawValue, std::map<std::string, std::vector<std::string>> parasMap, std::string propValue); 117 void AddPhonesData(std::string rawValue, std::string propValue, std::vector<std::string> values, 118 std::map<std::string, std::vector<std::string>> parasMap); 119 void AddOrganizationsData(std::string rawValue, std::string propValue, std::vector<std::string> values, 120 std::map<std::string, std::vector<std::string>> parasMap); 121 void AddEmailsData(std::string rawValue, std::string propValue, std::vector<std::string> values, 122 std::map<std::string, std::vector<std::string>> parasMap); 123 void AddPostalDatas(std::string rawValue, std::string propValue, std::vector<std::string> values, 124 std::map<std::string, std::vector<std::string>> parasMap); 125 void AddSoundDatas(std::string rawValue, std::string propValue, std::vector<std::string> values, 126 std::map<std::string, std::vector<std::string>> parasMap); 127 void AddPhotoDatas(std::string byte, std::string rawValue, std::string propValue, std::vector<std::string> values, 128 std::map<std::string, std::vector<std::string>> parasMap); 129 void AddSkypePstnNumDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 130 void AddWebSiteDatas(std::string rawValue, std::string propValue, std::vector<std::string> values, 131 std::map<std::string, std::vector<std::string>> parasMap); 132 void AddBirthdayDatas(std::string rawValue); 133 void AddAnniversaryDatas(std::string propValue); 134 void AddImppDatas(std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 135 void HandlePhoneCase(std::string phoneNumber, std::string rawValue, std::string propValue, 136 std::vector<std::string> values, std::map<std::string, std::vector<std::string>> parasMap); 137 void AddOtherDatas(std::string name, std::string rawValue, std::string byte, std::vector<std::string> values, 138 std::string propValue, std::vector<std::string> groups, 139 std::map<std::string, std::vector<std::string>> parasMap); 140 std::vector<std::string> GetValueListFromParasMap( 141 std::string rawValue, std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 142 void CheckNameExist(); 143 std::string ConvertHarmonyEvents(std::string type, std::string value); 144 void AddGroups(std::string rawValue); 145 void AddRemainDatas(std::string name, std::string rawValue, std::vector<std::string> values, 146 std::string propValue, std::map<std::string, std::vector<std::string>> parasMap); 147 148 private: 149 const int32_t SORT_NAME_MAX_VALUE_SIZE = 3; 150 const int32_t N_MAX_VALUE_SIZE = 5; 151 const int32_t N_SUFFIX_VALUE_INDEX = 4; 152 const int32_t N_PREFIX_VALUE_INDEX = 3; 153 const int32_t N_MIDDLE_VALUE_INDEX = 2; 154 const int32_t N_GIVEN_VALUE_INDEX = 1; 155 const int32_t N_FAMILY_VALUE_INDEX = 0; 156 const int32_t PHONETIC_FAMILY_VALUE_INDEX = 0; 157 const int32_t PHONETIC_GIVEN_VALUE_INDEX = 1; 158 const int32_t PHONETIC_MIDDLE_VALUE_INDEX = 2; 159 const int32_t PHONE_NAME_SOUND_MAX_VALUE_SIZE = 3; 160 std::string vCardType_; 161 std::shared_ptr<VCardNameData> nameData_; 162 std::shared_ptr<VCardBirthdayData> birthday_; 163 std::shared_ptr<VCardAnniversaryData> anniversary_; 164 std::vector<std::shared_ptr<VCardNameData>> names_; 165 std::vector<std::shared_ptr<VCardPhoneData>> phones_; 166 std::vector<std::shared_ptr<VCardRelationData>> relations_; 167 std::vector<std::shared_ptr<VCardEmailData>> emails_; 168 std::vector<std::shared_ptr<VCardPostalData>> postals_; 169 std::vector<std::shared_ptr<VCardOrganizationData>> organizations_; 170 std::vector<std::shared_ptr<VCardImData>> ims_; 171 std::vector<std::shared_ptr<VCardPhotoData>> photos_; 172 std::vector<std::shared_ptr<VCardWebsiteData>> websites_; 173 std::vector<std::shared_ptr<VCardSipData>> sips_; 174 std::vector<std::shared_ptr<VCardNicknameData>> nicknames_; 175 std::vector<std::shared_ptr<VCardNoteData>> notes_; 176 std::vector<std::shared_ptr<VCardEventData>> events_; 177 std::vector<std::shared_ptr<VCardGroupData>> groups_; 178 }; 179 } // namespace Telephony 180 } // namespace OHOS 181 #endif // OHOS_OHOS_VCARD_CONSRACT_H 182