diff --git a/mailnews/addrbook/src/nsAbCardProperty.cpp b/mailnews/addrbook/src/nsAbCardProperty.cpp
index 3660e72d197..f3ca205a55b 100644
--- a/mailnews/addrbook/src/nsAbCardProperty.cpp
+++ b/mailnews/addrbook/src/nsAbCardProperty.cpp
@@ -51,6 +51,7 @@
#include "plbase64.h"
#include "nsIAddrBookSession.h"
#include "nsIStringBundle.h"
+#include "nsIAddressBook.h"
#include "plstr.h"
#include "nsIRDFResource.h"
#include "nsIRDFService.h"
@@ -65,61 +66,59 @@
const char sAddrbookProperties[] = "chrome://messenger/locale/addressbook/addressBook.properties";
-struct AppendItem;
-
-typedef nsresult (AppendCallback) (nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLConv *aConv, nsString &aResult);
+enum EAppendType {
+ eAppendLine,
+ eAppendLabel,
+ eAppendCityStateZip
+};
struct AppendItem {
const char *mColumn;
const char *mLabel;
- AppendCallback *mCallback;
+ EAppendType mAppendType;
};
-nsresult AppendLine(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLConv *aConv, nsString &aResult);
-nsresult AppendLabel(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLConv *aConv, nsString &aResult);
-nsresult AppendCityStateZip(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLConv *aConv, nsString &aResult);
-
-static AppendItem NAME_ATTRS_ARRAY[] = {
- {kDisplayNameColumn, "propertyDisplayName", AppendLabel},
- {kNicknameColumn, "propertyNickname", AppendLabel},
- {kPriEmailColumn, "", AppendLine},
- {k2ndEmailColumn, "", AppendLine},
- {kAimScreenNameColumn, "propertyScreenName", AppendLabel},
+static const AppendItem NAME_ATTRS_ARRAY[] = {
+ {kDisplayNameColumn, "propertyDisplayName", eAppendLabel},
+ {kNicknameColumn, "propertyNickname", eAppendLabel},
+ {kPriEmailColumn, "", eAppendLine},
+ {k2ndEmailColumn, "", eAppendLine},
+ {kAimScreenNameColumn, "propertyScreenName", eAppendLabel},
};
-static AppendItem PHONE_ATTRS_ARRAY[] = {
- {kWorkPhoneColumn, "propertyWork", AppendLabel},
- {kHomePhoneColumn, "propertyHome", AppendLabel},
- {kFaxColumn, "propertyFax", AppendLabel},
- {kPagerColumn, "propertyPager", AppendLabel},
- {kCellularColumn, "propertyCellular", AppendLabel}
+static const AppendItem PHONE_ATTRS_ARRAY[] = {
+ {kWorkPhoneColumn, "propertyWork", eAppendLabel},
+ {kHomePhoneColumn, "propertyHome", eAppendLabel},
+ {kFaxColumn, "propertyFax", eAppendLabel},
+ {kPagerColumn, "propertyPager", eAppendLabel},
+ {kCellularColumn, "propertyCellular", eAppendLabel}
};
-static AppendItem HOME_ATTRS_ARRAY[] = {
- {kHomeAddressColumn, "", AppendLine},
- {kHomeAddress2Column, "", AppendLine},
- {kHomeCityColumn, "", AppendCityStateZip},
- {kHomeCountryColumn, "", AppendLine},
- {kWebPage2Column, "", AppendLine}
+static const AppendItem HOME_ATTRS_ARRAY[] = {
+ {kHomeAddressColumn, "", eAppendLine},
+ {kHomeAddress2Column, "", eAppendLine},
+ {kHomeCityColumn, "", eAppendCityStateZip},
+ {kHomeCountryColumn, "", eAppendLine},
+ {kWebPage2Column, "", eAppendLine}
};
-static AppendItem WORK_ATTRS_ARRAY[] = {
- {kJobTitleColumn, "", AppendLine},
- {kDepartmentColumn, "", AppendLine},
- {kCompanyColumn, "", AppendLine},
- {kWorkAddressColumn, "", AppendLine},
- {kWorkAddress2Column, "", AppendLine},
- {kWorkCityColumn, "", AppendCityStateZip},
- {kWorkCountryColumn, "", AppendLine},
- {kWebPage1Column, "", AppendLine}
+static const AppendItem WORK_ATTRS_ARRAY[] = {
+ {kJobTitleColumn, "", eAppendLine},
+ {kDepartmentColumn, "", eAppendLine},
+ {kCompanyColumn, "", eAppendLine},
+ {kWorkAddressColumn, "", eAppendLine},
+ {kWorkAddress2Column, "", eAppendLine},
+ {kWorkCityColumn, "", eAppendCityStateZip},
+ {kWorkCountryColumn, "", eAppendLine},
+ {kWebPage1Column, "", eAppendLine}
};
-static AppendItem CUSTOM_ATTRS_ARRAY[] = {
- {kCustom1Column, "propertyCustom1", AppendLabel},
- {kCustom2Column, "propertyCustom2", AppendLabel},
- {kCustom3Column, "propertyCustom3", AppendLabel},
- {kCustom4Column, "propertyCustom4", AppendLabel},
- {kNotesColumn, "", AppendLine}
+static const AppendItem CUSTOM_ATTRS_ARRAY[] = {
+ {kCustom1Column, "propertyCustom1", eAppendLabel},
+ {kCustom2Column, "propertyCustom2", eAppendLabel},
+ {kCustom3Column, "propertyCustom3", eAppendLabel},
+ {kCustom4Column, "propertyCustom4", eAppendLabel},
+ {kNotesColumn, "", eAppendLine}
};
nsAbCardProperty::nsAbCardProperty(void)
@@ -1652,18 +1651,18 @@ NS_IMETHODIMP nsAbCardProperty::ConvertToXMLPrintData(PRUnichar **aXMLSubstr)
xmlStr.AppendLiteral("\n"
"
");
- rv = AppendSection(NAME_ATTRS_ARRAY, sizeof(NAME_ATTRS_ARRAY)/sizeof(AppendItem), EmptyString(), conv, xmlStr);
+ rv = AppendSection(NAME_ATTRS_ARRAY, sizeof(NAME_ATTRS_ARRAY)/sizeof(AppendItem), EmptyString(), bundle, conv, xmlStr);
xmlStr.AppendLiteral(" |
");
- rv = AppendSection(PHONE_ATTRS_ARRAY, sizeof(PHONE_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingPhone"), conv, xmlStr);
+ rv = AppendSection(PHONE_ATTRS_ARRAY, sizeof(PHONE_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingPhone"), bundle, conv, xmlStr);
if (!m_IsMailList) {
- rv = AppendSection(CUSTOM_ATTRS_ARRAY, sizeof(CUSTOM_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingOther"), conv, xmlStr);
+ rv = AppendSection(CUSTOM_ATTRS_ARRAY, sizeof(CUSTOM_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingOther"), bundle, conv, xmlStr);
}
else {
rv = AppendSection(CUSTOM_ATTRS_ARRAY, sizeof(CUSTOM_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingDescription"),
- conv, xmlStr);
+ bundle, conv, xmlStr);
xmlStr.AppendLiteral("");
@@ -1726,8 +1725,8 @@ NS_IMETHODIMP nsAbCardProperty::ConvertToXMLPrintData(PRUnichar **aXMLSubstr)
xmlStr.AppendLiteral(" | ");
- rv = AppendSection(HOME_ATTRS_ARRAY, sizeof(HOME_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingHome"), conv, xmlStr);
- rv = AppendSection(WORK_ATTRS_ARRAY, sizeof(WORK_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingWork"), conv, xmlStr);
+ rv = AppendSection(HOME_ATTRS_ARRAY, sizeof(HOME_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingHome"), bundle, conv, xmlStr);
+ rv = AppendSection(WORK_ATTRS_ARRAY, sizeof(WORK_ATTRS_ARRAY)/sizeof(AppendItem), NS_LITERAL_STRING("headingWork"), bundle, conv, xmlStr);
xmlStr.AppendLiteral(" |
");
@@ -1765,10 +1764,12 @@ nsresult nsAbCardProperty::AppendData(const char *aAttrName, mozITXTToHTMLConv *
return NS_OK;
}
-nsresult nsAbCardProperty::AppendSection(AppendItem *aArray, PRInt16 aCount, const nsAFlatString& aHeading,
- mozITXTToHTMLConv *aConv, nsString &aResult)
+nsresult nsAbCardProperty::AppendSection(const AppendItem *aArray, PRInt16 aCount, const nsAFlatString& aHeading,
+ nsIStringBundle *aBundle,
+ mozITXTToHTMLConv *aConv,
+ nsString &aResult)
{
- nsresult rv;
+ nsresult rv = NS_OK;
aResult.AppendLiteral("");
@@ -1783,16 +1784,8 @@ nsresult nsAbCardProperty::AppendSection(AppendItem *aArray, PRInt16 aCount, con
}
if (!sectionIsEmpty && !aHeading.IsEmpty()) {
- nsCOMPtr bundle;
-
- nsCOMPtr stringBundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv,rv);
-
- rv = stringBundleService->CreateBundle(sAddrbookProperties, getter_AddRefs(bundle));
- NS_ENSURE_SUCCESS(rv,rv);
-
nsXPIDLString heading;
- rv = bundle->GetStringFromName(aHeading.get(), getter_Copies(heading));
+ rv = aBundle->GetStringFromName(aHeading.get(), getter_Copies(heading));
NS_ENSURE_SUCCESS(rv, rv);
aResult.AppendLiteral("");
@@ -1801,26 +1794,46 @@ nsresult nsAbCardProperty::AppendSection(AppendItem *aArray, PRInt16 aCount, con
}
for (i=0;i");
- return NS_OK;
+ return rv;
}
-nsresult AppendLine(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLConv *aConv, nsString &aResult)
+nsresult nsAbCardProperty::AppendLine(const AppendItem &aItem,
+ mozITXTToHTMLConv *aConv,
+ nsString &aResult)
{
+ NS_ENSURE_ARG_POINTER(aConv);
+
nsXPIDLString attrValue;
- nsresult rv = aCard->GetCardValue(aItem->mColumn, getter_Copies(attrValue));
+ nsresult rv = GetCardValue(aItem.mColumn, getter_Copies(attrValue));
NS_ENSURE_SUCCESS(rv,rv);
if (attrValue.IsEmpty())
return NS_OK;
nsAutoString attrNameStr;
- attrNameStr.AssignWithConversion(aItem->mColumn);
+ attrNameStr.AssignWithConversion(aItem.mColumn);
aResult.Append(PRUnichar('<'));
aResult.Append(attrNameStr);
@@ -1839,29 +1852,26 @@ nsresult AppendLine(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLCon
return NS_OK;
}
-nsresult AppendLabel(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLConv *aConv, nsString &aResult)
+nsresult nsAbCardProperty::AppendLabel(const AppendItem &aItem,
+ nsIStringBundle *aBundle,
+ mozITXTToHTMLConv *aConv,
+ nsString &aResult)
{
+ NS_ENSURE_ARG_POINTER(aBundle);
+
nsresult rv;
- nsCOMPtr bundle;
-
- nsCOMPtr stringBundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv,rv);
-
- rv = stringBundleService->CreateBundle(sAddrbookProperties, getter_AddRefs(bundle));
- NS_ENSURE_SUCCESS(rv,rv);
-
nsXPIDLString label;
nsXPIDLString attrValue;
- rv = aCard->GetCardValue(aItem->mColumn, getter_Copies(attrValue));
+ rv = GetCardValue(aItem.mColumn, getter_Copies(attrValue));
NS_ENSURE_SUCCESS(rv,rv);
if (attrValue.IsEmpty())
return NS_OK;
- rv = bundle->GetStringFromName(NS_ConvertASCIItoUCS2(aItem->mLabel).get(), getter_Copies(label));
+ rv = aBundle->GetStringFromName(NS_ConvertASCIItoUCS2(aItem.mLabel).get(), getter_Copies(label));
NS_ENSURE_SUCCESS(rv, rv);
aResult.AppendLiteral("");
- rv = AppendLine(aCard, aItem, aConv, aResult);
+ rv = AppendLine(aItem, aConv, aResult);
NS_ENSURE_SUCCESS(rv,rv);
aResult.AppendLiteral("");
@@ -1877,13 +1887,18 @@ nsresult AppendLabel(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLCo
return NS_OK;
}
-nsresult AppendCityStateZip(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTToHTMLConv *aConv, nsString &aResult)
+nsresult nsAbCardProperty::AppendCityStateZip(const AppendItem &aItem,
+ nsIStringBundle *aBundle,
+ mozITXTToHTMLConv *aConv,
+ nsString &aResult)
{
+ NS_ENSURE_ARG_POINTER(aBundle);
+
nsresult rv;
AppendItem item;
const char *stateCol, *zipCol;
- if (strcmp(aItem->mColumn, kHomeCityColumn) == 0) {
+ if (strcmp(aItem.mColumn, kHomeCityColumn) == 0) {
stateCol = kHomeStateColumn;
zipCol = kHomeZipCodeColumn;
}
@@ -1894,44 +1909,36 @@ nsresult AppendCityStateZip(nsAbCardProperty *aCard, AppendItem *aItem, mozITXTT
nsAutoString cityResult, stateResult, zipResult;
- rv = AppendLine(aCard, aItem, aConv, cityResult);
+ rv = AppendLine(aItem, aConv, cityResult);
NS_ENSURE_SUCCESS(rv,rv);
item.mColumn = stateCol;
item.mLabel = "";
- rv = AppendLine(aCard, &item, aConv, stateResult);
+ rv = AppendLine(item, aConv, stateResult);
NS_ENSURE_SUCCESS(rv,rv);
item.mColumn = zipCol;
- rv = AppendLine(aCard, &item, aConv, zipResult);
+ rv = AppendLine(item, aConv, zipResult);
NS_ENSURE_SUCCESS(rv,rv);
nsXPIDLString formattedString;
- nsCOMPtr bundle;
-
- nsCOMPtr stringBundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv,rv);
-
- rv = stringBundleService->CreateBundle(sAddrbookProperties, getter_AddRefs(bundle));
- NS_ENSURE_SUCCESS(rv,rv);
-
if (!cityResult.IsEmpty() && !stateResult.IsEmpty() && !zipResult.IsEmpty()) {
- const PRUnichar *formatStrings[3] = { cityResult.get(), stateResult.get(), zipResult.get() };
- rv = bundle->FormatStringFromName(NS_LITERAL_STRING("cityAndStateAndZip").get(), formatStrings, 3, getter_Copies(formattedString));
+ const PRUnichar *formatStrings[] = { cityResult.get(), stateResult.get(), zipResult.get() };
+ rv = aBundle->FormatStringFromName(NS_LITERAL_STRING("cityAndStateAndZip").get(), formatStrings, NS_ARRAY_LENGTH(formatStrings), getter_Copies(formattedString));
NS_ENSURE_SUCCESS(rv,rv);
}
else if (!cityResult.IsEmpty() && !stateResult.IsEmpty() && zipResult.IsEmpty()) {
- const PRUnichar *formatStrings[2] = { cityResult.get(), stateResult.get() };
- rv = bundle->FormatStringFromName(NS_LITERAL_STRING("cityAndStateNoZip").get(), formatStrings, 2, getter_Copies(formattedString));
+ const PRUnichar *formatStrings[] = { cityResult.get(), stateResult.get() };
+ rv = aBundle->FormatStringFromName(NS_LITERAL_STRING("cityAndStateNoZip").get(), formatStrings, NS_ARRAY_LENGTH(formatStrings), getter_Copies(formattedString));
NS_ENSURE_SUCCESS(rv,rv);
}
else if ((!cityResult.IsEmpty() && stateResult.IsEmpty() && !zipResult.IsEmpty()) ||
(cityResult.IsEmpty() && !stateResult.IsEmpty() && !zipResult.IsEmpty())) {
- const PRUnichar *formatStrings[2] = { cityResult.IsEmpty() ? stateResult.get() : cityResult.get(), zipResult.get() };
- rv = bundle->FormatStringFromName(NS_LITERAL_STRING("cityOrStateAndZip").get(), formatStrings, 2, getter_Copies(formattedString));
+ const PRUnichar *formatStrings[] = { cityResult.IsEmpty() ? stateResult.get() : cityResult.get(), zipResult.get() };
+ rv = aBundle->FormatStringFromName(NS_LITERAL_STRING("cityOrStateAndZip").get(), formatStrings, NS_ARRAY_LENGTH(formatStrings), getter_Copies(formattedString));
NS_ENSURE_SUCCESS(rv,rv);
}
else {
diff --git a/mailnews/addrbook/src/nsAbCardProperty.h b/mailnews/addrbook/src/nsAbCardProperty.h
index 746d11fbe7f..d2c8367341a 100644
--- a/mailnews/addrbook/src/nsAbCardProperty.h
+++ b/mailnews/addrbook/src/nsAbCardProperty.h
@@ -47,9 +47,9 @@
#include "nsIAbCard.h"
#include "nsCOMPtr.h"
-#include "nsIAddressBook.h"
#include "nsString.h"
+class nsIStringBundle;
class mozITXTToHTMLConv;
struct AppendItem;
@@ -134,7 +134,10 @@ protected:
private:
nsresult AppendData(const char *aAttrName, mozITXTToHTMLConv *aConv, nsString &aResult);
- nsresult AppendSection(AppendItem *aArray, PRInt16 aCount, const nsAFlatString& aHeading, mozITXTToHTMLConv *aConv, nsString &aResult);
+ nsresult AppendSection(const AppendItem *aArray, PRInt16 aCount, const nsAFlatString& aHeading, nsIStringBundle *aBundle, mozITXTToHTMLConv *aConv, nsString &aResult);
+ nsresult AppendLine(const AppendItem &aItem, mozITXTToHTMLConv *aConv, nsString &aResult);
+ nsresult AppendLabel(const AppendItem &aItem, nsIStringBundle *aBundle, mozITXTToHTMLConv *aConv, nsString &aResult);
+ nsresult AppendCityStateZip(const AppendItem &aItem, nsIStringBundle *aBundle, mozITXTToHTMLConv *aConv, nsString &aResult);
nsresult GetCardTypeFromString(const char *aCardTypeStr, PRBool aEmptyIsTrue, PRBool *aValue);
};