/* -*- 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 "nsIAbItem.idl" interface nsISimpleEnumerator; interface nsIVariant; [scriptable, uuid(97448252-F189-11d4-A422-001083003D0C)] interface nsIAbPreferMailFormat { const unsigned long unknown = 0; const unsigned long plaintext = 1; const unsigned long html = 2; }; /** * An interface representing an address book card. * * The UUID of a card is a composition of a directory ID and a per-directory ID. * The per-directory ID is reflected in the localId property. If either of these * properties change, the UUID will change correspondingly. * * None of these IDs will be reflected in the property collection. Neither * nsIAbCard::properties, nsIAbCard::deleteProperty, nor any of the property * getters and setters are able to interact with these properties. * * Fundamentally, a card is a collection of properties. Modifying a property in * some way on a card does not change the backend used to store the card; the * directory is required to do make the changes here. * * The following are the core properties that are used: * - Names: * - FirstName, LastName * - PhoneticFirstName, PhoneticLastName * - DisplayName, NickName * - SpouseName, FamilyName * - PrimaryEmail, SecondEmail * - Home Contact: * - HomeAddress, HomeAddress2, HomeCity, HomeState, HomeZipCode, HomeCountry * - HomePhone, HomePhoneType * - Work contact. Same as home, but with `Work' instead of `Home' * - Other Contact: * - FaxNumber, FaxNumberType * - PagerNumber, PagerNumberType * - CellularNumber, CellularNumberType * - JobTitle, Department, Company * - _AimScreenName * - Dates: * - AnniversaryYear, AnniversaryMonth, AnniversaryDay * - BirthYear, BirthMonth, BirthDay * - WebPage1 (work), WebPage2 (home) * - Custom1, Custom2, Custom3, Custom4 * - Notes * - Integral properties: * - LastModifiedDate * - PopularityIndex * - PreferMailFormat (see nsIAbPreferMailFormat) * - Photo properties: * - PhotoName * - PhotoType * - PhotoURI * * The contract id for the standard implementation is * \@mozilla.org/addressbook/cardproperty;1. */ [scriptable, uuid(9bddf024-5178-4097-894e-d84b4ddde101)] interface nsIAbCard : nsIAbItem { /** * The UUID for the nsIAbDirectory containing this card. * * The directory considered to contain this card is the directory which * produced this card (e.g., through nsIAbDirectory::getCardForProperty) or * the last directory to modify this card, if another directory did so. If the * last directory to modify this card deleted it, then this card is considered * unassociated. * * If this card is not associated with a directory, this string will be empty. * * There is no standardized way to associate a card with multiple directories. * * Consumers of this interface outside of directory implementations SHOULD * NOT, in general, modify this property. */ attribute AUTF8String directoryId; /** * The per-directory ID of this card. * * This property is the second part of the tuple logically representing a card * UUID. It shares many requirements with that of nsIAbItem::uuid. In * particular: * - It MUST be unique (within the scope of its directory). * - The empty string MUST only be used to indicate that it has not yet been * assigned a localId. * - It is STRONGLY RECOMMENDED that this id is consistent across sessions and * that, should the card be deleted, its ids will not be reused. * - The format of localId is left undefined. * * As long as directoryId is not changed, this property SHOULD NOT be changed. * If directoryId is changed, the new directory MAY choose to reuse the same * localId if reasonable. However, consumers MUST NOT assume that two cards * with different directoryIds but the same localId are logically the same * card. * * Similar to directoryId, consumers of cards outside of directory * implementations SHOULD NOT, in general, modify this property. */ attribute AUTF8String localId; /** * A list of all the properties that this card has as an enumerator, whose * members are all nsIProperty objects. */ readonly attribute nsISimpleEnumerator properties; /** * Returns a property for the given name. * * @param name The case-sensitive name of the property to get. * @param defaultValue The value to return if the property does not exist. * @exception NS_ERROR_NOT_AVAILABLE if the named property does not exist. * @exception NS_ERROR_CANNOT_CONVERT_DATA if the property cannot be converted * to the desired type. */ nsIVariant getProperty(in AUTF8String name, in nsIVariant defaultValue); /** * @{ * Returns a property for the given name. Javascript callers should NOT use these, * but use getProperty instead. XPConnect will do the type conversion automagically. * * These functions convert values in the same manner as the default * implementation of nsIVariant. Of particular note is that boolean variables * are converted to integers as in C/C++ (true is a non-zero value), so that * false will be converted to a string of "0" and not "false." * * * @param name The case-sensitive name of the property to get. * @exception NS_ERROR_NOT_AVAILABLE if the named property does not exist. * @exception NS_ERROR_CANNOT_CONVERT_DATA if the property cannot be converted * to the desired type. */ AString getPropertyAsAString(in string name); AUTF8String getPropertyAsAUTF8String(in string name); unsigned long getPropertyAsUint32(in string name); boolean getPropertyAsBool(in string name); /** @} */ /** * Assigns the given to value to the property of the given name. * * Should the property exist, its value will be overwritten. An * implementation may impose additional semantic constraints for certain * properties. However, such constraints might not be checked by this method. * * @warning A value MUST be convertible to a string; if this convention is not * followed, consumers of cards may fail unpredictably or return incorrect * results. * * @param name The case-sensitive name of the property to set. * @param value The new value of the property. */ void setProperty(in AUTF8String name, in nsIVariant value); /** * @{ * Sets a property for the given name. Javascript callers should NOT use these, * but use setProperty instead. XPConnect will do the type conversion automagically. * * These functions convert values in the same manner as the default * implementation of nsIVariant. */ void setPropertyAsAString(in string name, in AString value); void setPropertyAsAUTF8String(in string name, in AUTF8String value); void setPropertyAsUint32(in string name, in unsigned long value); void setPropertyAsBool(in string name, in boolean value); /** @} */ /** * Deletes the property with the given name. * * Some properties may not be deleted. However, the implementation will not * check this constraint at this method. If such a property is deleted, an * error may be thrown when the card is modified at the database level. * * @param name The case-sensitive name of the property to set. */ void deleteProperty(in AUTF8String name); /** * @{ * These properties are shorthand for getProperty and setProperty. */ attribute AString firstName; attribute AString lastName; attribute AString displayName; attribute AString primaryEmail; /** @} */ /** * Determines whether or not a card has the supplied email address in either * of its PrimaryEmail or SecondEmail attributes. * * Note: This function is likely to be temporary whilst we work out proper * APIs for multi-valued attributes in bug 118665. * * @param aEmailAddress The email address to attempt to match against. * @return True if aEmailAddress matches any of the email * addresses stored in the card. */ boolean hasEmailAddress(in AUTF8String aEmailAddress); /** * Translates a card into a specific format. * The following types are supported: * - base64xml * - xml * - vcard * * @param aType The type of item to translate the card into. * @return A string containing the translated card. * @exception NS_ERROR_ILLEGAL_VALUE if we do not recognize the type. */ AUTF8String translateTo(in AUTF8String aType); /** * Translates a card from the specified format */ //void translateFrom(in AUTF8String aType, in AUTF8String aData); /** * Generate a phonetic name from the card, using the firstName and lastName * values. * * @param aLastNameFirst Set to True to put the last name before the first. * @return A string containing the generated phonetic name. */ AString generatePhoneticName(in boolean aLastNameFirst); /** * Generate a chat name from the card, containing the value of the * first non-empty chat field. * * @return A string containing the generated chat name. */ AString generateChatName(); /** * This function will copy all values from one card to another. * * @param srcCard The source card to copy values from. */ void copy(in nsIAbCard aSrcCard); /** * Returns true if this card is equal to the other card. * * The default implementation defines equal as this card pointing to the * same object as @arg aCard; another implementation defines it as equality of * properties and values. * * @warning The exact nature of equality is still undefined, and actual * results may not match theoretical results. Most notably, the code * a.equals(b) == b.equals(a) might not return true. In * particular, calling equals on cards from different address books * may return inaccurate results. * * * @return Equality, as defined above. * @param aCard The card to compare against. */ boolean equals(in nsIAbCard aCard); // PROPERTIES TO BE DELETED AS PART OF REWRITE attribute boolean isMailList; /** * If isMailList is true then mailListURI * will contain the URI of the associated * mail list */ attribute string mailListURI; }; %{C++ // A nice list of properties for the benefit of C++ clients #define kFirstNameProperty "FirstName" #define kLastNameProperty "LastName" #define kDisplayNameProperty "DisplayName" #define kNicknameProperty "NickName" #define kPriEmailProperty "PrimaryEmail" #define kPreferMailFormatProperty "PreferMailFormat" #define kLastModifiedDateProperty "LastModifiedDate" #define kPopularityIndexProperty "PopularityIndex" #define kPhoneticFirstNameProperty "PhoneticFirstName" #define kPhoneticLastNameProperty "PhoneticLastName" #define kSpouseNameProperty "SpouseName" #define kFamilyNameProperty "FamilyName" #define k2ndEmailProperty "SecondEmail" #define kHomeAddressProperty "HomeAddress" #define kHomeAddress2Property "HomeAddress2" #define kHomeCityProperty "HomeCity" #define kHomeStateProperty "HomeState" #define kHomeZipCodeProperty "HomeZipCode" #define kHomeCountryProperty "HomeCountry" #define kHomeWebPageProperty "WebPage2" #define kWorkAddressProperty "WorkAddress" #define kWorkAddress2Property "WorkAddress2" #define kWorkCityProperty "WorkCity" #define kWorkStateProperty "WorkState" #define kWorkZipCodeProperty "WorkZipCode" #define kWorkCountryProperty "WorkCountry" #define kWorkWebPageProperty "WebPage1" #define kHomePhoneProperty "HomePhone" #define kHomePhoneTypeProperty "HomePhoneType" #define kWorkPhoneProperty "WorkPhone" #define kWorkPhoneTypeProperty "WorkPhoneType" #define kFaxProperty "FaxNumber" #define kFaxTypeProperty "FaxNumberType" #define kPagerTypeProperty "PagerNumberType" #define kPagerProperty "PagerNumber" #define kCellularProperty "CellularNumber" #define kCellularTypeProperty "CellularNumberType" #define kJobTitleProperty "JobTitle" #define kDepartmentProperty "Department" #define kCompanyProperty "Company" #define kScreenNameProperty "_AimScreenName" #define kCustom1Property "Custom1" #define kCustom2Property "Custom2" #define kCustom3Property "Custom3" #define kCustom4Property "Custom4" #define kNotesProperty "Notes" #define kGtalkProperty "_GoogleTalk" #define kAIMProperty "_AimScreenName" #define kYahooProperty "_Yahoo" #define kSkypeProperty "_Skype" #define kQQProperty "_QQ" #define kMSNProperty "_MSN" #define kICQProperty "_ICQ" #define kXMPPProperty "_JabberId" #define kIRCProperty "_IRC" #define kAnniversaryYearProperty "AnniversaryYear" #define kAnniversaryMonthProperty "AnniversaryMonth" #define kAnniversaryDayProperty "AnniversaryDay" #define kBirthYearProperty "BirthYear" #define kBirthMonthProperty "BirthMonth" #define kBirthDayProperty "BirthDay" %}