Bug #357321 --> address book changes for supporting a per card attribute

for allowing remote content in HTML mail.
r=mark banner
This commit is contained in:
scott%scott-macgregor.org 2006-11-11 00:23:07 +00:00
Родитель aecf439a54
Коммит 8a3dd57758
18 изменённых файлов: 281 добавлений и 414 удалений

Просмотреть файл

@ -38,7 +38,7 @@
const kNonVcardFields =
["nickNameContainer", "secondaryEmailContainer", "screenNameContainer",
"homeAddressGroup", "customFields"];
"homeAddressGroup", "customFields", "allowRemoteContent"];
const kPhoneticFields =
["PhoneticLastName", "PhoneticLabel1", "PhoneticSpacer1",
@ -140,6 +140,10 @@ function OnLoadNewCard()
if ("aimScreenName" in window.arguments[0])
gEditCard.card.aimScreenName = window.arguments[0].aimScreenName;
if ("allowRemoteContent" in window.arguments[0])
document.getElementById('allowRemoteContent').checked =
window.arguments[0].allowRemoteContent == 'true';
if ("okCallback" in window.arguments[0])
gOkCallback = window.arguments[0].okCallback;
@ -234,11 +238,12 @@ function EditCardOKButton()
gEditCard.card.editCardToDatabase(gEditCard.abURI);
for (i=0; i<foundDirectoriesCount; i++) {
for (i=0; i < foundDirectoriesCount; i++) {
// Update the addressLists item for this card
foundDirectories[i].directory.addressLists.
SetElementAt(foundDirectories[i].index, gEditCard.card);
}
NotifySaveListeners();
// callback to allow caller to update
@ -297,11 +302,15 @@ function OnLoadEditCard()
document.getElementById(kPhoneticFields[3]).readonly = true;
// Also disable the mail format popup.
document.getElementById("PreferMailFormatPopup").disabled = true;
document.getElementById("PreferMailFormatPopup").disabled = true;
document.documentElement.buttons = "accept";
document.documentElement.removeAttribute("ondialogaccept");
}
// hide remote content in HTML field for remote directories
if (directory.isRemote)
document.getElementById('allowRemoteContent').hidden = true;
}
}
}
@ -419,6 +428,10 @@ function GetCardValues(cardproperty, doc)
var popup = document.getElementById("PreferMailFormatPopup");
if (popup)
popup.value = cardproperty.preferMailFormat;
var allowRemoteContentEl = document.getElementById("allowRemoteContent");
if (allowRemoteContentEl)
allowRemoteContentEl.checked = cardproperty.allowRemoteContent;
// get phonetic fields if exist
try {
@ -456,7 +469,11 @@ function CheckAndSetCardValues(cardproperty, doc, check)
var popup = document.getElementById("PreferMailFormatPopup");
if (popup)
cardproperty.preferMailFormat = popup.value;
var allowRemoteContentEl = document.getElementById("allowRemoteContent");
if (allowRemoteContentEl)
cardproperty.allowRemoteContent = allowRemoteContentEl.checked;
// set phonetic fields if exist
try {
cardproperty.phoneticFirstName = doc.getElementById("PhoneticFirstName").value;

Просмотреть файл

@ -1,61 +0,0 @@
<?xml version="1.0"?>
# ***** 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 Communicator client code, released
# March 31, 1998.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998-1999
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either 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 *****
<?xml-stylesheet href="chrome://messenger/skin/addressbook/cardDialog.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger/locale/addressbook/abNewCardDialog.dtd">
<?xul-overlay href="chrome://messenger/content/addressbook/abCardOverlay.xul"?>
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
id="abcardDialog"
onload="OnLoadEditCard();"
ondialogaccept="return EditCardOKButton();">
<stringbundleset id="stringbundleset">
<stringbundle id="bundle_addressBook" src="chrome://messenger/locale/addressbook/addressBook.properties"/>
</stringbundleset>
<!-- move needed functions into a single js file -->
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abCommon.js"/>
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abCardOverlay.js"/>
<vbox id="editcard"/>
</dialog>

Просмотреть файл

@ -1,87 +0,0 @@
<?xml version="1.0"?>
# ***** 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 Communicator client code, released
# March 31, 1998.
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998-1999
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either 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 *****
<?xml-stylesheet href="chrome://messenger/skin/addressbook/cardDialog.css" type="text/css"?>
<?xul-overlay href="chrome://messenger/content/addressbook/abCardOverlay.xul"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger/locale/addressbook/abNewCardDialog.dtd">
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:nc="http://home.netscape.com/NC-rdf#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
id="abcardDialog"
onload="OnLoadNewCard();"
ondialogaccept="return NewCardOKButton();">
<stringbundleset id="stringbundleset">
<stringbundle id="bundle_addressBook" src="chrome://messenger/locale/addressbook/addressBook.properties"/>
</stringbundleset>
<!-- move needed functions into a single js file -->
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abCommon.js"/>
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abCardOverlay.js"/>
<hbox align="center">
<label id="abPopupLabel" control="abPopup" value="&chooseAddressBook.label;" accesskey="&chooseAddressBook.accesskey;"/>
<menulist id="abPopup">
<menupopup id="abPopup-menupopup"
ref="moz-abdirectory://"
datasources="rdf:addressdirectory"
sortActive="true"
sortDirection="ascending"
sortResource="http://home.netscape.com/NC-rdf#DirTreeNameSort">
<template>
<rule nc:IsWriteable="false"/>
<rule nc:IsMailList="false">
<menuitem uri="..."
label="rdf:http://home.netscape.com/NC-rdf#DirName"
value="rdf:http://home.netscape.com/NC-rdf#DirUri"/>
</rule>
</template>
</menupopup>
</menulist>
</hbox>
<spacer style="height:1em"/>
<vbox id="editcard"/>
</dialog>

Просмотреть файл

@ -1,89 +1,3 @@
<!-- Labels -->
<!ENTITY chooseAddressBook.label "Add to: ">
<!ENTITY chooseAddressBook.accesskey "A">
<!-- Contact Tab -->
<!ENTITY Contact.tab "Contact">
<!ENTITY Name.box "Name">
<!-- LOCALIZATION NOTE:
NameField1, NameField2, PhoneticField1, PhoneticField2
those fields are either LN or FN depends on the target country.
"FirstName" and "LastName" can be swapped for id to change the order
but they should not be translated (same applied to phonetic id).
Make sure the translation of label corresponds to the order of id.
-->
<!-- LOCALIZATION NOTE (NameField1.id) : DONT_TRANSLATE -->
<!ENTITY NameField1.id "FirstName">
<!-- LOCALIZATION NOTE (NameField2.id) : DONT_TRANSLATE -->
<!ENTITY NameField2.id "LastName">
<!-- LOCALIZATION NOTE (PhoneticField1.id) : DONT_TRANSLATE -->
<!ENTITY PhoneticField1.id "PhoneticFirstName">
<!-- LOCALIZATION NOTE (PhoneticField2.id) : DONT_TRANSLATE -->
<!ENTITY PhoneticField2.id "PhoneticLastName">
<!ENTITY NameField1.label "First:">
<!ENTITY NameField1.accesskey "F">
<!ENTITY NameField2.label "Last:">
<!ENTITY NameField2.accesskey "L">
<!ENTITY PhoneticField1.label "Phonetic:">
<!ENTITY PhoneticField2.label "Phonetic:">
<!ENTITY DisplayName.label "Display:">
<!ENTITY DisplayName.accesskey "D">
<!ENTITY NickName.label "Nickname:">
<!ENTITY NickName.accesskey "N">
<!ENTITY Internet.box "Internet">
<!ENTITY PrimaryEmail.label "Email:">
<!ENTITY PrimaryEmail.accesskey "E">
<!ENTITY SecondEmail.label "Additional Email:">
<!ENTITY SecondEmail.accesskey "o">
<!ENTITY PreferMailFormat.label "Prefers to receive messages formatted as:">
<!ENTITY PreferMailFormat.accesskey "r">
<!ENTITY PlainText.label "Plain Text">
<!ENTITY HTML.label "HTML">
<!ENTITY Unknown.label "Unknown">
<!ENTITY ScreenName.label "Screen Name:">
<!ENTITY ScreenName.accesskey "S">
<!ENTITY Phones.box "Phones">
<!ENTITY WorkPhone.label "Work:">
<!ENTITY WorkPhone.accesskey "W">
<!ENTITY HomePhone.label "Home:">
<!ENTITY HomePhone.accesskey "H">
<!ENTITY FaxNumber.label "Fax:">
<!ENTITY FaxNumber.accesskey "x">
<!ENTITY PagerNumber.label "Pager:">
<!ENTITY PagerNumber.accesskey "P">
<!ENTITY CellularNumber.label "Mobile:">
<!ENTITY CellularNumber.accesskey "M">
<!-- Address Tab -->
<!ENTITY Address.tab "Address">
<!ENTITY Home.box "Home">
<!ENTITY HomeAddress.label "Address:">
<!ENTITY HomeAddress2.label "">
<!ENTITY HomeCity.label "City:">
<!ENTITY HomeState.label "State/Province:">
<!ENTITY HomeZipCode.label "ZIP/Postal Code:">
<!ENTITY HomeCountry.label "Country:">
<!ENTITY HomeWebPage.label "Web Page:">
<!ENTITY Work.box "Work">
<!ENTITY JobTitle.label "Title:">
<!ENTITY Department.label "Department:">
<!ENTITY Company.label "Organization:">
<!ENTITY WorkAddress.label "Address:">
<!ENTITY WorkAddress2.label "">
<!ENTITY WorkCity.label "City:">
<!ENTITY WorkState.label "State/Province:">
<!ENTITY WorkZipCode.label "ZIP/Postal Code:">
<!ENTITY WorkCountry.label "Country:">
<!ENTITY WorkWebPage.label "Web Page:">
<!-- Other Tab -->
<!ENTITY Other.tab "Other">
<!ENTITY Custom1.label "Custom 1:">
<!ENTITY Custom1.accesskey "1">
<!ENTITY Custom2.label "Custom 2:">
<!ENTITY Custom2.accesskey "2">
<!ENTITY Custom3.label "Custom 3:">
<!ENTITY Custom3.accesskey "3">
<!ENTITY Custom4.label "Custom 4:">
<!ENTITY Custom4.accesskey "4">
<!ENTITY Notes.box "Notes">

Просмотреть файл

@ -44,7 +44,7 @@ interface nsIAbPreferMailFormat {
const unsigned long html = 2;
};
[scriptable, uuid(f1c34c6e-a211-4aa6-bdb6-e200c58db1d0)]
[scriptable, uuid(6B46BDD5-10DB-44f4-99C9-C7FFE0D3D954)]
interface nsIAbCard : nsISupports {
// Card properties
attribute wstring firstName;
@ -114,6 +114,10 @@ interface nsIAbCard : nsISupports {
* mail list
*/
attribute string mailListURI;
/**
* allowRemoteContent to be displayed in HTML mail received from this contact.
*/
attribute boolean allowRemoteContent;
wstring getCardValue(in string name);

Просмотреть файл

@ -46,7 +46,7 @@
#define kMDBDirectoryRootLen 21
%}
[scriptable, uuid(C6BCF232-1DD1-11B2-A108-B41BFECED134)]
[scriptable, uuid(08669294-66C6-414e-AE2D-69348A62F362)]
interface nsIAbMDBDirectory : nsISupports {
// Creates an RDF directory component from the
@ -90,6 +90,12 @@ interface nsIAbMDBDirectory : nsISupports {
[noscript] void clearDatabase();
// Check if the directory has a card for the specified email address
// Check if the directory has a card for the specified email address
boolean hasCardForEmailAddress(in string emailAddress);
/**
* returns the address card for the specified email address. Returns NULL if
* we were unable to find a card for the specified e-mail address
*/
nsIAbCard cardForEmailAddress(in string emailAddress);
};

Просмотреть файл

@ -67,6 +67,7 @@ interface nsIMdbRow;
#define k2ndEmailColumn "SecondEmail"
#define kPreferMailFormatColumn "PreferMailFormat"
#define kPopularityIndexColumn "PopularityIndex"
#define kAllowRemoteContentColumn "AllowRemoteContent"
#define kWorkPhoneColumn "WorkPhone"
#define kHomePhoneColumn "HomePhone"
#define kFaxColumn "FaxNumber"
@ -136,7 +137,7 @@ interface nsAddrDBCommitType
const long kCompressCommit = 3;
};
[scriptable, uuid(b979cae8-8ad4-46b7-8ccc-0a1193df15fd)]
[scriptable, uuid(E59ABE11-1E97-46ec-A1C4-500971BBC4B4)]
interface nsIAddrDatabase : nsIAddrDBAnnouncer {
/**
@ -266,6 +267,7 @@ interface nsIAddrDatabase : nsIAddrDBAnnouncer {
[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);

Просмотреть файл

@ -38,7 +38,7 @@
const kNonVcardFields =
["nickNameContainer", "secondaryEmailContainer", "screenNameContainer",
"homeAddressGroup", "customFields"];
"homeAddressGroup", "customFields", "allowRemoteContent"];
const kPhoneticFields =
["PhoneticLastName", "PhoneticLabel1", "PhoneticSpacer1",
@ -123,7 +123,7 @@ function OnLoadNewCard()
else if (directory.operations & directory.opWrite)
gEditCard.selectedAB = window.arguments[0].selectedAB;
}
// we may have been given properties to pre-initialize the window with....
// we'll fill these in here...
if ("primaryEmail" in window.arguments[0])
@ -138,6 +138,10 @@ function OnLoadNewCard()
}
if ("aimScreenName" in window.arguments[0])
gEditCard.card.aimScreenName = window.arguments[0].aimScreenName;
if ("allowRemoteContent" in window.arguments[0])
document.getElementById('allowRemoteContent').checked =
window.arguments[0].allowRemoteContent == 'true';
if ("okCallback" in window.arguments[0])
gOkCallback = window.arguments[0].okCallback;
@ -165,7 +169,7 @@ function OnLoadNewCard()
if (gHideABPicker && abPopup) {
abPopup.hidden = true;
document.getElementById("abPopupLabel").hidden = true;
}
}
SetCardDialogTitle(gEditCard.card.displayName);
@ -301,6 +305,10 @@ function OnLoadEditCard()
document.documentElement.buttons = "accept";
document.documentElement.removeAttribute("ondialogaccept");
}
// hide remote content in HTML field for remote directories
if (directory.isRemote)
document.getElementById('allowRemoteContent').hidden = true;
}
}
}
@ -418,6 +426,10 @@ function GetCardValues(cardproperty, doc)
var popup = document.getElementById("PreferMailFormatPopup");
if (popup)
popup.value = cardproperty.preferMailFormat;
var allowRemoteContentEl = document.getElementById("allowRemoteContent");
if (allowRemoteContentEl)
allowRemoteContentEl.checked = cardproperty.allowRemoteContent;
// get phonetic fields if exist
try {
@ -455,6 +467,10 @@ function CheckAndSetCardValues(cardproperty, doc, check)
var popup = document.getElementById("PreferMailFormatPopup");
if (popup)
cardproperty.preferMailFormat = popup.value;
var allowRemoteContentEl = document.getElementById("allowRemoteContent");
if (allowRemoteContentEl)
cardproperty.allowRemoteContent = allowRemoteContentEl.checked;
// set phonetic fields if exist
try {

Просмотреть файл

@ -139,6 +139,13 @@
<textbox id="SecondEmail" flex="1" class="uri-element"/>
</hbox>
</hbox>
<hbox id="screenNameContainer">
<spacer flex="1"/>
<label control="ScreenName" value="&ScreenName.label;" accesskey="&ScreenName.accesskey;" class="CardEditLabel"/>
<hbox class="CardEditWidth">
<textbox id="ScreenName" flex="1"/>
</hbox>
</hbox>
<hbox>
<vbox valign="middle">
<label control="PreferMailFormatPopup" value="&PreferMailFormat.label;" accesskey="&PreferMailFormat.accesskey;"/>
@ -152,13 +159,7 @@
</menupopup>
</menulist>
</hbox>
<hbox id="screenNameContainer">
<spacer flex="1"/>
<label control="ScreenName" value="&ScreenName.label;" accesskey="&ScreenName.accesskey;" class="CardEditLabel"/>
<hbox class="CardEditWidth">
<textbox id="ScreenName" flex="1"/>
</hbox>
</hbox>
<checkbox id="allowRemoteContent" label="&allowRemoteContent.label;" accesskey="&allowRemoteContent.accesskey;"/>
</vbox>
</groupbox>

Просмотреть файл

@ -123,11 +123,12 @@ static const AppendItem CUSTOM_ATTRS_ARRAY[] = {
nsAbCardProperty::nsAbCardProperty(void)
{
m_LastModDate = 0;
m_LastModDate = 0;
m_PreferMailFormat = nsIAbPreferMailFormat::unknown;
m_PopularityIndex = 0;
m_IsMailList = PR_FALSE;
m_PreferMailFormat = nsIAbPreferMailFormat::unknown;
m_PopularityIndex = 0;
m_AllowRemoteContent = PR_FALSE;
m_IsMailList = PR_FALSE;
}
nsAbCardProperty::~nsAbCardProperty(void)
@ -164,6 +165,18 @@ NS_IMETHODIMP nsAbCardProperty::SetPopularityIndex(PRUint32 aPopularityIndex)
return NS_OK;
}
NS_IMETHODIMP nsAbCardProperty::GetAllowRemoteContent(PRBool *aAllowRemoteContent)
{
*aAllowRemoteContent = m_AllowRemoteContent;
return NS_OK;
}
NS_IMETHODIMP nsAbCardProperty::SetAllowRemoteContent(PRBool aAllowRemoteContent)
{
m_AllowRemoteContent = aAllowRemoteContent;
return NS_OK;
}
NS_IMETHODIMP nsAbCardProperty::GetPreferMailFormat(PRUint32 *aFormat)
{
*aFormat = m_PreferMailFormat;
@ -222,8 +235,16 @@ NS_IMETHODIMP nsAbCardProperty::GetCardValue(const char *attrname, PRUnichar **v
rv = GetAimScreenName(value);
break;
case 'A':
// AnniversaryYear, AnniversaryMonth, AnniversaryDay
// AllowRemoteContent, AnniversaryYear, AnniversaryMonth, AnniversaryDay
switch (attrname[11]) {
case 'C':
{
PRBool allowRemoteContent = PR_FALSE;
GetAllowRemoteContent(&allowRemoteContent);
*value = allowRemoteContent ? ToNewUnicode(NS_LITERAL_STRING("true")) :
ToNewUnicode(NS_LITERAL_STRING("false"));
break;
}
case 'Y':
rv = GetAnniversaryYear(value);
break;
@ -484,8 +505,11 @@ NS_IMETHODIMP nsAbCardProperty::SetCardValue(const char *attrname, const PRUnich
rv = SetAimScreenName(value);
break;
case 'A':
// AnniversaryYear, AnniversaryMonth, AnniversaryDay
switch (attrname[5]) {
// AllowRemoteContent, AnniversaryYear, AnniversaryMonth, AnniversaryDay
switch (attrname[11]) {
case 'C':
SetAllowRemoteContent(value[0] == 't' || value[0] == 'T');
break;
case 'Y':
rv = SetAnniversaryYear(value);
break;
@ -496,8 +520,8 @@ NS_IMETHODIMP nsAbCardProperty::SetCardValue(const char *attrname, const PRUnich
rv = SetAnniversaryDay(value);
break;
default:
rv = NS_ERROR_UNEXPECTED;
break;
rv = NS_ERROR_UNEXPECTED;
break;
}
break;
case 'B':
@ -1171,6 +1195,10 @@ NS_IMETHODIMP nsAbCardProperty::Copy(nsIAbCard* srcCard)
srcCard->GetPopularityIndex(&popularityIndex);
SetPopularityIndex(popularityIndex);
PRBool allowRemoteContent = PR_FALSE;
srcCard->GetAllowRemoteContent(&allowRemoteContent);
SetAllowRemoteContent(allowRemoteContent);
srcCard->GetWorkPhone(getter_Copies(str));
SetWorkPhone(str);
srcCard->GetHomePhone(getter_Copies(str));

Просмотреть файл

@ -126,6 +126,7 @@ protected:
PRUint32 m_LastModDate;
PRUint32 m_PreferMailFormat;
PRUint32 m_PopularityIndex;
PRBool m_AllowRemoteContent;
PRBool m_IsMailList;
nsCString m_MailListURI;

Просмотреть файл

@ -162,6 +162,10 @@ NS_IMETHODIMP nsAbMDBCardProperty::CopyCard(nsIAbMDBCard* srcCardDB)
srcCard->GetPopularityIndex(&popularityIndex);
SetPopularityIndex(popularityIndex);
PRBool allowRemoteContent = PR_FALSE;
srcCard->GetAllowRemoteContent(&allowRemoteContent);
SetAllowRemoteContent(allowRemoteContent);
srcCard->GetWorkPhone(getter_Copies(str));
SetWorkPhone(str);
srcCard->GetHomePhone(getter_Copies(str));

Просмотреть файл

@ -182,3 +182,8 @@ NS_IMETHODIMP nsAbMDBDirProperty::HasCardForEmailAddress(const char * aEmailAddr
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP nsAbMDBDirProperty::CardForEmailAddress(const char * aEmailAddress, nsIAbCard ** aAbCard)
{
return NS_ERROR_NOT_IMPLEMENTED;
}

Просмотреть файл

@ -552,7 +552,6 @@ NS_IMETHODIMP nsAbMDBDirectory::HasCard(nsIAbCard *cards, PRBool *hasCard)
{
if(NS_SUCCEEDED(rv))
rv = mDatabase->ContainsCard(cards, hasCard);
}
return rv;
}
@ -971,8 +970,20 @@ nsresult nsAbMDBDirectory::GetAbDatabase()
NS_IMETHODIMP nsAbMDBDirectory::HasCardForEmailAddress(const char * aEmailAddress, PRBool * aCardExists)
{
nsCOMPtr<nsIAbCard> card;
nsresult rv = CardForEmailAddress(aEmailAddress, getter_AddRefs(card));
NS_ENSURE_SUCCESS(rv, rv);
*aCardExists = card ? PR_TRUE : PR_FALSE;
}
NS_IMETHODIMP nsAbMDBDirectory::CardForEmailAddress(const char * aEmailAddress, nsIAbCard ** aAbCard)
{
NS_ENSURE_ARG_POINTER(aAbCard);
NS_ENSURE_ARG_POINTER(aEmailAddress);
nsresult rv = NS_OK;
*aCardExists = PR_FALSE;
*aAbCard = NULL;
if (!mDatabase)
rv = GetAbDatabase();
@ -983,11 +994,8 @@ NS_IMETHODIMP nsAbMDBDirectory::HasCardForEmailAddress(const char * aEmailAddres
}
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIAbCard> card;
mDatabase->GetCardFromAttribute(this, kLowerPriEmailColumn /* see #196777 */, aEmailAddress, PR_TRUE /* caseInsensitive, see bug #191798 */, getter_AddRefs(card));
if (card)
*aCardExists = PR_TRUE;
else
mDatabase->GetCardFromAttribute(this, kLowerPriEmailColumn /* see #196777 */, aEmailAddress, PR_TRUE /* caseInsensitive, see bug #191798 */, aAbCard);
if (!*aAbCard)
{
// fix for bug #187239
// didn't find it as the primary email? try again, with k2ndEmailColumn ("Additional Email")
@ -995,9 +1003,8 @@ NS_IMETHODIMP nsAbMDBDirectory::HasCardForEmailAddress(const char * aEmailAddres
// TODO bug #198731
// unlike the kPriEmailColumn, we don't have kLower2ndEmailColumn
// so we will still suffer from bug #196777 for "additional emails"
mDatabase->GetCardFromAttribute(this, k2ndEmailColumn, aEmailAddress, PR_TRUE /* caseInsensitive, see bug #191798 */, getter_AddRefs(card));
if (card)
*aCardExists = PR_TRUE;
mDatabase->GetCardFromAttribute(this, k2ndEmailColumn, aEmailAddress, PR_TRUE /* caseInsensitive, see bug #191798 */, aAbCard);
}
return NS_OK;
}

Просмотреть файл

@ -56,75 +56,76 @@
#include "nsAbDirectoryRDFResource.h"
#include "nsIAddrDBListener.h"
/*
* Address Book Directory
*/
/*
* Address Book Directory
*/
class nsAbMDBDirectory:
public nsAbDirectoryRDFResource,
public nsAbMDBDirProperty, // nsIAbDirectory, nsIAbMDBDirectory
public nsAbDirSearchListenerContext,
public nsAbDirectoryRDFResource,
public nsAbMDBDirProperty, // nsIAbDirectory, nsIAbMDBDirectory
public nsAbDirSearchListenerContext,
public nsIAddrDBListener,
public nsIAbDirectorySearch
public nsIAbDirectorySearch
{
public:
nsAbMDBDirectory(void);
virtual ~nsAbMDBDirectory(void);
nsAbMDBDirectory(void);
virtual ~nsAbMDBDirectory(void);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIADDRDBLISTENER
// nsIAbMDBDirectory methods
// nsIAbMDBDirectory methods
NS_IMETHOD GetURI(nsACString &aURI);
NS_IMETHOD ClearDatabase();
NS_IMETHOD NotifyDirItemAdded(nsISupports *item) { return NotifyItemAdded(item);}
NS_IMETHOD RemoveElementsFromAddressList();
NS_IMETHOD RemoveEmailAddressAt(PRUint32 aIndex);
NS_IMETHOD AddDirectory(const char *uriName, nsIAbDirectory **childDir);
NS_IMETHOD GetDirUri(char **uri);
NS_IMETHOD HasCardForEmailAddress(const char * aEmailAddress, PRBool * aCardExists);
NS_IMETHOD ClearDatabase();
NS_IMETHOD NotifyDirItemAdded(nsISupports *item) { return NotifyItemAdded(item);}
NS_IMETHOD RemoveElementsFromAddressList();
NS_IMETHOD RemoveEmailAddressAt(PRUint32 aIndex);
NS_IMETHOD AddDirectory(const char *uriName, nsIAbDirectory **childDir);
NS_IMETHOD GetDirUri(char **uri);
NS_IMETHOD HasCardForEmailAddress(const char * aEmailAddress, PRBool * aCardExists);
NS_IMETHOD CardForEmailAddress(const char * aEmailAddress, nsIAbCard ** aAbCard);
// nsIAbDirectory methods:
NS_IMETHOD GetChildNodes(nsISimpleEnumerator* *result);
NS_IMETHOD GetChildCards(nsISimpleEnumerator* *result);
// nsIAbDirectory methods:
NS_IMETHOD GetChildNodes(nsISimpleEnumerator* *result);
NS_IMETHOD GetChildCards(nsISimpleEnumerator* *result);
NS_IMETHOD ModifyDirectory(nsIAbDirectory *directory, nsIAbDirectoryProperties *aProperties);
NS_IMETHOD DeleteDirectory(nsIAbDirectory *directory);
NS_IMETHOD DeleteCards(nsISupportsArray *cards);
NS_IMETHOD HasCard(nsIAbCard *cards, PRBool *hasCard);
NS_IMETHOD HasDirectory(nsIAbDirectory *dir, PRBool *hasDir);
NS_IMETHOD CreateNewDirectory(nsIAbDirectoryProperties *aProperties);
NS_IMETHOD CreateDirectoryByURI(const PRUnichar *dirName, const char *uri, PRBool migrating);
NS_IMETHOD AddMailList(nsIAbDirectory *list);
NS_IMETHOD AddCard(nsIAbCard *card, nsIAbCard **addedCard);
NS_IMETHOD DropCard(nsIAbCard *card, PRBool needToCopyCard);
NS_IMETHOD EditMailListToDatabase(const char *uri, nsIAbCard *listCard);
NS_IMETHOD DeleteDirectory(nsIAbDirectory *directory);
NS_IMETHOD DeleteCards(nsISupportsArray *cards);
NS_IMETHOD HasCard(nsIAbCard *cards, PRBool *hasCard);
NS_IMETHOD HasDirectory(nsIAbDirectory *dir, PRBool *hasDir);
NS_IMETHOD CreateNewDirectory(nsIAbDirectoryProperties *aProperties);
NS_IMETHOD CreateDirectoryByURI(const PRUnichar *dirName, const char *uri, PRBool migrating);
NS_IMETHOD AddMailList(nsIAbDirectory *list);
NS_IMETHOD AddCard(nsIAbCard *card, nsIAbCard **addedCard);
NS_IMETHOD DropCard(nsIAbCard *card, PRBool needToCopyCard);
NS_IMETHOD EditMailListToDatabase(const char *uri, nsIAbCard *listCard);
// nsIAbDirectorySearch methods
NS_DECL_NSIABDIRECTORYSEARCH
// nsIAbDirectorySearch methods
NS_DECL_NSIABDIRECTORYSEARCH
// nsAbDirSearchListenerContext methods
nsresult OnSearchFinished (PRInt32 result);
nsresult OnSearchFoundCard (nsIAbCard* card);
// nsAbDirSearchListenerContext methods
nsresult OnSearchFinished (PRInt32 result);
nsresult OnSearchFoundCard (nsIAbCard* card);
PRBool IsMailingList(){ return (mIsMailingList == 1); }
PRBool IsMailingList(){ return (mIsMailingList == 1); }
protected:
nsresult NotifyPropertyChanged(nsIAbDirectory *list, const char *property, const PRUnichar* oldValue, const PRUnichar* newValue);
nsresult NotifyItemAdded(nsISupports *item);
nsresult NotifyItemDeleted(nsISupports *item);
nsresult NotifyPropertyChanged(nsIAbDirectory *list, const char *property, const PRUnichar* oldValue, const PRUnichar* newValue);
nsresult NotifyItemAdded(nsISupports *item);
nsresult NotifyItemDeleted(nsISupports *item);
nsresult NotifyItemChanged(nsISupports *item);
nsresult RemoveCardFromAddressList(nsIAbCard* card);
nsresult RemoveCardFromAddressList(nsIAbCard* card);
nsresult GetAbDatabase();
nsCOMPtr<nsIAddrDatabase> mDatabase;
nsresult GetAbDatabase();
nsCOMPtr<nsIAddrDatabase> mDatabase;
nsCOMArray<nsIAbDirectory> mSubDirectories;
PRBool mInitialized;
PRInt16 mIsMailingList;
nsCOMArray<nsIAbDirectory> mSubDirectories;
PRBool mInitialized;
PRInt16 mIsMailingList;
PRInt32 mContext;
PRBool mPerformingQuery;
nsSupportsHashtable mSearchCache;
PRInt32 mContext;
PRBool mPerformingQuery;
nsSupportsHashtable mSearchCache;
};
#endif

Просмотреть файл

@ -1341,9 +1341,3 @@ nsresult nsAbOutlookDirectory::CreateCard(nsIAbCard *aData, nsIAbCard **aNewCard
NS_ADDREF(*aNewCard) ;
return retCode ;
}

Просмотреть файл

@ -163,6 +163,7 @@ nsAddrDatabase::nsAddrDatabase()
m_LastModDateColumnToken(0),
m_MailFormatColumnToken(0),
m_PopularityIndexColumnToken(0),
m_AllowRemoteContentColumnToken(0),
m_AddressCharSetColumnToken(0),
m_LastRecordKey(0),
m_dbDirectory(nsnull)
@ -1220,6 +1221,7 @@ nsresult nsAddrDatabase::InitMDBInfo()
m_mdbStore->StringToToken(m_mdbEnv, k2ndEmailColumn, &m_2ndEmailColumnToken);
m_mdbStore->StringToToken(m_mdbEnv, kPreferMailFormatColumn, &m_MailFormatColumnToken);
m_mdbStore->StringToToken(m_mdbEnv, kPopularityIndexColumn, &m_PopularityIndexColumnToken);
m_mdbStore->StringToToken(m_mdbEnv, kAllowRemoteContentColumn, &m_AllowRemoteContentColumnToken);
m_mdbStore->StringToToken(m_mdbEnv, kWorkPhoneColumn, &m_WorkPhoneColumnToken);
m_mdbStore->StringToToken(m_mdbEnv, kHomePhoneColumn, &m_HomePhoneColumnToken);
m_mdbStore->StringToToken(m_mdbEnv, kFaxColumn, &m_FaxColumnToken);
@ -1351,6 +1353,10 @@ nsresult nsAddrDatabase::AddAttributeColumnsToRow(nsIAbCard *card, nsIMdbRow *ca
PRUint32 popularityIndex = 0;
card->GetPopularityIndex(&popularityIndex);
AddPopularityIndex(cardRow, popularityIndex);
PRBool allowRemoteContent = PR_FALSE;
card->GetAllowRemoteContent(&allowRemoteContent);
AddAllowRemoteContent(cardRow, allowRemoteContent);
card->GetWorkPhone(getter_Copies(unicodeStr));
AddWorkPhone(cardRow, NS_ConvertUTF16toUTF8(unicodeStr).get());
@ -2675,6 +2681,11 @@ NS_IMETHODIMP nsAddrDatabase::InitCardFromRow(nsIAbCard *newCard, nsIMdbRow* car
if (NS_SUCCEEDED(err))
newCard->SetPopularityIndex(popularityIndex);
PRBool allowRemoteContent;
err = GetBoolColumn(cardRow, m_AllowRemoteContentColumnToken, &allowRemoteContent);
if (NS_SUCCEEDED(err))
newCard->SetAllowRemoteContent(allowRemoteContent);
err = GetStringColumn(cardRow, m_WorkPhoneColumnToken, tempString);
if (NS_SUCCEEDED(err) && !tempString.IsEmpty())
{

Просмотреть файл

@ -58,38 +58,38 @@ typedef enum
class nsAddrDatabase : public nsIAddrDatabase
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIADDRDBANNOUNCER
NS_DECL_ISUPPORTS
NS_DECL_NSIADDRDBANNOUNCER
//////////////////////////////////////////////////////////////////////////////
// nsIAddrDatabase methods:
NS_IMETHOD GetDbPath(nsIFile * *aDbPath);
NS_IMETHOD SetDbPath(nsIFile * aDbPath);
NS_IMETHOD Open(nsIFile *aMabFile, PRBool aCreate, PRBool upgrading, nsIAddrDatabase **pCardDB);
NS_IMETHOD Close(PRBool forceCommit);
NS_IMETHOD Open(nsIFile *aMabFile, PRBool aCreate, PRBool upgrading, nsIAddrDatabase **pCardDB);
NS_IMETHOD Close(PRBool forceCommit);
NS_IMETHOD OpenMDB(nsIFile *dbName, PRBool create);
NS_IMETHOD CloseMDB(PRBool commit);
NS_IMETHOD Commit(PRUint32 commitType);
NS_IMETHOD ForceClosed();
NS_IMETHOD CloseMDB(PRBool commit);
NS_IMETHOD Commit(PRUint32 commitType);
NS_IMETHOD ForceClosed();
NS_IMETHOD CreateNewCardAndAddToDB(nsIAbCard *newCard, PRBool notify);
NS_IMETHOD CreateNewListCardAndAddToDB(nsIAbDirectory *list, PRUint32 listRowID, nsIAbCard *newCard, PRBool notify);
NS_IMETHOD CreateMailListAndAddToDB(nsIAbDirectory *newList, PRBool notify);
NS_IMETHOD EnumerateCards(nsIAbDirectory *directory, nsISimpleEnumerator **result);
NS_IMETHOD GetMailingListsFromDB(nsIAbDirectory *parentDir);
NS_IMETHOD EnumerateListAddresses(nsIAbDirectory *directory, nsISimpleEnumerator **result);
NS_IMETHOD DeleteCard(nsIAbCard *newCard, PRBool notify);
NS_IMETHOD EditCard(nsIAbCard *card, PRBool notify);
NS_IMETHOD ContainsCard(nsIAbCard *card, PRBool *hasCard);
NS_IMETHOD DeleteMailList(nsIAbDirectory *mailList, PRBool notify);
NS_IMETHOD EditMailList(nsIAbDirectory *mailList, nsIAbCard *listCard, PRBool notify);
NS_IMETHOD ContainsMailList(nsIAbDirectory *mailList, PRBool *hasCard);
NS_IMETHOD DeleteCardFromMailList(nsIAbDirectory *mailList, nsIAbCard *card, PRBool aNotify);
NS_IMETHOD CreateNewCardAndAddToDB(nsIAbCard *newCard, PRBool notify);
NS_IMETHOD CreateNewListCardAndAddToDB(nsIAbDirectory *list, PRUint32 listRowID, nsIAbCard *newCard, PRBool notify);
NS_IMETHOD CreateMailListAndAddToDB(nsIAbDirectory *newList, PRBool notify);
NS_IMETHOD EnumerateCards(nsIAbDirectory *directory, nsISimpleEnumerator **result);
NS_IMETHOD GetMailingListsFromDB(nsIAbDirectory *parentDir);
NS_IMETHOD EnumerateListAddresses(nsIAbDirectory *directory, nsISimpleEnumerator **result);
NS_IMETHOD DeleteCard(nsIAbCard *newCard, PRBool notify);
NS_IMETHOD EditCard(nsIAbCard *card, PRBool notify);
NS_IMETHOD ContainsCard(nsIAbCard *card, PRBool *hasCard);
NS_IMETHOD DeleteMailList(nsIAbDirectory *mailList, PRBool notify);
NS_IMETHOD EditMailList(nsIAbDirectory *mailList, nsIAbCard *listCard, PRBool notify);
NS_IMETHOD ContainsMailList(nsIAbDirectory *mailList, PRBool *hasCard);
NS_IMETHOD DeleteCardFromMailList(nsIAbDirectory *mailList, nsIAbCard *card, PRBool aNotify);
NS_IMETHOD GetCardFromAttribute(nsIAbDirectory *directory, const char *aName, const char *aValue, PRBool aCaseInsensitive, nsIAbCard **card);
NS_IMETHOD GetNewRow(nsIMdbRow * *newRow);
NS_IMETHOD GetNewListRow(nsIMdbRow * *newRow);
NS_IMETHOD AddCardRowToDB(nsIMdbRow *newRow);
NS_IMETHOD AddLdifListMember(nsIMdbRow* row, const char * value);
NS_IMETHOD GetNewRow(nsIMdbRow * *newRow);
NS_IMETHOD GetNewListRow(nsIMdbRow * *newRow);
NS_IMETHOD AddCardRowToDB(nsIMdbRow *newRow);
NS_IMETHOD AddLdifListMember(nsIMdbRow* row, const char * value);
NS_IMETHOD GetDeletedCardList(PRUint32 *aCount, nsISupportsArray **aDeletedList);
NS_IMETHOD GetDeletedCardCount(PRUint32 *count);
@ -124,6 +124,9 @@ public:
NS_IMETHOD AddPopularityIndex(nsIMdbRow * row, PRUint32 value)
{ return AddIntColumn(row, m_PopularityIndexColumnToken, value); }
NS_IMETHOD AddAllowRemoteContent(nsIMdbRow * row, PRBool value)
{ return AddBoolColumn(row, m_AllowRemoteContentColumnToken, value); }
NS_IMETHOD AddWorkPhone(nsIMdbRow * row, const char * value)
{ return AddCharStringColumn(row, m_WorkPhoneColumnToken, value); }
@ -366,52 +369,52 @@ protected:
nsIMdbTable *m_mdbPabTable;
nsIMdbTable *m_mdbDeletedCardsTable;
nsCOMPtr<nsIFile> m_dbName;
PRBool m_mdbTokensInitialized;
nsVoidArray /*<nsIAddrDBListener>*/ *m_ChangeListeners;
PRBool m_mdbTokensInitialized;
nsVoidArray /*<nsIAddrDBListener>*/ *m_ChangeListeners;
mdb_kind m_PabTableKind;
mdb_kind m_MailListTableKind;
mdb_kind m_DeletedCardsTableKind;
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_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_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_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_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;
@ -420,34 +423,35 @@ protected:
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_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_MailFormatColumnToken;
mdb_token m_PopularityIndexColumnToken;
mdb_token m_MailFormatColumnToken;
mdb_token m_PopularityIndexColumnToken;
mdb_token m_AllowRemoteContentColumnToken;
mdb_token m_AddressCharSetColumnToken;
mdb_token m_LastRecordKeyColumnToken;
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;
mdb_token m_ListNameColumnToken;
mdb_token m_ListNickNameColumnToken;
mdb_token m_ListDescriptionColumnToken;
mdb_token m_ListTotalColumnToken;
mdb_token m_LowerListNameColumnToken;
PRUint32 m_LastRecordKey;
nsIAbDirectory* m_dbDirectory;
PRUint32 m_LastRecordKey;
nsIAbDirectory* m_dbDirectory;
private:
nsresult GetRowForCharColumn(const PRUnichar *unicodeStr, mdb_column findColumn, PRBool bIsCard, nsIMdbRow **findRow);