1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef _nsAddrDatabase_H_ 7 #define _nsAddrDatabase_H_ 8 9 #include "nsIAbCard.h" 10 #include "nsIFile.h" 11 #include "mdb.h" 12 #include "nsString.h" 13 #include "nsCOMPtr.h" 14 15 class nsAddrDatabase { 16 using PathString = mozilla::PathString; 17 18 public: 19 nsresult SetDbPath(nsIFile* aDbPath); 20 nsresult Close(bool forceCommit); 21 nsresult OpenMDB(nsIFile* dbName, bool create); 22 nsresult CloseMDB(bool commit); 23 nsresult ForceClosed(void); 24 nsresult EnumerateCards(nsISimpleEnumerator** _retval); 25 nsresult EnumerateListAddresses(uint32_t listRowID, 26 nsISimpleEnumerator** _retval); 27 28 nsAddrDatabase(); 29 virtual ~nsAddrDatabase(); 30 31 nsresult GetMDBFactory(nsIMdbFactory** aMdbFactory); GetEnv()32 nsIMdbEnv* GetEnv() { return m_mdbEnv; } 33 uint32_t GetCurVersion(); 34 nsIMdbTableRowCursor* GetTableRowCursor(); GetPabTable()35 nsIMdbTable* GetPabTable() { return m_mdbPabTable; } 36 37 nsresult CreateABCard(nsIMdbRow* cardRow, mdb_id listRowID, 38 nsIAbCard** result); 39 nsresult CreateABListCard(nsIMdbRow* listRow, nsIAbCard** result); 40 IsListRowScopeToken(mdb_scope scope)41 bool IsListRowScopeToken(mdb_scope scope) { 42 return (scope == m_ListRowScopeToken) ? true : false; 43 } IsCardRowScopeToken(mdb_scope scope)44 bool IsCardRowScopeToken(mdb_scope scope) { 45 return (scope == m_CardRowScopeToken) ? true : false; 46 } IsDataRowScopeToken(mdb_scope scope)47 bool IsDataRowScopeToken(mdb_scope scope) { 48 return (scope == m_DataRowScopeToken) ? true : false; 49 } 50 nsresult GetCardRowByRowID(mdb_id rowID, nsIMdbRow** dbRow); 51 nsresult GetListRowByRowID(mdb_id rowID, nsIMdbRow** dbRow); 52 53 uint32_t GetListAddressTotal(nsIMdbRow* listRow); 54 nsresult GetAddressRowByPos(nsIMdbRow* listRow, uint16_t pos, 55 nsIMdbRow** cardRow); 56 57 nsresult InitCardFromRow(nsIAbCard* aNewCard, nsIMdbRow* aCardRow); 58 59 protected: 60 void YarnToUInt32(struct mdbYarn* yarn, uint32_t* pResult); 61 nsresult GetStringColumn(nsIMdbRow* cardRow, mdb_token outToken, 62 nsString& str); 63 nsresult GetIntColumn(nsIMdbRow* cardRow, mdb_token outToken, 64 uint32_t* pValue, uint32_t defaultValue); 65 nsresult GetListCardFromDB(nsIAbCard* listCard, nsIMdbRow* listRow); 66 nsresult CreateCard(nsIMdbRow* cardRow, mdb_id listRowID, nsIAbCard** result); 67 68 // mdb bookkeeping stuff 69 nsresult InitExistingDB(); 70 nsresult InitMDBInfo(); 71 72 nsIMdbEnv* m_mdbEnv; // to be used in all the db calls. 73 nsIMdbStore* m_mdbStore; 74 nsIMdbTable* m_mdbPabTable; 75 nsCOMPtr<nsIFile> m_dbName; 76 bool m_mdbTokensInitialized; 77 78 mdb_kind m_PabTableKind; 79 mdb_kind m_DeletedCardsTableKind; 80 81 mdb_scope m_CardRowScopeToken; 82 mdb_scope m_ListRowScopeToken; 83 mdb_scope m_DataRowScopeToken; 84 85 mdb_token m_UIDColumnToken; 86 mdb_token m_FirstNameColumnToken; 87 mdb_token m_LastNameColumnToken; 88 mdb_token m_PhoneticFirstNameColumnToken; 89 mdb_token m_PhoneticLastNameColumnToken; 90 mdb_token m_DisplayNameColumnToken; 91 mdb_token m_NickNameColumnToken; 92 mdb_token m_PriEmailColumnToken; 93 mdb_token m_2ndEmailColumnToken; 94 mdb_token m_DefaultEmailColumnToken; 95 mdb_token m_CardTypeColumnToken; 96 mdb_token m_WorkPhoneColumnToken; 97 mdb_token m_HomePhoneColumnToken; 98 mdb_token m_FaxColumnToken; 99 mdb_token m_PagerColumnToken; 100 mdb_token m_CellularColumnToken; 101 mdb_token m_WorkPhoneTypeColumnToken; 102 mdb_token m_HomePhoneTypeColumnToken; 103 mdb_token m_FaxTypeColumnToken; 104 mdb_token m_PagerTypeColumnToken; 105 mdb_token m_CellularTypeColumnToken; 106 mdb_token m_HomeAddressColumnToken; 107 mdb_token m_HomeAddress2ColumnToken; 108 mdb_token m_HomeCityColumnToken; 109 mdb_token m_HomeStateColumnToken; 110 mdb_token m_HomeZipCodeColumnToken; 111 mdb_token m_HomeCountryColumnToken; 112 mdb_token m_WorkAddressColumnToken; 113 mdb_token m_WorkAddress2ColumnToken; 114 mdb_token m_WorkCityColumnToken; 115 mdb_token m_WorkStateColumnToken; 116 mdb_token m_WorkZipCodeColumnToken; 117 mdb_token m_WorkCountryColumnToken; 118 mdb_token m_JobTitleColumnToken; 119 mdb_token m_DepartmentColumnToken; 120 mdb_token m_CompanyColumnToken; 121 mdb_token m_AimScreenNameColumnToken; 122 mdb_token m_AnniversaryYearColumnToken; 123 mdb_token m_AnniversaryMonthColumnToken; 124 mdb_token m_AnniversaryDayColumnToken; 125 mdb_token m_SpouseNameColumnToken; 126 mdb_token m_FamilyNameColumnToken; 127 mdb_token m_DefaultAddressColumnToken; 128 mdb_token m_CategoryColumnToken; 129 mdb_token m_WebPage1ColumnToken; 130 mdb_token m_WebPage2ColumnToken; 131 mdb_token m_BirthYearColumnToken; 132 mdb_token m_BirthMonthColumnToken; 133 mdb_token m_BirthDayColumnToken; 134 mdb_token m_Custom1ColumnToken; 135 mdb_token m_Custom2ColumnToken; 136 mdb_token m_Custom3ColumnToken; 137 mdb_token m_Custom4ColumnToken; 138 mdb_token m_NotesColumnToken; 139 mdb_token m_LastModDateColumnToken; 140 mdb_token m_RecordKeyColumnToken; 141 mdb_token m_LowerPriEmailColumnToken; 142 mdb_token m_Lower2ndEmailColumnToken; 143 144 mdb_token m_MailFormatColumnToken; 145 mdb_token m_PopularityIndexColumnToken; 146 147 mdb_token m_AddressCharSetColumnToken; 148 mdb_token m_LastRecordKeyColumnToken; 149 150 mdb_token m_ListNameColumnToken; 151 mdb_token m_ListNickNameColumnToken; 152 mdb_token m_ListDescriptionColumnToken; 153 mdb_token m_ListTotalColumnToken; 154 mdb_token m_LowerListNameColumnToken; 155 156 nsCOMPtr<nsIMdbFactory> mMdbFactory; 157 }; 158 159 #endif 160