summaryrefslogtreecommitdiffstats
path: root/mailnews/addrbook/public/nsIAddrDatabase.idl
blob: e387b260ff5a81982f02cdb671a9f189a1f02423 (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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
/* -*- 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/. */

#include "nsIAddrDBAnnouncer.idl"
#include "nsIAbCard.idl"
#include "nsIAbDirectory.idl"

interface nsIFile;
interface nsIMdbTableRowCursor;
interface nsIMdbEnv;
interface nsIMdbRow;
interface nsIArray;
interface nsISimpleEnumerator;

%{C++
// this is the prefix we for attributes that are specific
// to the mozilla addressbook, and weren't in 4.x and aren't specified in
// RFC 2789.  used when exporting and import LDIF
// see nsTextAddress.cpp, nsAddressBook.cpp
#define MOZ_AB_LDIF_PREFIX "mozilla"

// note, GeneratedName is not a real column
// if you change any of this, make sure to change 
// Get / Set CardValue in nsAbCardProperty.cpp
#define kPhoneticNameColumn       "_PhoneticName"
#define kAddressCharSetColumn     "AddrCharSet"
#define kMailListName             "ListName"
#define kMailListNickName         "ListNickName"
#define kMailListDescription      "ListDescription"
#define kMailListTotalAddresses   "ListTotalAddresses"
// not shown in the UI
#define kLowerPriEmailColumn      "LowercasePrimaryEmail"
#define kLower2ndEmailColumn      "LowercaseSecondEmail"

// Palm Integration
#define  CARD_ATTRIB_PALMID "PalmRecId"
#define  CARD_ATTRIB_DISPLAY "DisplayName"

%}

[scriptable, uuid(20d4c6c3-0460-403e-aa9c-813654641566)]
interface nsAddrDBCommitType 
{
  const long kLargeCommit = 1;
  const long kSessionCommit = 2;
  const long kCompressCommit = 3;
};

[scriptable, uuid(c54973e4-d251-4b93-a0d0-81a616225061)]
interface nsIAddrDatabase : nsIAddrDBAnnouncer {

  /**
   * Path to the address book database that this instance represents.
   */
  attribute nsIFile dbPath;
  nsIAddrDatabase open(in nsIFile dbFile, in boolean create, in boolean upgrading);
             
  void close(in boolean forceCommit);

  /**
   * Open the MDB database synchronously creating it if required. If
   * successful, this routine will set up the m_mdbStore and m_mdbEnv of the
   * database object so other database calls can work.
   *
   * @param     dbName                      The location of the database file
   *                                        to open.
   * @param     create                      If set to true, will create the
   *                                        database file if it does not
   *                                        already exist.
   * @exception NS_ERROR_FILE_NOT_FOUND     The file was not found at the
   *                                        specified location (and create was
   *                                        false).
   * @exception NS_ERROR_FILE_ACCESS_DENIED The file could not be opened as
   *                                        access was denied.
   */
  void openMDB(in nsIFile dbName, in boolean create);
  void closeMDB(in boolean commit);

  void commit(in unsigned long commitType);
  void forceClosed();

  /**
   * Create a new card and add to the database
   *
   * @param     aNewCard       the card to be added
   * @param     aNotify        if set to true, all the listeners of the
   *                           database will be notified.
   * @param     aParent        parent directory or mailing list to which the
   *                           card is added. If set to null, listeners of the
   *                           database will not be notified of card creation.
   */
  void createNewCardAndAddToDB(in nsIAbCard aNewCard, in boolean aNotify, in nsIAbDirectory aParent);

  void createNewListCardAndAddToDB(in nsIAbDirectory list, in unsigned long listRowID, in nsIAbCard newCard, in boolean aNotify);

  /**
   * Create a new mailing list and add to the database
   *
   * @param     aNewList       the mailing list to be added.
   * @param     aNotify        if set to true, all the listeners of the
   *                           database will be notified.
   * @param     aParent        parent directory to which the mailing list
   *                           is added. If set to null, listeners of the database
   *                           will not be notified of mailing list creation.
   */
  void createMailListAndAddToDB(in nsIAbDirectory aNewList, in boolean aNotify, in nsIAbDirectory aParent);

  /**
   * Enumerate the cards in the directory. The enumerator will return the
   * cards associated with mailing lists too.
   *
   * @param directory the directory of which to enumerate the cards.
   * @return an enumerator.
   */
  nsISimpleEnumerator enumerateCards(in nsIAbDirectory directory);

  /**
   * Enumerate the cards associated with the mailing lists in the directory.
   *
   * @param directory the directory of which to enumerate the cards.
   * @return an enumerator.
   */
  nsISimpleEnumerator enumerateListAddresses(in nsIAbDirectory directory);

  void getMailingListsFromDB(in nsIAbDirectory parentDir);

  /**
   * Delete a card from the database.
   *
   * @param     aCard          the card to be deleted.
   * @param     aNotify        if set to true, all the listeners of the
   *                           database will be notified.
   * @param     aParent        parent directory from which the card
   *                           is to be deleted. If set to null, listeners of
   *                           the database will not be notified of card deletion.
   */
  void deleteCard(in nsIAbCard aCard, in boolean aNotify, in nsIAbDirectory aParent);

  /**
   * Edit a card in the database.
   *
   * @param     aCard          the card to be edited.
   * @param     aNotify        if set to true, all the listeners of the
   *                           database will be notified.
   * @param     aParent        parent directory in which the card
   *                           is to be edited. If set to null, listeners of
   *                           the database will not be notified of card entry
   *                           change.
   */
  void editCard(in nsIAbCard aCard, in boolean aNotify, in nsIAbDirectory aParent);
  boolean containsCard(in nsIAbCard card);
  /**
   * Deletes a mailing list from the directory
   *
   * @param aMailList         The nsIAbDirectory implementation of the mailing
   *                          list that is to be deleted.
   * @param aParent           The parent of the mailing list that is being
   *                          deleted. If this is supplied, then a notification
   *                          of card entry change in the database will be made.
   */
  void deleteMailList(in nsIAbDirectory aMailList,
                      [optional] in nsIAbDirectory aParent);
  void editMailList(in nsIAbDirectory mailList, in nsIAbCard listCard, in boolean aNotify);
  boolean containsMailList(in nsIAbDirectory mailList);
  void deleteCardFromMailList(in nsIAbDirectory mailList, in nsIAbCard card, in boolean aNotify);

  /**
   * Gets the first card which matches the attribute/value pair supplied.
   *
   * @param  aDirectory       The current nsIAbDirectory associated with this
   *                          instance of the database.
   * @param  aName            The attribute to look up the value in.
   * @param  aUTF8Value       The value to look up in UTF8 format.
   * @param  aCaseInsensitive Set to true for case-insenstive matching.
   * @result                  Returns an nsIAbCard if one is found, otherwise
   *                          NULL.
   */
  nsIAbCard getCardFromAttribute(in nsIAbDirectory aDirectory, in string aName,
                                 in AUTF8String aUTF8Value,
                                 in boolean aCaseInsensitive);

  /**
   * Gets all cards which matches the attribute/value pair supplied.
   *
   * @param  aDirectory       The current nsIAbDirectory associated with this
   *                          instance of the database.
   * @param  aName            The attribute to look up the value in.
   * @param  aUTF8Value       The value to look up in UTF8 format.
   * @param  aCaseInsensitive Set to true for case-insenstive matching.
   * @result                  Returns an nsISimpleEnumerator of nsIAbCard
   *                          instances.
   */
  nsISimpleEnumerator getCardsFromAttribute(in nsIAbDirectory aDirectory,
                                            in string aName,
                                            in AUTF8String uUTF8Value,
                                            in boolean aCaseInsensitive);

  boolean findMailListbyUnicodeName(in wstring listName);

  void getCardCount(out uint32_t count);

  [noscript] readonly attribute nsIMdbRow newRow;
  [noscript] readonly attribute nsIMdbRow newListRow;
  [noscript] void addCardRowToDB(in nsIMdbRow newRow);
  [noscript] void addLdifListMember(in nsIMdbRow row, in string value);
  [noscript] void addFirstName(in nsIMdbRow row, in string value);
  [noscript] void addLastName(in nsIMdbRow row, in string value);
  [noscript] void addPhoneticFirstName(in nsIMdbRow row, in string value);
  [noscript] void addPhoneticLastName(in nsIMdbRow row, in string value);
  [noscript] void addDisplayName(in nsIMdbRow row, in string value);
  [noscript] void addNickName(in nsIMdbRow row, in string value);
  [noscript] void addPrimaryEmail(in nsIMdbRow row, in string value);
  [noscript] void add2ndEmail(in nsIMdbRow row, in string value);
  [noscript] void addWorkPhone(in nsIMdbRow row, in string value);
  [noscript] void addHomePhone(in nsIMdbRow row, in string value);
  [noscript] void addFaxNumber(in nsIMdbRow row, in string value);
  [noscript] void addPagerNumber(in nsIMdbRow row, in string value);
  [noscript] void addCellularNumber(in nsIMdbRow row, in string value);
  [noscript] void addWorkPhoneType(in nsIMdbRow row, in string value);
  [noscript] void addHomePhoneType(in nsIMdbRow row, in string value);
  [noscript] void addFaxNumberType(in nsIMdbRow row, in string value);
  [noscript] void addPagerNumberType(in nsIMdbRow row, in string value);
  [noscript] void addCellularNumberType(in nsIMdbRow row, in string value);
  [noscript] void addHomeAddress(in nsIMdbRow row, in string value);
  [noscript] void addHomeAddress2(in nsIMdbRow row, in string value);
  [noscript] void addHomeCity(in nsIMdbRow row, in string value);
  [noscript] void addHomeState(in nsIMdbRow row, in string value);
  [noscript] void addHomeZipCode(in nsIMdbRow row, in string value);
  [noscript] void addHomeCountry(in nsIMdbRow row, in string value);
  [noscript] void addWorkAddress(in nsIMdbRow row, in string value);
  [noscript] void addWorkAddress2(in nsIMdbRow row, in string value);
  [noscript] void addWorkCity(in nsIMdbRow row, in string value);
  [noscript] void addWorkState(in nsIMdbRow row, in string value);
  [noscript] void addWorkZipCode(in nsIMdbRow row, in string value);
  [noscript] void addWorkCountry(in nsIMdbRow row, in string value);
  [noscript] void addJobTitle(in nsIMdbRow row, in string value);
  [noscript] void addDepartment(in nsIMdbRow row, in string value);
  [noscript] void addCompany(in nsIMdbRow row, in string value);
  [noscript] void addAimScreenName(in nsIMdbRow row, in string value);
  [noscript] void addAnniversaryYear(in nsIMdbRow row, in string value);
  [noscript] void addAnniversaryMonth(in nsIMdbRow row, in string value);
  [noscript] void addAnniversaryDay(in nsIMdbRow row, in string value);
  [noscript] void addSpouseName(in nsIMdbRow row, in string value);
  [noscript] void addFamilyName(in nsIMdbRow row, in string value);
  [noscript] void addDefaultAddress(in nsIMdbRow row, in string value);
  [noscript] void addCategory(in nsIMdbRow row, in string value);
  [noscript] void addWebPage1(in nsIMdbRow row, in string value);
  [noscript] void addWebPage2(in nsIMdbRow row, in string value);
  [noscript] void addBirthYear(in nsIMdbRow row, in string value);
  [noscript] void addBirthMonth(in nsIMdbRow row, in string value);
  [noscript] void addBirthDay(in nsIMdbRow row, in string value);
  [noscript] void addCustom1(in nsIMdbRow row, in string value);
  [noscript] void addCustom2(in nsIMdbRow row, in string value);
  [noscript] void addCustom3(in nsIMdbRow row, in string value);
  [noscript] void addCustom4(in nsIMdbRow row, in string value);
  [noscript] void addNotes(in nsIMdbRow row, in string value);
  [noscript] void addPreferMailFormat(in nsIMdbRow row, in unsigned long value);
  [noscript] void addPopularityIndex(in nsIMdbRow row, in unsigned long value);

  [noscript] void addListName(in nsIMdbRow row, in string value);
  [noscript] void addListNickName(in nsIMdbRow row, in string value);
  [noscript] void addListDescription(in nsIMdbRow row, in string value);
  [noscript] void addListDirNode(in nsIMdbRow listRow);

  /**
   * use for getting and setting generic string attributes
   * like _AimScreenName
   */
  void setCardValue(in nsIAbCard card, in string name, in wstring value, in boolean notify);
  wstring getCardValue(in nsIAbCard card, in string name);

  /**
   * Returns an array of the deleted cards currently stored in the mork file.
   */
  readonly attribute nsIArray deletedCardList;

  /**
   * Returns the count of the deleted card currently stored in the mork file.
   */
  readonly attribute unsigned long deletedCardCount;

  /**
   * Add the column representing the card to the mailing list row
   * in the database.
   *
   * @param     aPCard         the card to be added.
   * @param     aPListRow      the row to which the column will be added.
   * @param     aPos           the position of the card in the mailing list.
   * @param     aPNewCard      a pointer to hold the new card added to the row.
   * @param     aInMailingList If set to true, the card is already present
   *                           in the mailing list
   * @param     aParent        parent mailing list to which the card
   *                           is added. If set to null, listeners of the
   *                           database will not be notified of card creation.
   * @param     aRoot          If the card is created while creating a new mailing 
   *                           list, its set to the parent addressbook.
   *                           Set to null in other case.
   */
  void AddListCardColumnsToRow(in nsIAbCard aPCard,
                               in nsIMdbRow aPListRow,
                               in unsigned long aPos,
                               out nsIAbCard aPNewCard,
                               in boolean aInMailingList,
                               in nsIAbDirectory aParent,
                               in nsIAbDirectory aRoot);
  void InitCardFromRow(in nsIAbCard aNewCard,in nsIMdbRow aCardRow);
  void SetListAddressTotal(in nsIMdbRow aListRow, in uint32_t aTotal);
  nsIMdbRow FindRowByCard(in nsIAbCard aCard);
};