summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/import/src/nsAddrDatabase.h
blob: d667c92e47b8604af0e50377bea67cc27df82c40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
/* -*- 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 "nsIAbCard.h"
#include "nsIFile.h"
#include "mdb.h"
#include "nsString.h"
#include "nsCOMPtr.h"

class nsAddrDatabase {
  using PathString = mozilla::PathString;

 public:
  nsresult SetDbPath(nsIFile* aDbPath);
  nsresult Close(bool forceCommit);
  nsresult OpenMDB(nsIFile* dbName, bool create);
  nsresult CloseMDB(bool commit);
  nsresult ForceClosed(void);
  nsresult EnumerateCards(nsISimpleEnumerator** _retval);
  nsresult EnumerateListAddresses(uint32_t listRowID,
                                  nsISimpleEnumerator** _retval);

  nsAddrDatabase();
  virtual ~nsAddrDatabase();

  nsresult GetMDBFactory(nsIMdbFactory** aMdbFactory);
  nsIMdbEnv* GetEnv() { return m_mdbEnv; }
  uint32_t GetCurVersion();
  nsIMdbTableRowCursor* GetTableRowCursor();
  nsIMdbTable* GetPabTable() { return m_mdbPabTable; }

  nsresult CreateABCard(nsIMdbRow* cardRow, mdb_id listRowID,
                        nsIAbCard** result);
  nsresult CreateABListCard(nsIMdbRow* listRow, nsIAbCard** 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);

  nsresult InitCardFromRow(nsIAbCard* aNewCard, nsIMdbRow* aCardRow);

 protected:
  void YarnToUInt32(struct mdbYarn* yarn, uint32_t* pResult);
  nsresult GetStringColumn(nsIMdbRow* cardRow, mdb_token outToken,
                           nsString& str);
  nsresult GetIntColumn(nsIMdbRow* cardRow, mdb_token outToken,
                        uint32_t* pValue, uint32_t defaultValue);
  nsresult GetListCardFromDB(nsIAbCard* listCard, nsIMdbRow* listRow);
  nsresult CreateCard(nsIMdbRow* cardRow, mdb_id listRowID, nsIAbCard** result);

  // mdb bookkeeping stuff
  nsresult InitExistingDB();
  nsresult InitMDBInfo();

  nsIMdbEnv* m_mdbEnv;  // to be used in all the db calls.
  nsIMdbStore* m_mdbStore;
  nsIMdbTable* m_mdbPabTable;
  nsCOMPtr<nsIFile> m_dbName;
  bool m_mdbTokensInitialized;

  mdb_kind m_PabTableKind;
  mdb_kind m_DeletedCardsTableKind;

  mdb_scope m_CardRowScopeToken;
  mdb_scope m_ListRowScopeToken;
  mdb_scope m_DataRowScopeToken;

  mdb_token m_UIDColumnToken;
  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_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;

  nsCOMPtr<nsIMdbFactory> mMdbFactory;
};

#endif