diff --git a/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp b/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp
index 8836b8f5d5f..59e9d355d87 100644
--- a/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp
+++ b/mozilla/mailnews/addrbook/src/nsAddbookProtocolHandler.cpp
@@ -94,12 +94,14 @@ static NS_DEFINE_CID(kPrefCID, NS_PREF_CID);
nsAddbookProtocolHandler::nsAddbookProtocolHandler()
{
- NS_INIT_REFCNT();
-
+ NS_INIT_REFCNT();
+ mReportColumns = nsnull;
}
nsAddbookProtocolHandler::~nsAddbookProtocolHandler()
{
+ PR_FREEIF(mReportColumns);
+ mReportColumns = nsnull;
}
NS_IMPL_ISUPPORTS(nsAddbookProtocolHandler, NS_GET_IID(nsIProtocolHandler));
@@ -280,6 +282,7 @@ nsAddbookProtocolHandler::AddIndividualUserAttribPair(nsString &aString, const c
aString.Append("
");
aString.Append("| ");
+ // RICHIE - Should really convert this to some string bundled thing?
aString.Append(aColumn);
aString.Append(" | ");
@@ -447,6 +450,9 @@ nsAddbookProtocolHandler::BuildSingleHTML(nsIAddrDatabase *aDatabase, nsIAbDirec
PRUnichar *aName = nsnull;
nsCOMPtr workCard;
+ if (NS_FAILED(InitPrintColumns()))
+ return NS_ERROR_FAILURE;
+
nsresult rv = aDatabase->GetCardForEmailAddress(directory, charEmail, getter_AddRefs(workCard));
if (NS_FAILED(rv) || (!workCard))
return NS_ERROR_FAILURE;
@@ -462,46 +468,9 @@ nsAddbookProtocolHandler::BuildSingleHTML(nsIAddrDatabase *aDatabase, nsIAbDirec
workBuffer.Append(aName);
workBuffer.Append("");
}
-
- AddIndividualUserAttribPair(workBuffer, kWorkAddressBook, workCard);
- AddIndividualUserAttribPair(workBuffer, kFirstNameColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kLastNameColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kDisplayNameColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kNicknameColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kPriEmailColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, k2ndEmailColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kPlainTextColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kWorkPhoneColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kHomePhoneColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kFaxColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kPagerColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kCellularColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kHomeAddressColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kHomeAddress2Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kHomeCityColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kHomeStateColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kHomeZipCodeColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kHomeCountryColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kWorkAddressColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kWorkAddress2Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kWorkCityColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kWorkStateColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kWorkZipCodeColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kWorkCountryColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kJobTitleColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kDepartmentColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kCompanyColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kWebPage1Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kWebPage2Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kBirthYearColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kBirthMonthColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kBirthDayColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kCustom1Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kCustom2Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kCustom3Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kCustom4Column, workCard);
- AddIndividualUserAttribPair(workBuffer, kNotesColumn, workCard);
- AddIndividualUserAttribPair(workBuffer, kLastModifiedDateColumn, workCard);
+
+ for (PRInt32 i=0; i");
workBuffer.Append("");
@@ -509,79 +478,211 @@ nsAddbookProtocolHandler::BuildSingleHTML(nsIAddrDatabase *aDatabase, nsIAbDirec
return rv;
}
-#define MAX_FIELDS 39
-
NS_IMETHODIMP
nsAddbookProtocolHandler::BuildAllHTML(nsIAddrDatabase *aDatabase, nsIAbDirectory *directory,
nsString &workBuffer)
{
nsresult rv = NS_OK;
- reportColumnStruct reportColumns[MAX_FIELDS];
- PRUnichar *aName = nsnull;
- nsCOMPtr workCard;
- reportColumns[0].abField = kFirstNameColumn;
- reportColumns[1].abField = kLastNameColumn;
- reportColumns[2].abField = kDisplayNameColumn;
- reportColumns[3].abField = kNicknameColumn;
- reportColumns[4].abField = kPriEmailColumn;
- reportColumns[5].abField = k2ndEmailColumn;
- reportColumns[6].abField = kPlainTextColumn;
- reportColumns[7].abField = kWorkPhoneColumn;
- reportColumns[8].abField = kHomePhoneColumn;
- reportColumns[9].abField = kFaxColumn;
- reportColumns[10].abField = kPagerColumn;
- reportColumns[11].abField = kCellularColumn;
- reportColumns[12].abField = kHomeAddressColumn;
- reportColumns[13].abField = kHomeAddress2Column;
- reportColumns[14].abField = kHomeCityColumn;
- reportColumns[15].abField = kHomeStateColumn;
- reportColumns[16].abField = kHomeZipCodeColumn;
- reportColumns[17].abField = kHomeCountryColumn;
- reportColumns[18].abField = kWorkAddressColumn;
- reportColumns[19].abField = kWorkAddress2Column;
- reportColumns[20].abField = kWorkCityColumn;
- reportColumns[21].abField = kWorkStateColumn;
- reportColumns[22].abField = kWorkZipCodeColumn;
- reportColumns[23].abField = kWorkCountryColumn;
- reportColumns[24].abField = kJobTitleColumn;
- reportColumns[25].abField = kDepartmentColumn;
- reportColumns[26].abField = kCompanyColumn;
- reportColumns[27].abField = kWebPage1Column;
- reportColumns[28].abField = kWebPage2Column;
- reportColumns[29].abField = kBirthYearColumn;
- reportColumns[30].abField = kBirthMonthColumn;
- reportColumns[31].abField = kBirthDayColumn;
- reportColumns[32].abField = kCustom1Column;
- reportColumns[33].abField = kCustom2Column;
- reportColumns[34].abField = kCustom3Column;
- reportColumns[35].abField = kCustom4Column;
- reportColumns[36].abField = kNotesColumn;
- reportColumns[37].abField = kLastModifiedDateColumn;
- reportColumns[38].abField = nsnull;
+ if (NS_FAILED(InitPrintColumns()))
+ return NS_ERROR_FAILURE;
- for (PRInt32 i=0; iEnumerateCards(directory, &cardEnum);
+ if (NS_FAILED(rv) || (!cardEnum))
+ return NS_ERROR_FAILURE;
+
+ InitPrintColumns();
+
+ // Ok, we make 2 passes at this enumerator. The first is to
+ // check the columns that we should output and the second is
+ // to actually generate the output
+ //
+ nsCOMPtr obj = nsnull;
+ cardEnum->First();
+ do
{
- reportColumns[i].includeIt = PR_FALSE;
- }
+ if (NS_FAILED(cardEnum->CurrentItem(getter_AddRefs(obj))))
+ break;
+ else
+ {
+ nsCOMPtr card;
+ card = do_QueryInterface(obj, &rv);
+ if ( NS_SUCCEEDED(rv) && (card) )
+ {
+ CheckColumnValidity(card);
+ }
+ }
+ } while (NS_SUCCEEDED(cardEnum->Next()));
+
+ // Now, we need to generate some fun output!
+ //
// Ok, build a little HTML for output...
workBuffer.Append("");
workBuffer.Append("");
workBuffer.Append("");
- // RICHIE - need more work here
- // NS_IMETHODIMP nsAddrDatabase::EnumerateCards(nsIAbDirectory *directory, nsIEnumerator **result)
+ GenerateColumnHeadings(workBuffer);
- if (NS_SUCCEEDED(workCard->GetName(&aName)) && (aName))
+ cardEnum->First();
+ do
{
- workBuffer.Append("");
- workBuffer.Append(aName);
- workBuffer.Append("");
- }
+ if (NS_FAILED(cardEnum->CurrentItem(getter_AddRefs(obj))))
+ break;
+ else
+ {
+ nsCOMPtr card;
+ card = do_QueryInterface(obj, &rv);
+ if ( NS_SUCCEEDED(rv) && (card) )
+ {
+ GenerateRowForCard(workBuffer, card);
+ }
+ }
+ } while (NS_SUCCEEDED(cardEnum->Next()));
+
+ delete cardEnum;
+
+ // Finish up and get out!
+ //
workBuffer.Append("
");
workBuffer.Append("");
workBuffer.Append("");
return rv;
}
+
+PRBool
+ValidColumn(nsIAbCard *aCard, const char *aColumn)
+{
+ PRUnichar *aName = nsnull;
+
+ if (NS_SUCCEEDED(aCard->GetCardValue(aColumn, &aName)) && (aName) && (*aName))
+ return PR_TRUE;
+ else
+ return PR_FALSE;
+}
+
+nsresult
+TackOnColumn(nsIAbCard *aCard, const char *aColumn, nsString &aString)
+{
+ PRUnichar *aName = nsnull;
+
+ aString.Append("");
+
+ if (NS_SUCCEEDED(aCard->GetCardValue(aColumn, &aName)) && (aName) && (*aName))
+ {
+ aString.Append(aName);
+ }
+
+ aString.Append(" | ");
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsAddbookProtocolHandler::CheckColumnValidity(nsIAbCard *aCard)
+{
+ for (PRInt32 i=0; i");
+
+ for (PRInt32 i=0; i");
+ aString.Append("");
+ // RICHIE - Should really convert this to some string bundled thing?
+ aString.Append(mReportColumns[i].abField);
+ aString.Append("");
+ aString.Append("");
+ }
+ }
+
+ aString.Append("
");
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsAddbookProtocolHandler::GenerateRowForCard(nsString &aString,
+ nsIAbCard *aCard)
+{
+ aString.Append("");
+
+ for (PRInt32 i=0; i");
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsAddbookProtocolHandler::InitPrintColumns()
+{
+ if (!mReportColumns)
+ {
+ mReportColumns = (reportColumnStruct *) PR_Malloc(sizeof(reportColumnStruct) * kMaxReportColumns);
+ if (mReportColumns == nsnull)
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ mReportColumns[0].abField = kFirstNameColumn;
+ mReportColumns[1].abField = kLastNameColumn;
+ mReportColumns[2].abField = kDisplayNameColumn;
+ mReportColumns[3].abField = kNicknameColumn;
+ mReportColumns[4].abField = kPriEmailColumn;
+ mReportColumns[5].abField = k2ndEmailColumn;
+ mReportColumns[6].abField = kPlainTextColumn;
+ mReportColumns[7].abField = kWorkPhoneColumn;
+ mReportColumns[8].abField = kHomePhoneColumn;
+ mReportColumns[9].abField = kFaxColumn;
+ mReportColumns[10].abField = kPagerColumn;
+ mReportColumns[11].abField = kCellularColumn;
+ mReportColumns[12].abField = kHomeAddressColumn;
+ mReportColumns[13].abField = kHomeAddress2Column;
+ mReportColumns[14].abField = kHomeCityColumn;
+ mReportColumns[15].abField = kHomeStateColumn;
+ mReportColumns[16].abField = kHomeZipCodeColumn;
+ mReportColumns[17].abField = kHomeCountryColumn;
+ mReportColumns[18].abField = kWorkAddressColumn;
+ mReportColumns[19].abField = kWorkAddress2Column;
+ mReportColumns[20].abField = kWorkCityColumn;
+ mReportColumns[21].abField = kWorkStateColumn;
+ mReportColumns[22].abField = kWorkZipCodeColumn;
+ mReportColumns[23].abField = kWorkCountryColumn;
+ mReportColumns[24].abField = kJobTitleColumn;
+ mReportColumns[25].abField = kDepartmentColumn;
+ mReportColumns[26].abField = kCompanyColumn;
+ mReportColumns[27].abField = kWebPage1Column;
+ mReportColumns[28].abField = kWebPage2Column;
+ mReportColumns[29].abField = kBirthYearColumn;
+ mReportColumns[30].abField = kBirthMonthColumn;
+ mReportColumns[31].abField = kBirthDayColumn;
+ mReportColumns[32].abField = kCustom1Column;
+ mReportColumns[33].abField = kCustom2Column;
+ mReportColumns[34].abField = kCustom3Column;
+ mReportColumns[35].abField = kCustom4Column;
+ mReportColumns[36].abField = kNotesColumn;
+ mReportColumns[37].abField = kLastModifiedDateColumn;
+ mReportColumns[38].abField = nsnull;
+ }
+
+ for (PRInt32 i=0; iSetCardValue(kPriEmailColumn, nsString(emailAddr).GetUnicode());
+ if (!emailAddr.IsEmpty())
+ {
+ nsUnescape(emailAddr);
+ mAbCardProperty->SetCardValue(kPriEmailColumn, nsString(emailAddr).GetUnicode());
+ }
if (!folderName.IsEmpty())
{