nsresult nsEudoraAddress::AddGroupMembersAsCards(nsVoidArray &membersArray, nsIAddrDatabase *pDb) { PRInt32 max = membersArray.Count(); CAliasData *pData; nsresult rv = NS_OK; nsCOMPtr <nsIMdbRow> newRow; nsAutoString uniStr; nsCAutoString displayName; for (PRInt32 i = 0; i < max; i++) { pData = (CAliasData *)membersArray.ElementAt(i); if (!pData || (pData->m_email.IsEmpty())) continue; rv = pDb->GetNewRow(getter_AddRefs(newRow)); if (NS_FAILED(rv) || !newRow) return rv; if (!pData->m_realName.IsEmpty()) displayName = pData->m_realName; else if (!pData->m_nickName.IsEmpty()) displayName = pData->m_nickName; else displayName.Truncate(); ADD_FIELD_TO_DB_ROW(pDb, AddDisplayName, newRow, displayName, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddPrimaryEmail, newRow, pData->m_email, uniStr); rv = pDb->AddCardRowToDB( newRow); NS_ENSURE_SUCCESS(rv, rv); } return rv; }
void nsEudoraAddress::AddSingleCard( CAliasEntry *pEntry, nsVoidArray &emailList, nsIAddrDatabase *pDb) { // We always have a nickname and everything else is optional. // Map both home and work related fields to our address card. Eudora // fields that can't be mapped will be left in the 'note' field! nsIMdbRow* newRow = nsnull; pDb->GetNewRow( &newRow); if (!newRow) return; nsCString displayName, name, firstName, lastName; nsCString fax, secondaryFax, phone, mobile, secondaryMobile, webLink; nsCString address, address2, city, state, zip, country; nsCString phoneWK, webLinkWK, title, company; nsCString addressWK, address2WK, cityWK, stateWK, zipWK, countryWK; nsCString primaryLocation, otherPhone, otherWeb; nsCString additionalEmail, stillMoreEmail; nsCString note(pEntry->m_notes); nsString noteUTF16; PRBool isSecondaryMobileWorkNumber = PR_TRUE; PRBool isSecondaryFaxWorkNumber = PR_TRUE; nsCOMPtr<nsIStringBundle> bundle( dont_AddRef(nsEudoraStringBundle::GetStringBundleProxy()) ); if (!note.IsEmpty()) { ExtractNoteField( note, fax, "fax"); ExtractNoteField( note, secondaryFax, "fax2"); ExtractNoteField( note, phone, "phone"); ExtractNoteField( note, mobile, "mobile"); ExtractNoteField( note, secondaryMobile, "mobile2"); ExtractNoteField( note, address, "address"); ExtractNoteField( note, city, "city"); ExtractNoteField( note, state, "state"); ExtractNoteField( note, zip, "zip"); ExtractNoteField( note, country, "country"); ExtractNoteField( note, name, "name"); ExtractNoteField( note, firstName, "first"); ExtractNoteField( note, lastName, "last"); ExtractNoteField( note, webLink, "web"); ExtractNoteField( note, addressWK, "address2"); ExtractNoteField( note, cityWK, "city2"); ExtractNoteField( note, stateWK, "state2"); ExtractNoteField( note, zipWK, "zip2"); ExtractNoteField( note, countryWK, "country2"); ExtractNoteField( note, phoneWK, "phone2"); ExtractNoteField( note, title, "title"); ExtractNoteField( note, company, "company"); ExtractNoteField( note, webLinkWK, "web2"); ExtractNoteField( note, primaryLocation, "primary"); ExtractNoteField( note, additionalEmail, "otheremail"); ExtractNoteField( note, otherPhone, "otherphone"); ExtractNoteField( note, otherWeb, "otherweb"); // Is there any "extra" data that we may want to format nicely and place // in the notes field? if ( !additionalEmail.IsEmpty() || !otherPhone.IsEmpty() || !otherWeb.IsEmpty() ) { nsCString otherNotes(note); if ( !additionalEmail.IsEmpty() ) { // Reconstitute line breaks for additional email additionalEmail.ReplaceSubstring( "\x03", "\n"); // Try to figure out if there are multiple email addresses in additionalEmail PRInt32 idx = additionalEmail.FindCharInSet("\t\r\n,; "); if (idx != -1) { // We found a character that indicates that there's more than one email address here. // Separate out the addresses after the first one. additionalEmail.Right(stillMoreEmail, additionalEmail.Length() - idx - 1); stillMoreEmail.Trim(kWhitespace); // Separate out the first address. nsCString tempStashEmail(additionalEmail); tempStashEmail.Left(additionalEmail, idx); } // If there were more than one additional email addresses store all the extra // ones in the notes field, labeled nicely. if ( !stillMoreEmail.IsEmpty() ) FormatExtraDataInNoteField(EUDORAIMPORT_ADDRESS_LABEL_OTHEREMAIL, bundle, stillMoreEmail, noteUTF16); } if ( !otherPhone.IsEmpty() ) { // Reconstitute line breaks for other phone numbers otherPhone.ReplaceSubstring( "\x03", "\n"); // Store other phone numbers in the notes field, labeled nicely FormatExtraDataInNoteField(EUDORAIMPORT_ADDRESS_LABEL_OTHERPHONE, bundle, otherPhone, noteUTF16); } if ( !otherWeb.IsEmpty() ) { // Reconstitute line breaks for other web sites otherWeb.ReplaceSubstring( "\x03", "\n"); // Store other web sites in the notes field, labeled nicely FormatExtraDataInNoteField(EUDORAIMPORT_ADDRESS_LABEL_OTHERWEB, bundle, otherWeb, noteUTF16); } noteUTF16.Append( NS_ConvertASCIItoUTF16(note) ); } } CAliasData *pData = emailList.Count() ? (CAliasData *)emailList.ElementAt(0) : nsnull; if (pData && !pData->m_realName.IsEmpty()) displayName = pData->m_realName; else if (!name.IsEmpty()) displayName = name; else displayName = pEntry->m_name; address.ReplaceSubstring( "\x03", "\n"); SplitString( address, address2); note.ReplaceSubstring( "\x03", "\n"); fax.ReplaceSubstring( "\x03", " "); secondaryFax.ReplaceSubstring( "\x03", " "); phone.ReplaceSubstring( "\x03", " "); name.ReplaceSubstring( "\x03", " "); city.ReplaceSubstring( "\x03", " "); state.ReplaceSubstring( "\x03", " "); zip.ReplaceSubstring( "\x03", " "); country.ReplaceSubstring( "\x03", " "); addressWK.ReplaceSubstring( "\x03", "\n"); SplitString( addressWK, address2WK); phoneWK.ReplaceSubstring( "\x03", " "); cityWK.ReplaceSubstring( "\x03", " "); stateWK.ReplaceSubstring( "\x03", " "); zipWK.ReplaceSubstring( "\x03", " "); countryWK.ReplaceSubstring( "\x03", " "); title.ReplaceSubstring( "\x03", " "); company.ReplaceSubstring( "\x03", " "); if (newRow) { nsAutoString uniStr; // Home related fields. ADD_FIELD_TO_DB_ROW(pDb, AddDisplayName, newRow, displayName, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddNickName, newRow, pEntry->m_name, uniStr); if (pData) ADD_FIELD_TO_DB_ROW(pDb, AddPrimaryEmail, newRow, pData->m_email, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddFirstName, newRow, firstName, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddLastName, newRow, lastName, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWebPage2, newRow, webLink, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomePhone, newRow, phone, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeAddress, newRow, address, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeAddress2, newRow, address2, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeCity, newRow, city, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeZipCode, newRow, zip, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeState, newRow, state, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeCountry, newRow, country, uniStr); // Work related fields. ADD_FIELD_TO_DB_ROW(pDb, AddJobTitle, newRow, title, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddCompany, newRow, company, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWebPage1, newRow, webLinkWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkPhone, newRow, phoneWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkAddress, newRow, addressWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkAddress2, newRow, address2WK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkCity, newRow, cityWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkZipCode, newRow, zipWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkState, newRow, stateWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkCountry, newRow, countryWK, uniStr); if ( (primaryLocation.IsEmpty() || primaryLocation.LowerCaseEqualsASCII("home")) && !mobile.IsEmpty() ) { // Primary location field is either specified to be "home" or is not // specified and there is a home mobile number, so use that as the mobile number. ADD_FIELD_TO_DB_ROW(pDb, AddCellularNumber, newRow, mobile, uniStr); isSecondaryMobileWorkNumber = PR_TRUE; } else { // Primary location field is either specified to be "work" or there is no // home mobile number, so use work mobile number. ADD_FIELD_TO_DB_ROW(pDb, AddCellularNumber, newRow, secondaryMobile, uniStr); // Home mobile number (if any) is the secondary mobile number secondaryMobile = mobile; isSecondaryMobileWorkNumber = PR_FALSE; } if ( (primaryLocation.IsEmpty() || primaryLocation.LowerCaseEqualsASCII("home")) && !fax.IsEmpty() ) { // Primary location field is either specified to be "home" or is not // specified and there is a home fax number, so use that as the fax number. ADD_FIELD_TO_DB_ROW(pDb, AddFaxNumber, newRow, fax, uniStr); isSecondaryFaxWorkNumber = PR_TRUE; } else { // Primary location field is either specified to be "work" or there is no // home fax number, so use work fax number. ADD_FIELD_TO_DB_ROW(pDb, AddFaxNumber, newRow, secondaryFax, uniStr); // Home fax number (if any) is the secondary fax number secondaryFax = fax; isSecondaryFaxWorkNumber = PR_FALSE; } ADD_FIELD_TO_DB_ROW(pDb, Add2ndEmail, newRow, additionalEmail, uniStr); // Extra info fields PRInt32 stringID; nsString pFormat; nsString pCustomData; // Add second mobile number, if any, to the Custom 1 field if ( !secondaryMobile.IsEmpty() ) { stringID = isSecondaryMobileWorkNumber ? EUDORAIMPORT_ADDRESS_LABEL_WORKMOBILE : EUDORAIMPORT_ADDRESS_LABEL_HOMEMOBILE; pFormat.Adopt( nsEudoraStringBundle::GetStringByID(stringID, bundle) ); pCustomData.Adopt( nsTextFormatter::smprintf(pFormat.get(), NS_ConvertASCIItoUTF16(secondaryMobile).get()) ); pDb->AddCustom1( newRow, NS_ConvertUTF16toUTF8(pCustomData).get() ); } // Add second fax number, if any, to the Custom 2 field if ( !secondaryFax.IsEmpty() ) { stringID = isSecondaryFaxWorkNumber ? EUDORAIMPORT_ADDRESS_LABEL_WORKFAX : EUDORAIMPORT_ADDRESS_LABEL_HOMEFAX; pFormat.Adopt( nsEudoraStringBundle::GetStringByID(stringID, bundle) ); pCustomData.Adopt( nsTextFormatter::smprintf(pFormat.get(), NS_ConvertASCIItoUTF16(secondaryFax).get()) ); pDb->AddCustom2( newRow, NS_ConvertUTF16toUTF8(pCustomData).get() ); } // Lastly, note field. pDb->AddNotes( newRow, NS_ConvertUTF16toUTF8(noteUTF16).get() ); pDb->AddCardRowToDB( newRow); IMPORT_LOG1( "Added card to db: %s\n", displayName.get()); } }
void nsEudoraAddress::AddSingleCard( CAliasEntry *pEntry, nsVoidArray &emailList, nsIAddrDatabase *pDb) { // We always have a nickname and everything else is optional. // Map both home and work related fiedls to our address card. Eudora // fields that can't be mapped will be left in the 'note' field! nsIMdbRow* newRow = nsnull; pDb->GetNewRow( &newRow); if (!newRow) return; nsCString displayName, name, firstName, lastName; nsCString fax, phone, mobile, webLink; nsCString address, address2, city, state, zip, country; nsCString phoneWK, webLinkWK, title, company; nsCString addressWK, address2WK, cityWK, stateWK, zipWK, countryWK; nsCString note(pEntry->m_notes); if (!note.IsEmpty()) { ExtractNoteField( note, fax, "fax"); ExtractNoteField( note, phone, "phone"); ExtractNoteField( note, mobile, "mobile"); ExtractNoteField( note, address, "address"); ExtractNoteField( note, city, "city"); ExtractNoteField( note, state, "state"); ExtractNoteField( note, zip, "zip"); ExtractNoteField( note, country, "country"); ExtractNoteField( note, name, "name"); ExtractNoteField( note, firstName, "first"); ExtractNoteField( note, lastName, "last"); ExtractNoteField( note, webLink, "web"); ExtractNoteField( note, addressWK, "address2"); ExtractNoteField( note, cityWK, "city2"); ExtractNoteField( note, stateWK, "state2"); ExtractNoteField( note, zipWK, "zip2"); ExtractNoteField( note, countryWK, "country2"); ExtractNoteField( note, phoneWK, "phone2"); ExtractNoteField( note, title, "title"); ExtractNoteField( note, company, "company"); ExtractNoteField( note, webLinkWK, "web2"); } CAliasData *pData = emailList.Count() ? (CAliasData *)emailList.ElementAt(0) : nsnull; if (pData && !pData->m_realName.IsEmpty()) displayName = pData->m_realName; else if (!name.IsEmpty()) displayName = name; else displayName = pEntry->m_name; address.ReplaceSubstring( "\x03", "\x0D\x0A"); SplitString( address, address2); note.ReplaceSubstring( "\x03", "\x0D\x0A"); fax.ReplaceSubstring( "\x03", " "); phone.ReplaceSubstring( "\x03", " "); name.ReplaceSubstring( "\x03", " "); city.ReplaceSubstring( "\x03", " "); state.ReplaceSubstring( "\x03", " "); zip.ReplaceSubstring( "\x03", " "); country.ReplaceSubstring( "\x03", " "); addressWK.ReplaceSubstring( "\x03", "\x0D\x0A"); SplitString( addressWK, address2WK); phoneWK.ReplaceSubstring( "\x03", " "); cityWK.ReplaceSubstring( "\x03", " "); stateWK.ReplaceSubstring( "\x03", " "); zipWK.ReplaceSubstring( "\x03", " "); countryWK.ReplaceSubstring( "\x03", " "); title.ReplaceSubstring( "\x03", " "); company.ReplaceSubstring( "\x03", " "); if (newRow) { nsAutoString uniStr; // Home related fields. ADD_FIELD_TO_DB_ROW(pDb, AddDisplayName, newRow, displayName, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddNickName, newRow, pEntry->m_name, uniStr); if (pData) ADD_FIELD_TO_DB_ROW(pDb, AddPrimaryEmail, newRow, pData->m_email, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddFirstName, newRow, firstName, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddLastName, newRow, lastName, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWebPage2, newRow, webLink, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddFaxNumber, newRow, fax, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomePhone, newRow, phone, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeAddress, newRow, address, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeAddress2, newRow, address2, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeCity, newRow, city, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeZipCode, newRow, zip, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeState, newRow, state, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddHomeCountry, newRow, country, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddCellularNumber, newRow, mobile, uniStr); // Work related fields. ADD_FIELD_TO_DB_ROW(pDb, AddJobTitle, newRow, title, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddCompany, newRow, company, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWebPage1, newRow, webLinkWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkPhone, newRow, phoneWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkAddress, newRow, addressWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkAddress2, newRow, address2WK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkCity, newRow, cityWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkZipCode, newRow, zipWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkState, newRow, stateWK, uniStr); ADD_FIELD_TO_DB_ROW(pDb, AddWorkCountry, newRow, countryWK, uniStr); // Lastly, note field. ADD_FIELD_TO_DB_ROW(pDb, AddNotes, newRow, note, uniStr); pDb->AddCardRowToDB( newRow); IMPORT_LOG1( "Added card to db: %s\n", displayName.get()); } }