Bug 180057 CSV export should output field names as first record in the output. r=neil,sr=bienvenu

This commit is contained in:
bugzilla%standard8.demon.co.uk 2006-02-17 13:36:39 +00:00
Родитель 99a819087e
Коммит 124054f069
2 изменённых файлов: 81 добавлений и 71 удалений

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

@ -113,59 +113,59 @@
#define MOZ_AB_OBJECTCLASS "mozillaAbPersonAlpha" #define MOZ_AB_OBJECTCLASS "mozillaAbPersonAlpha"
const ExportAttributesTableStruct EXPORT_ATTRIBUTES_TABLE[EXPORT_ATTRIBUTES_TABLE_COUNT] = { const ExportAttributesTableStruct EXPORT_ATTRIBUTES_TABLE[EXPORT_ATTRIBUTES_TABLE_COUNT] = {
{kFirstNameColumn, "givenName", PR_TRUE}, {kFirstNameColumn, "givenName", 2100},
{kLastNameColumn, "sn", PR_TRUE}, {kLastNameColumn, "sn", 2101},
{kDisplayNameColumn, "cn", PR_TRUE}, {kDisplayNameColumn, "cn", 2102},
{kNicknameColumn, MOZ_AB_LDIF_PREFIX "Nickname", PR_TRUE}, {kNicknameColumn, MOZ_AB_LDIF_PREFIX "Nickname", 2103},
{kPriEmailColumn, "mail", PR_TRUE}, {kPriEmailColumn, "mail", 2104},
{k2ndEmailColumn, MOZ_AB_LDIF_PREFIX "SecondEmail", PR_TRUE}, {k2ndEmailColumn, MOZ_AB_LDIF_PREFIX "SecondEmail", 2105},
{kDefaultEmailColumn, MOZ_AB_LDIF_PREFIX "DefaultEmail", PR_FALSE}, {kDefaultEmailColumn, MOZ_AB_LDIF_PREFIX "DefaultEmail"},
{kCardTypeColumn, MOZ_AB_LDIF_PREFIX "CardType", PR_FALSE}, {kCardTypeColumn, MOZ_AB_LDIF_PREFIX "CardType"},
{kAimScreenNameColumn, "nsAIMid", PR_FALSE}, {kAimScreenNameColumn, "nsAIMid"},
{kPreferMailFormatColumn, MOZ_AB_LDIF_PREFIX "UseHtmlMail", PR_FALSE}, {kPreferMailFormatColumn, MOZ_AB_LDIF_PREFIX "UseHtmlMail"},
{kLastModifiedDateColumn, "modifytimestamp", PR_FALSE}, {kLastModifiedDateColumn, "modifytimestamp"},
{kWorkPhoneColumn, "telephoneNumber", PR_TRUE}, {kWorkPhoneColumn, "telephoneNumber", 2106},
{kWorkPhoneTypeColumn, MOZ_AB_LDIF_PREFIX "WorkPhoneType", PR_FALSE}, {kWorkPhoneTypeColumn, MOZ_AB_LDIF_PREFIX "WorkPhoneType"},
{kHomePhoneColumn, "homePhone", PR_TRUE}, {kHomePhoneColumn, "homePhone", 2107},
{kHomePhoneTypeColumn, MOZ_AB_LDIF_PREFIX "HomePhoneType", PR_FALSE}, {kHomePhoneTypeColumn, MOZ_AB_LDIF_PREFIX "HomePhoneType"},
{kFaxColumn, "fax", PR_TRUE}, {kFaxColumn, "fax", 2108},
{kFaxTypeColumn, MOZ_AB_LDIF_PREFIX "FaxNumberType", PR_FALSE}, {kFaxTypeColumn, MOZ_AB_LDIF_PREFIX "FaxNumberType"},
{kPagerColumn, "pager", PR_TRUE}, {kPagerColumn, "pager", 2109},
{kPagerTypeColumn, MOZ_AB_LDIF_PREFIX "PagerNumberType", PR_FALSE}, {kPagerTypeColumn, MOZ_AB_LDIF_PREFIX "PagerNumberType"},
{kCellularColumn, "mobile", PR_TRUE}, {kCellularColumn, "mobile", 2110},
{kCellularTypeColumn, MOZ_AB_LDIF_PREFIX "CellularNumberType", PR_FALSE}, {kCellularTypeColumn, MOZ_AB_LDIF_PREFIX "CellularNumberType"},
{kHomeAddressColumn, "homeStreet", PR_TRUE}, {kHomeAddressColumn, "homeStreet", 2111},
{kHomeAddress2Column, MOZ_AB_LDIF_PREFIX "HomeStreet2", PR_TRUE}, {kHomeAddress2Column, MOZ_AB_LDIF_PREFIX "HomeStreet2", 2112},
{kHomeCityColumn, MOZ_AB_LDIF_PREFIX "HomeLocalityName", PR_TRUE}, {kHomeCityColumn, MOZ_AB_LDIF_PREFIX "HomeLocalityName", 2113},
{kHomeStateColumn, MOZ_AB_LDIF_PREFIX "HomeState", PR_TRUE}, {kHomeStateColumn, MOZ_AB_LDIF_PREFIX "HomeState", 2114},
{kHomeZipCodeColumn, MOZ_AB_LDIF_PREFIX "HomePostalCode", PR_TRUE}, {kHomeZipCodeColumn, MOZ_AB_LDIF_PREFIX "HomePostalCode", 2115},
{kHomeCountryColumn, MOZ_AB_LDIF_PREFIX "HomeCountryName", PR_TRUE}, {kHomeCountryColumn, MOZ_AB_LDIF_PREFIX "HomeCountryName", 2116},
{kWorkAddressColumn, "street", PR_TRUE}, {kWorkAddressColumn, "street", 2117},
{kWorkAddress2Column, MOZ_AB_LDIF_PREFIX "WorkStreet2", PR_TRUE}, {kWorkAddress2Column, MOZ_AB_LDIF_PREFIX "WorkStreet2", 2118},
{kWorkCityColumn, "l", PR_TRUE}, {kWorkCityColumn, "l", 2119},
{kWorkStateColumn, "st", PR_TRUE}, {kWorkStateColumn, "st", 2120},
{kWorkZipCodeColumn, "postalCode", PR_TRUE}, {kWorkZipCodeColumn, "postalCode", 2121},
{kWorkCountryColumn, "c", PR_TRUE}, {kWorkCountryColumn, "c", 2122},
{kJobTitleColumn, "title", PR_TRUE}, {kJobTitleColumn, "title", 2123},
{kDepartmentColumn, "department", PR_TRUE}, {kDepartmentColumn, "department", 2124},
{kCompanyColumn, "company", PR_TRUE}, {kCompanyColumn, "company", 2125},
{kWebPage1Column, MOZ_AB_LDIF_PREFIX "WorkUrl", PR_TRUE}, {kWebPage1Column, MOZ_AB_LDIF_PREFIX "WorkUrl", 2126},
{kWebPage2Column, MOZ_AB_LDIF_PREFIX "HomeUrl", PR_TRUE}, {kWebPage2Column, MOZ_AB_LDIF_PREFIX "HomeUrl", 2127},
{kBirthYearColumn, nsnull, PR_TRUE}, // unused for now {kBirthYearColumn, nsnull, 2128}, // unused for now
{kBirthMonthColumn, nsnull, PR_TRUE}, // unused for now {kBirthMonthColumn, nsnull, 2129}, // unused for now
{kBirthDayColumn, nsnull, PR_TRUE}, // unused for now {kBirthDayColumn, nsnull, 2130}, // unused for now
{kCustom1Column, MOZ_AB_LDIF_PREFIX "Custom1", PR_TRUE}, {kCustom1Column, MOZ_AB_LDIF_PREFIX "Custom1", 2131},
{kCustom2Column, MOZ_AB_LDIF_PREFIX "Custom2", PR_TRUE}, {kCustom2Column, MOZ_AB_LDIF_PREFIX "Custom2", 2132},
{kCustom3Column, MOZ_AB_LDIF_PREFIX "Custom3", PR_TRUE}, {kCustom3Column, MOZ_AB_LDIF_PREFIX "Custom3", 2133},
{kCustom4Column, MOZ_AB_LDIF_PREFIX "Custom4", PR_TRUE}, {kCustom4Column, MOZ_AB_LDIF_PREFIX "Custom4", 2134},
{kNotesColumn, "description", PR_TRUE}, {kNotesColumn, "description", 2135},
{kAnniversaryYearColumn, MOZ_AB_LDIF_PREFIX "AnniversaryYear", PR_FALSE}, {kAnniversaryYearColumn, MOZ_AB_LDIF_PREFIX "AnniversaryYear"},
{kAnniversaryMonthColumn, MOZ_AB_LDIF_PREFIX "AnniversaryMonth", PR_FALSE}, {kAnniversaryMonthColumn, MOZ_AB_LDIF_PREFIX "AnniversaryMonth"},
{kAnniversaryDayColumn, MOZ_AB_LDIF_PREFIX "AnniversaryDay", PR_FALSE}, {kAnniversaryDayColumn, MOZ_AB_LDIF_PREFIX "AnniversaryDay"},
{kSpouseNameColumn, MOZ_AB_LDIF_PREFIX "SpouseName", PR_FALSE}, {kSpouseNameColumn, MOZ_AB_LDIF_PREFIX "SpouseName"},
{kFamilyNameColumn, MOZ_AB_LDIF_PREFIX "FamilyName", PR_FALSE}, {kFamilyNameColumn, MOZ_AB_LDIF_PREFIX "FamilyName"},
{kDefaultAddressColumn, MOZ_AB_LDIF_PREFIX "DefaultAddress", PR_FALSE}, {kDefaultAddressColumn, MOZ_AB_LDIF_PREFIX "DefaultAddress"},
{kCategoryColumn, MOZ_AB_LDIF_PREFIX "Category", PR_FALSE}, {kCategoryColumn, MOZ_AB_LDIF_PREFIX "Category"},
}; };
// //
@ -540,28 +540,39 @@ nsAddressBook::ExportDirectoryToDelimitedText(nsIAbDirectory *aDirectory, const
PRUint32 i; PRUint32 i;
PRUint32 writeCount; PRUint32 writeCount;
PRUint32 length; PRUint32 length;
// XXX TODO nsCOMPtr<nsIStringBundleService> bundleService = do_GetService(NS_STRINGBUNDLE_CONTRACTID, &rv);
// when Outlook Express exports to .csv, the first line of the file is the column descriptions. NS_ENSURE_SUCCESS(rv, rv);
// and I think we should too. (otherwise, this data is just data, who knows what is what.)
// but we have to fix the import code to skip the first card before we can do that. nsCOMPtr<nsIStringBundle> bundle;
// the problem is Netscape 4.x didn't this, so if we always skip the first card rv = bundleService->CreateBundle("chrome://messenger/locale/importMsgs.properties", getter_AddRefs(bundle));
// we'll lose data when importing from 4.x NS_ENSURE_SUCCESS(rv, rv);
// for now, do it how 4.x does it and how the current import code expect it.
// note, these are more fields that 4.x expects, so Mozilla -> 4.x will not work right. nsXPIDLCString revisedName;
#ifdef EXPORT_LIKE_OE_DOES nsXPIDLString columnName;
for (i = 0; i < EXPORT_ATTRIBUTES_TABLE_COUNT; i++) { for (i = 0; i < EXPORT_ATTRIBUTES_TABLE_COUNT; i++) {
if (EXPORT_ATTRIBUTES_TABLE[i].includeForPlainText) { if (EXPORT_ATTRIBUTES_TABLE[i].plainTextStringId != 0) {
// XXX localize this?
length = strlen(EXPORT_ATTRIBUTES_TABLE[i].abColName); // We don't need to truncate the string here as getter_Copies will
rv = outputStream->Write(EXPORT_ATTRIBUTES_TABLE_COUNT[i].abColName, length, &writeCount); // do that for us.
if (NS_FAILED(bundle->GetStringFromID(EXPORT_ATTRIBUTES_TABLE[i].plainTextStringId, getter_Copies(columnName))))
columnName.AppendInt(EXPORT_ATTRIBUTES_TABLE[i].plainTextStringId);
importService->SystemStringFromUnicode(columnName.get(), revisedName);
rv = outputStream->Write(revisedName.get(),
revisedName.Length(),
&writeCount);
NS_ENSURE_SUCCESS(rv,rv); NS_ENSURE_SUCCESS(rv,rv);
if (length != writeCount)
if (revisedName.Length() != writeCount)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
if (i < EXPORT_ATTRIBUTES_TABLE_COUNT - 1) { if (i < EXPORT_ATTRIBUTES_TABLE_COUNT - 1) {
rv = outputStream->Write(aDelim, aDelimLen, &writeCount); rv = outputStream->Write(aDelim, aDelimLen, &writeCount);
NS_ENSURE_SUCCESS(rv,rv); NS_ENSURE_SUCCESS(rv,rv);
if (aDelimLen != writeCount) if (aDelimLen != writeCount)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
} }
@ -571,7 +582,6 @@ nsAddressBook::ExportDirectoryToDelimitedText(nsIAbDirectory *aDirectory, const
NS_ENSURE_SUCCESS(rv,rv); NS_ENSURE_SUCCESS(rv,rv);
if (MSG_LINEBREAK_LEN != writeCount) if (MSG_LINEBREAK_LEN != writeCount)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
#endif
rv = aDirectory->GetChildCards(getter_AddRefs(cardsEnumerator)); rv = aDirectory->GetChildCards(getter_AddRefs(cardsEnumerator));
if (NS_SUCCEEDED(rv) && cardsEnumerator) { if (NS_SUCCEEDED(rv) && cardsEnumerator) {
@ -597,7 +607,7 @@ nsAddressBook::ExportDirectoryToDelimitedText(nsIAbDirectory *aDirectory, const
nsCString valueCStr; nsCString valueCStr;
for (i = 0; i < EXPORT_ATTRIBUTES_TABLE_COUNT; i++) { for (i = 0; i < EXPORT_ATTRIBUTES_TABLE_COUNT; i++) {
if (EXPORT_ATTRIBUTES_TABLE[i].includeForPlainText) { if (EXPORT_ATTRIBUTES_TABLE[i].plainTextStringId != 0) {
rv = card->GetCardValue(EXPORT_ATTRIBUTES_TABLE[i].abColName, getter_Copies(value)); rv = card->GetCardValue(EXPORT_ATTRIBUTES_TABLE[i].abColName, getter_Copies(value));
NS_ENSURE_SUCCESS(rv,rv); NS_ENSURE_SUCCESS(rv,rv);

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

@ -70,7 +70,7 @@ struct ExportAttributesTableStruct
{ {
const char* abColName; const char* abColName;
const char* ldapPropertyName; const char* ldapPropertyName;
PRBool includeForPlainText; PRUint32 plainTextStringId;
}; };
const extern ExportAttributesTableStruct EXPORT_ATTRIBUTES_TABLE[EXPORT_ATTRIBUTES_TABLE_COUNT]; const extern ExportAttributesTableStruct EXPORT_ATTRIBUTES_TABLE[EXPORT_ATTRIBUTES_TABLE_COUNT];