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