diff options
Diffstat (limited to 'mailnews/addrbook/src/nsAddrDatabase.h')
-rw-r--r-- | mailnews/addrbook/src/nsAddrDatabase.h | 439 |
1 files changed, 439 insertions, 0 deletions
diff --git a/mailnews/addrbook/src/nsAddrDatabase.h b/mailnews/addrbook/src/nsAddrDatabase.h new file mode 100644 index 000000000..3b4e4eee6 --- /dev/null +++ b/mailnews/addrbook/src/nsAddrDatabase.h @@ -0,0 +1,439 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef _nsAddrDatabase_H_ +#define _nsAddrDatabase_H_ + +#include "mozilla/Attributes.h" +#include "nsIAddrDatabase.h" +#include "mdb.h" +#include "nsStringGlue.h" +#include "nsIAddrDBListener.h" +#include "nsCOMPtr.h" +#include "nsTObserverArray.h" +#include "nsWeakPtr.h" +#include "nsIWeakReferenceUtils.h" + +typedef enum +{ + AB_NotifyInserted, + AB_NotifyDeleted, + AB_NotifyPropertyChanged +} AB_NOTIFY_CODE; + +class nsAddrDatabase : public nsIAddrDatabase +{ +public: + NS_DECL_THREADSAFE_ISUPPORTS + NS_DECL_NSIADDRDBANNOUNCER + ////////////////////////////////////////////////////////////////////////////// + // nsIAddrDatabase methods: + + NS_IMETHOD GetDbPath(nsIFile * *aDbPath) override; + NS_IMETHOD SetDbPath(nsIFile * aDbPath) override; + NS_IMETHOD Open(nsIFile *aMabFile, bool aCreate, bool upgrading, nsIAddrDatabase **pCardDB) override; + NS_IMETHOD Close(bool forceCommit) override; + NS_IMETHOD OpenMDB(nsIFile *dbName, bool create) override; + NS_IMETHOD CloseMDB(bool commit) override; + NS_IMETHOD Commit(uint32_t commitType) override; + NS_IMETHOD ForceClosed() override; + + NS_IMETHOD CreateNewCardAndAddToDB(nsIAbCard *newCard, bool notify, nsIAbDirectory *parent) override; + NS_IMETHOD CreateNewListCardAndAddToDB(nsIAbDirectory *list, uint32_t listRowID, nsIAbCard *newCard, bool notify) override; + NS_IMETHOD CreateMailListAndAddToDB(nsIAbDirectory *newList, bool notify, nsIAbDirectory *parent) override; + NS_IMETHOD EnumerateCards(nsIAbDirectory *directory, nsISimpleEnumerator **result) override; + NS_IMETHOD GetMailingListsFromDB(nsIAbDirectory *parentDir) override; + NS_IMETHOD EnumerateListAddresses(nsIAbDirectory *directory, nsISimpleEnumerator **result) override; + NS_IMETHOD DeleteCard(nsIAbCard *newCard, bool notify, nsIAbDirectory *parent) override; + NS_IMETHOD EditCard(nsIAbCard *card, bool notify, nsIAbDirectory *parent) override; + NS_IMETHOD ContainsCard(nsIAbCard *card, bool *hasCard) override; + NS_IMETHOD DeleteMailList(nsIAbDirectory *aMailList, nsIAbDirectory *aParent) override; + NS_IMETHOD EditMailList(nsIAbDirectory *mailList, nsIAbCard *listCard, bool notify) override; + NS_IMETHOD ContainsMailList(nsIAbDirectory *mailList, bool *hasCard) override; + NS_IMETHOD DeleteCardFromMailList(nsIAbDirectory *mailList, nsIAbCard *card, bool aNotify) override; + NS_IMETHOD GetCardFromAttribute(nsIAbDirectory *aDirectory, const char *aName, + const nsACString &aValue, + bool aCaseInsensitive, nsIAbCard **card) override; + NS_IMETHOD GetCardsFromAttribute(nsIAbDirectory *aDirectory, + const char *aName, + const nsACString & uUTF8Value, + bool aCaseInsensitive, + nsISimpleEnumerator **cards) override; + NS_IMETHOD GetNewRow(nsIMdbRow * *newRow) override; + NS_IMETHOD GetNewListRow(nsIMdbRow * *newRow) override; + NS_IMETHOD AddCardRowToDB(nsIMdbRow *newRow) override; + NS_IMETHOD AddLdifListMember(nsIMdbRow* row, const char * value) override; + + NS_IMETHOD GetDeletedCardList(nsIArray **aResult) override; + NS_IMETHOD GetDeletedCardCount(uint32_t *aCount) override; + NS_IMETHOD PurgeDeletedCardTable(); + + NS_IMETHOD AddFirstName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_FirstNameColumnToken, value); } + + NS_IMETHOD AddLastName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_LastNameColumnToken, value); } + + NS_IMETHOD AddPhoneticFirstName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_PhoneticFirstNameColumnToken, value); } + + NS_IMETHOD AddPhoneticLastName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_PhoneticLastNameColumnToken, value); } + + NS_IMETHOD AddDisplayName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_DisplayNameColumnToken, value); } + + NS_IMETHOD AddNickName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_NickNameColumnToken, value); } + + NS_IMETHOD AddPrimaryEmail(nsIMdbRow * row, const char * value) override; + + NS_IMETHOD Add2ndEmail(nsIMdbRow * row, const char * value) override; + + NS_IMETHOD AddPreferMailFormat(nsIMdbRow * row, uint32_t value) override + { return AddIntColumn(row, m_MailFormatColumnToken, value); } + + NS_IMETHOD AddPopularityIndex(nsIMdbRow * row, uint32_t value) override + { return AddIntColumn(row, m_PopularityIndexColumnToken, value); } + + NS_IMETHOD AddWorkPhone(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkPhoneColumnToken, value); } + + NS_IMETHOD AddHomePhone(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomePhoneColumnToken, value); } + + NS_IMETHOD AddFaxNumber(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_FaxColumnToken, value); } + + NS_IMETHOD AddPagerNumber(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_PagerColumnToken, value); } + + NS_IMETHOD AddCellularNumber(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_CellularColumnToken, value); } + + NS_IMETHOD AddWorkPhoneType(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkPhoneTypeColumnToken, value); } + + NS_IMETHOD AddHomePhoneType(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomePhoneTypeColumnToken, value); } + + NS_IMETHOD AddFaxNumberType(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_FaxTypeColumnToken, value); } + + NS_IMETHOD AddPagerNumberType(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_PagerTypeColumnToken, value); } + + NS_IMETHOD AddCellularNumberType(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_CellularTypeColumnToken, value); } + + NS_IMETHOD AddHomeAddress(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomeAddressColumnToken, value); } + + NS_IMETHOD AddHomeAddress2(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomeAddress2ColumnToken, value); } + + NS_IMETHOD AddHomeCity(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomeCityColumnToken, value); } + + NS_IMETHOD AddHomeState(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomeStateColumnToken, value); } + + NS_IMETHOD AddHomeZipCode(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomeZipCodeColumnToken, value); } + + NS_IMETHOD AddHomeCountry(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_HomeCountryColumnToken, value); } + + NS_IMETHOD AddWorkAddress(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkAddressColumnToken, value); } + + NS_IMETHOD AddWorkAddress2(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkAddress2ColumnToken, value); } + + NS_IMETHOD AddWorkCity(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkCityColumnToken, value); } + + NS_IMETHOD AddWorkState(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkStateColumnToken, value); } + + NS_IMETHOD AddWorkZipCode(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkZipCodeColumnToken, value); } + + NS_IMETHOD AddWorkCountry(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WorkCountryColumnToken, value); } + + NS_IMETHOD AddJobTitle(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_JobTitleColumnToken, value); } + + NS_IMETHOD AddDepartment(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_DepartmentColumnToken, value); } + + NS_IMETHOD AddCompany(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_CompanyColumnToken, value); } + + NS_IMETHOD AddAimScreenName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_AimScreenNameColumnToken, value); } + + NS_IMETHOD AddAnniversaryYear(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_AnniversaryYearColumnToken, value); } + + NS_IMETHOD AddAnniversaryMonth(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_AnniversaryMonthColumnToken, value); } + + NS_IMETHOD AddAnniversaryDay(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_AnniversaryDayColumnToken, value); } + + NS_IMETHOD AddSpouseName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_SpouseNameColumnToken, value); } + + NS_IMETHOD AddFamilyName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_FamilyNameColumnToken, value); } + + NS_IMETHOD AddDefaultAddress(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_DefaultAddressColumnToken, value); } + + NS_IMETHOD AddCategory(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_CategoryColumnToken, value); } + + NS_IMETHOD AddWebPage1(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WebPage1ColumnToken, value); } + + NS_IMETHOD AddWebPage2(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_WebPage2ColumnToken, value); } + + NS_IMETHOD AddBirthYear(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_BirthYearColumnToken, value); } + + NS_IMETHOD AddBirthMonth(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_BirthMonthColumnToken, value); } + + NS_IMETHOD AddBirthDay(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_BirthDayColumnToken, value); } + + NS_IMETHOD AddCustom1(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_Custom1ColumnToken, value); } + + NS_IMETHOD AddCustom2(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_Custom2ColumnToken, value); } + + NS_IMETHOD AddCustom3(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_Custom3ColumnToken, value); } + + NS_IMETHOD AddCustom4(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_Custom4ColumnToken, value); } + + NS_IMETHOD AddNotes(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_NotesColumnToken, value); } + + NS_IMETHOD AddListName(nsIMdbRow * row, const char * value) override; + + NS_IMETHOD AddListNickName(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_ListNickNameColumnToken, value); } + + NS_IMETHOD AddListDescription(nsIMdbRow * row, const char * value) override + { return AddCharStringColumn(row, m_ListDescriptionColumnToken, value); } + + + NS_IMETHOD AddListDirNode(nsIMdbRow * listRow) override; + + NS_IMETHOD FindMailListbyUnicodeName(const char16_t *listName, bool *exist) override; + + NS_IMETHOD GetCardCount(uint32_t *count) override; + + NS_IMETHOD SetCardValue(nsIAbCard *card, const char *name, const char16_t *value, bool notify) override; + NS_IMETHOD GetCardValue(nsIAbCard *card, const char *name, char16_t **value) override; + // nsAddrDatabase methods: + + nsAddrDatabase(); + + void GetMDBFactory(nsIMdbFactory ** aMdbFactory); + nsIMdbEnv *GetEnv() {return m_mdbEnv;} + uint32_t GetCurVersion(); + nsIMdbTableRowCursor *GetTableRowCursor(); + nsIMdbTable *GetPabTable() {return m_mdbPabTable;} + + static nsAddrDatabase* FindInCache(nsIFile *dbName); + + static void CleanupCache(); + + nsresult CreateABCard(nsIMdbRow* cardRow, mdb_id listRowID, nsIAbCard **result); + nsresult CreateABListCard(nsIMdbRow* listRow, nsIAbCard **result); + nsresult CreateABList(nsIMdbRow* listRow, nsIAbDirectory **result); + + bool IsListRowScopeToken(mdb_scope scope) { return (scope == m_ListRowScopeToken) ? true: false; } + bool IsCardRowScopeToken(mdb_scope scope) { return (scope == m_CardRowScopeToken) ? true: false; } + bool IsDataRowScopeToken(mdb_scope scope) { return (scope == m_DataRowScopeToken) ? true: false; } + nsresult GetCardRowByRowID(mdb_id rowID, nsIMdbRow **dbRow); + nsresult GetListRowByRowID(mdb_id rowID, nsIMdbRow **dbRow); + + uint32_t GetListAddressTotal(nsIMdbRow* listRow); + nsresult GetAddressRowByPos(nsIMdbRow* listRow, uint16_t pos, nsIMdbRow** cardRow); + + NS_IMETHOD AddListCardColumnsToRow(nsIAbCard *aPCard, nsIMdbRow *aPListRow, uint32_t aPos, nsIAbCard** aPNewCard, bool aInMailingList, nsIAbDirectory *aParent, nsIAbDirectory *aRoot) override; + NS_IMETHOD InitCardFromRow(nsIAbCard *aNewCard, nsIMdbRow* aCardRow) override; + NS_IMETHOD SetListAddressTotal(nsIMdbRow* aListRow, uint32_t aTotal) override; + NS_IMETHOD FindRowByCard(nsIAbCard * card,nsIMdbRow **aRow) override; + +protected: + virtual ~nsAddrDatabase(); + + static void RemoveFromCache(nsAddrDatabase* pAddrDB); + bool MatchDbName(nsIFile *dbName); // returns TRUE if they match + + void YarnToUInt32(struct mdbYarn *yarn, uint32_t *pResult); + void GetCharStringYarn(char* str, struct mdbYarn* strYarn); + void GetStringYarn(const nsAString & aStr, struct mdbYarn* strYarn); + void GetIntYarn(uint32_t nValue, struct mdbYarn* intYarn); + nsresult AddCharStringColumn(nsIMdbRow* cardRow, mdb_column inColumn, const char* str); + nsresult AddStringColumn(nsIMdbRow* aCardRow, mdb_column aInColumn, const nsAString & aStr); + nsresult AddIntColumn(nsIMdbRow* cardRow, mdb_column inColumn, uint32_t nValue); + nsresult AddBoolColumn(nsIMdbRow* cardRow, mdb_column inColumn, bool bValue); + nsresult GetStringColumn(nsIMdbRow *cardRow, mdb_token outToken, nsString& str); + nsresult GetIntColumn(nsIMdbRow *cardRow, mdb_token outToken, + uint32_t* pValue, uint32_t defaultValue); + nsresult GetBoolColumn(nsIMdbRow *cardRow, mdb_token outToken, bool* pValue); + nsresult GetListCardFromDB(nsIAbCard *listCard, nsIMdbRow* listRow); + nsresult GetListFromDB(nsIAbDirectory *newCard, nsIMdbRow* listRow); + nsresult AddRecordKeyColumnToRow(nsIMdbRow *pRow); + nsresult AddAttributeColumnsToRow(nsIAbCard *card, nsIMdbRow *cardRow); + nsresult AddListAttributeColumnsToRow(nsIAbDirectory *list, nsIMdbRow *listRow, nsIAbDirectory *parent); + nsresult CreateCard(nsIMdbRow* cardRow, mdb_id listRowID, nsIAbCard **result); + nsresult CreateCardFromDeletedCardsTable(nsIMdbRow* cardRow, mdb_id listRowID, nsIAbCard **result); + nsresult DeleteCardFromListRow(nsIMdbRow* pListRow, mdb_id cardRowID); + void DeleteCardFromAllMailLists(mdb_id cardRowID); + nsresult NotifyListEntryChange(uint32_t abCode, nsIAbDirectory *dir); + + nsresult AddLowercaseColumn(nsIMdbRow * row, mdb_token columnToken, const char* utf8String); + nsresult GetRowFromAttribute(const char *aName, const nsACString &aUTF8Value, + bool aCaseInsensitive, nsIMdbRow **aCardRow, + mdb_pos *aRowPos); + + static nsTArray<nsAddrDatabase*>* m_dbCache; + static nsTArray<nsAddrDatabase*>* GetDBCache(); + + // mdb bookkeeping stuff + nsresult InitExistingDB(); + nsresult InitNewDB(); + nsresult InitMDBInfo(); + nsresult InitPabTable(); + nsresult InitDeletedCardsTable(bool aCreate); + nsresult AddRowToDeletedCardsTable(nsIAbCard *card, nsIMdbRow **pCardRow); + nsresult DeleteRowFromDeletedCardsTable(nsIMdbRow *pCardRow); + + nsresult InitLastRecorKey(); + nsresult GetDataRow(nsIMdbRow **pDataRow); + nsresult GetLastRecordKey(); + nsresult UpdateLastRecordKey(); + nsresult CheckAndUpdateRecordKey(); + nsresult UpdateLowercaseEmailListName(); + nsresult ConvertAndAddLowercaseColumn(nsIMdbRow * row, mdb_token fromCol, mdb_token toCol); + nsresult AddUnicodeToColumn(nsIMdbRow * row, mdb_token colToken, mdb_token lowerCaseColToken, const char16_t* pUnicodeStr); + + nsresult DeleteRow(nsIMdbTable* dbTable, nsIMdbRow* dbRow); + + nsIMdbEnv *m_mdbEnv; // to be used in all the db calls. + nsIMdbStore *m_mdbStore; + nsIMdbTable *m_mdbPabTable; + nsIMdbTable *m_mdbDeletedCardsTable; + nsCOMPtr<nsIFile> m_dbName; + bool m_mdbTokensInitialized; + nsTObserverArray<nsIAddrDBListener*> m_ChangeListeners; + + mdb_kind m_PabTableKind; + mdb_kind m_MailListTableKind; + mdb_kind m_DeletedCardsTableKind; + + mdb_scope m_CardRowScopeToken; + mdb_scope m_ListRowScopeToken; + mdb_scope m_DataRowScopeToken; + + mdb_token m_FirstNameColumnToken; + mdb_token m_LastNameColumnToken; + mdb_token m_PhoneticFirstNameColumnToken; + mdb_token m_PhoneticLastNameColumnToken; + mdb_token m_DisplayNameColumnToken; + mdb_token m_NickNameColumnToken; + mdb_token m_PriEmailColumnToken; + mdb_token m_2ndEmailColumnToken; + mdb_token m_DefaultEmailColumnToken; + mdb_token m_CardTypeColumnToken; + mdb_token m_WorkPhoneColumnToken; + mdb_token m_HomePhoneColumnToken; + mdb_token m_FaxColumnToken; + mdb_token m_PagerColumnToken; + mdb_token m_CellularColumnToken; + mdb_token m_WorkPhoneTypeColumnToken; + mdb_token m_HomePhoneTypeColumnToken; + mdb_token m_FaxTypeColumnToken; + mdb_token m_PagerTypeColumnToken; + mdb_token m_CellularTypeColumnToken; + mdb_token m_HomeAddressColumnToken; + mdb_token m_HomeAddress2ColumnToken; + mdb_token m_HomeCityColumnToken; + mdb_token m_HomeStateColumnToken; + mdb_token m_HomeZipCodeColumnToken; + mdb_token m_HomeCountryColumnToken; + mdb_token m_WorkAddressColumnToken; + mdb_token m_WorkAddress2ColumnToken; + mdb_token m_WorkCityColumnToken; + mdb_token m_WorkStateColumnToken; + mdb_token m_WorkZipCodeColumnToken; + mdb_token m_WorkCountryColumnToken; + mdb_token m_JobTitleColumnToken; + mdb_token m_DepartmentColumnToken; + mdb_token m_CompanyColumnToken; + mdb_token m_AimScreenNameColumnToken; + mdb_token m_AnniversaryYearColumnToken; + mdb_token m_AnniversaryMonthColumnToken; + mdb_token m_AnniversaryDayColumnToken; + mdb_token m_SpouseNameColumnToken; + mdb_token m_FamilyNameColumnToken; + mdb_token m_DefaultAddressColumnToken; + mdb_token m_CategoryColumnToken; + mdb_token m_WebPage1ColumnToken; + mdb_token m_WebPage2ColumnToken; + mdb_token m_BirthYearColumnToken; + mdb_token m_BirthMonthColumnToken; + mdb_token m_BirthDayColumnToken; + mdb_token m_Custom1ColumnToken; + mdb_token m_Custom2ColumnToken; + mdb_token m_Custom3ColumnToken; + mdb_token m_Custom4ColumnToken; + mdb_token m_NotesColumnToken; + mdb_token m_LastModDateColumnToken; + mdb_token m_RecordKeyColumnToken; + mdb_token m_LowerPriEmailColumnToken; + mdb_token m_Lower2ndEmailColumnToken; + + mdb_token m_MailFormatColumnToken; + mdb_token m_PopularityIndexColumnToken; + + mdb_token m_AddressCharSetColumnToken; + mdb_token m_LastRecordKeyColumnToken; + + mdb_token m_ListNameColumnToken; + mdb_token m_ListNickNameColumnToken; + mdb_token m_ListDescriptionColumnToken; + mdb_token m_ListTotalColumnToken; + mdb_token m_LowerListNameColumnToken; + + uint32_t m_LastRecordKey; + nsWeakPtr m_dbDirectory; + nsCOMPtr<nsIMdbFactory> mMdbFactory; + +private: + nsresult GetRowForCharColumn(const char16_t *unicodeStr, + mdb_column findColumn, bool bIsCard, + bool aCaseInsensitive, nsIMdbRow **findRow, + mdb_pos *aRowPos); + bool HasRowButDeletedForCharColumn(const char16_t *unicodeStr, mdb_column findColumn, bool aIsCard, nsIMdbRow **aFindRow); + nsresult OpenInternal(nsIFile *aMabFile, bool aCreate, nsIAddrDatabase **pCardDB); + nsresult AlertAboutCorruptMabFile(const char16_t *aOldFileName, const char16_t *aNewFileName); + nsresult AlertAboutLockedMabFile(const char16_t *aFileName); + nsresult DisplayAlert(const char16_t *titleName, const char16_t *alertStringName, + const char16_t **formatStrings, int32_t numFormatStrings); +}; + +#endif |