void nsEudoraAddress::ResolveEntries(nsCString& name, nsVoidArray& list, nsVoidArray& result, bool addResolvedEntries, bool wasResolved, PRInt32& numResolved) { /* a safe-guard against recursive entries */ if (result.Count() > m_alias.Count()) return; PRInt32 max = list.Count(); PRInt32 i; CAliasData * pData; CAliasEntry * pEntry; for (i = 0; i < max; i++) { pData = (CAliasData *)list.ElementAt(i); // resolve the email to an existing alias! if (!name.Equals(pData->m_email, nsCaseInsensitiveCStringComparator()) && ((pEntry = ResolveAlias(pData->m_fullEntry)) != nsnull)) { // This new entry has all of the entries for this puppie. // Resolve all of it's entries! numResolved++; // Track the number of entries resolved // We pass in true for the 5th parameter so that we know that we're // calling ourselves recursively. ResolveEntries(pEntry->m_name, pEntry->m_list, result, addResolvedEntries, true, numResolved); } else if (addResolvedEntries || !wasResolved) { // This is either an ordinary entry (i.e. just contains the info) or we were told // to add resolved alias entries. result.AppendElement(pData); } } }
PRBool nsVoidArray::InsertElementsAt(const nsVoidArray& other, PRInt32 aIndex) { PRInt32 oldCount = Count(); PRInt32 otherCount = other.Count(); NS_ASSERTION(aIndex >= 0,"InsertElementsAt(negative index)"); if (PRUint32(aIndex) > PRUint32(oldCount)) { // An invalid index causes the insertion to fail // Invalid indexes are ones that are more than one entry past the end of // the array (i.e., they can append). return PR_FALSE; } if (oldCount + otherCount > GetArraySize()) { if (!GrowArrayBy(otherCount)) return PR_FALSE;; } // else the array is already large enough PRInt32 slide = oldCount - aIndex; if (0 != slide) { // Slide data over to make room for the insertion memmove(mImpl->mArray + aIndex + otherCount, mImpl->mArray + aIndex, slide * sizeof(mImpl->mArray[0])); } for (PRInt32 i = 0; i < otherCount; i++) { // copy all the elements (destroys aIndex) mImpl->mArray[aIndex++] = other.mImpl->mArray[i]; mImpl->mCount++; } #if DEBUG_VOIDARRAY if (mImpl->mCount > mMaxCount && mImpl->mCount < (PRInt32)(sizeof(MaxElements)/sizeof(MaxElements[0]))) { MaxElements[mImpl->mCount]++; MaxElements[mMaxCount]--; mMaxCount = mImpl->mCount; } #endif return PR_TRUE; }
NS_INTERFACE_MAP_END //---------------------------------------------------------------------- // nsISVGValue methods: NS_IMETHODIMP nsSVGPathSegList::SetValueString(const nsAString& aValue) { nsresult rv; char *str = ToNewCString(aValue); nsVoidArray data; nsSVGPathDataParser parser(&data); rv = parser.Parse(str); if (NS_SUCCEEDED(rv)) { WillModify(); ReleaseSegments(); mSegments = data; PRInt32 count = mSegments.Count(); for (PRInt32 i=0; i<count; ++i) { nsIDOMSVGPathSeg* seg = ElementAt(i); nsCOMPtr<nsISVGValue> val = do_QueryInterface(seg); if (val) val->AddObserver(this); } DidModify(); } else { NS_ERROR("path data parse error!"); PRInt32 count = data.Count(); for (PRInt32 i=0; i<count; ++i) { nsIDOMSVGPathSeg* seg = (nsIDOMSVGPathSeg*)data.ElementAt(i); NS_RELEASE(seg); } } nsMemory::Free(str); return rv; }
PRBool TypeInState::FindPropInList(nsIAtom *aProp, const nsAString &aAttr, nsAString *outValue, nsVoidArray &aList, PRInt32 &outIndex) { // linear search. list should be short. PRInt32 i, count = aList.Count(); for (i=0; i<count; i++) { PropItem *item = (PropItem*)aList[i]; if ( (item->tag == aProp) && (item->attr == aAttr) ) { if (outValue) *outValue = item->value; outIndex = i; return PR_TRUE; } } return PR_FALSE; }
nsIDOMSVGPathSeg* nsSVGPathSegList::ElementAt(PRInt32 index) { return (nsIDOMSVGPathSeg*)mSegments.ElementAt(index); }
/* readonly attribute unsigned long numberOfItems; */ NS_IMETHODIMP nsSVGPathSegList::GetNumberOfItems(PRUint32 *aNumberOfItems) { *aNumberOfItems = mSegments.Count(); return NS_OK; }
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()); } }
static void DeleteWrappers(nsVoidArray &wrappers) { for (PRInt32 i=0; i<wrappers.Count(); ++i) gDConnect->DeleteInstance((DConnectInstance *) wrappers[i]); }