/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Seth Spitzer <sspitzer@netscape.com>
* Mark Banner <mark@standard8.demon.co.uk>
*
* Alternatively, the contents of this file may be used under the terms of
* either of the GNU General Public License Version 2 or later (the "GPL"),
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsIAddrDBAnnouncer.idl"
#include "nsIAbCard.idl"
#include "nsIAbDirectory.idl"
interface nsIFile;
interface nsIMdbTableRowCursor;
interface nsIMdbEnv;
interface nsIMdbRow;
interface nsIArray;
%{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"
// Palm Integration
#define CARD_ATTRIB_PALMID "PalmRecId"
#define CARD_ATTRIB_DISPLAY "DisplayName"
%}
[scriptable, uuid(14d89995-e6c5-11d8-9a39-000a95dc234c)]
interface nsAddrDBCommitType
{
const long kSmallCommit = 0;
const long kLargeCommit = 1;
const long kSessionCommit = 2;
const long kCompressCommit = 3;
};
[scriptable, uuid(9e9e715c-b932-4163-879f-4c52fa926c10)]
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);
PRBool findMailListbyUnicodeName(in wstring listName);
void getCardCount(out PRUint32 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 addAllowRemoteContent(in nsIMdbRow row, in boolean 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 PRUint32 aTotal);
nsIMdbRow FindRowByCard(in nsIAbCard aCard);
};