Closed Bug 149961 Opened 22 years ago Closed 21 years ago

Mail list addresses are not imported from Outlook

Categories

(SeaMonkey :: MailNews: Address Book & Contacts, defect)

x86
Windows XP
defect
Not set
normal

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: dalen.kruse, Assigned: cavin)

References

Details

(Whiteboard: [ish])

Attachments

(1 file, 4 obsolete files)

When importing an address book from Outlook, the addresses for mailing lists are
not imported.  An entry is created for the list, but no e-mail addresses for the
list is displayed.

If requested, I can send the Outlook address book file.
Branch build 2002-07-01: WinMe
Reproduced the problem. 
Marking nsbeta1 so this can be fixed for this release.
Assignee: racham → cavin
Keywords: nsbeta1
Yes, we need to add code to extract members of the lists from MAPI in order to 
fix the problem (see nsOutlookMail::CreateList()).
Cavin, bug# 82791/comment# 9 states "...Members of lists are not imported due to 
not being able to retrieve the member values." This is the same issue, right?
Status: UNCONFIRMED → NEW
Ever confirmed: true
Right. So it's good that we have this bug to keep track of the member issue.
Whiteboard: [ish]
Mail triage team: nsbeta1-
Keywords: nsbeta1-
Keywords: nsbeta1
*** Bug 187095 has been marked as a duplicate of this bug. ***
*** Bug 148801 has been marked as a duplicate of this bug. ***
*** Bug 205663 has been marked as a duplicate of this bug. ***
*** Bug 200469 has been marked as a duplicate of this bug. ***
Blocks: 165296
Add myself to the cc list.I am working on OpenOffice Address Book Integration
Project.And meet the same problem.
Attached patch patch for 1.5b to add outlook mailist support (obsolete) (deleted) — Splinter Review
This is a work through patch.I test it with mozilla 1.5b and outlook 2002.
[tracking] StarOffice/OpenOffice AddressBook integration
Blocks: 213274
Comment on attachment 131429 [details] [diff] [review]
patch for 1.5b to add outlook mailist support

any one review it?
Attachment #131429 - Flags: review?
Comment on attachment 131429 [details] [diff] [review]
patch for 1.5b to add outlook mailist support

David can you review this?
Attachment #131429 - Flags: review? → review?(bienvenu)
Comment on attachment 131429 [details] [diff] [review]
patch for 1.5b to add outlook mailist support

+	[noscript] void AddListCardColumnsToRow(in nsIAbCard pCard, in
nsIMdbRow pListRow, in PRUint32 pos,out nsIAbCard pNewCard, in PRBool
aInMailingList);
+	[noscript] void GetCardFromDB(in nsIAbCard newCard, in nsIMdbRow
cardRow);
+	[noscript] void SetListAddressTotal(in nsIMdbRow listRow, in PRUint32
total);
+	[noscript] boolean FindRow(in nsIAbCard card, out nsIMdbRow oldRow);
why are these [noscript]? they could be scriptable, right? You should also use
idl types when possible, so  unsigned long instead of PRUint32, boolean instead
of PRBool.

also, all the argument names should begin with a (for argument), so it would be
"in nsIAbCard aPCard".

FindRow could return an nsIMdbRow instead of boolean, and return a null row in
case it couldn't find the row. And, why is the arg called "oldRow"? It looks
like it's the returned row, not "oldRow". Also, there seem to be a lot of tabs
in the patch - those need to be replaced with two space indents.

you can use nsCOMPtr's here:
					nsIMdbRow* newRow = nsnull;
+					nsIMdbRow* oldRow = nsnull;
. That simplifies the ref-counting code.

The GetCardFromDB method is not named correctly (I realize you didn't name it,
but you're making it a public interface, so it's more important that its name
reflect what it does) I suggest something like InitCardFromRow.

Fix these things and I'll review a new patch as quickly as I can. Thx for
working on this!
Attachment #131429 - Flags: review?(bienvenu) → review-
Blocks: 222774
Attached patch updated (obsolete) (deleted) — Splinter Review
->why are these [noscript]? they could be scriptable, right? 
No.The whole interface is definded noscript.
->The GetCardFromDB method is not named correctly 
GetCardFromDB is the origin name of this function.And a nsIMdbRow is a db row.So
I think matbe GetCardFromDB.
OK?
Comment on attachment 133684 [details] [diff] [review]
updated

>Index: mailnews/addrbook/public/nsIAddrDatabase.idl
>===================================================================
>RCS file: /cvsroot/mozilla/mailnews/addrbook/public/nsIAddrDatabase.idl,v
>retrieving revision 1.37
>diff -u -w -b -i -r1.37 nsIAddrDatabase.idl
>--- mailnews/addrbook/public/nsIAddrDatabase.idl	18 Mar 2003 18:39:32 -0000	1.37
>+++ mailnews/addrbook/public/nsIAddrDatabase.idl	20 Oct 2003 13:21:10 -0000
>@@ -257,4 +257,14 @@
>      *        The column value (example: jabroni316)
>      */
>     [noscript] void addRowValue(in nsIMdbRow aRow, in ACString aLDIFAttributeName, in AString aColValue);
>+
>+    [noscript] void AddListCardColumnsToRow(in nsIAbCard aPCard,
>+                                            in nsIMdbRow aPListRow,
>+                                            in unsigned long aPos,
>+                                            out nsIAbCard aPNewCard,
>+                                            in boolean aInMailingList);
>+    [noscript] void GetCardFromDB(in nsIAbCard aNewCard,in nsIMdbRow aCardRow);
>+    [noscript] void SetListAddressTotal(in nsIMdbRow aListRow, in PRUint32 aTotal);
>+    [noscript] nsIMdbRow FindRow(in nsIAbCard aCard);
>+
> };
>Index: mailnews/addrbook/src/nsAddrDatabase.cpp
>===================================================================
>RCS file: /cvsroot/mozilla/mailnews/addrbook/src/nsAddrDatabase.cpp,v
>retrieving revision 1.116
>diff -u -w -b -i -r1.116 nsAddrDatabase.cpp
>--- mailnews/addrbook/src/nsAddrDatabase.cpp	23 May 2003 21:33:47 -0000	1.116
>+++ mailnews/addrbook/src/nsAddrDatabase.cpp	20 Oct 2003 13:22:43 -0000
>@@ -1618,7 +1618,7 @@
>     return rv;
> }
> 
>-nsresult nsAddrDatabase::AddListCardColumnsToRow
>+NS_IMETHODIMP nsAddrDatabase::AddListCardColumnsToRow
> (nsIAbCard *pCard, nsIMdbRow *pListRow, PRUint32 pos, nsIAbCard** pNewCard, PRBool aInMailingList)
> {
>   if (!pCard && !pListRow )
>@@ -1782,9 +1782,20 @@
>     return count;
> }
> 
>-nsresult nsAddrDatabase::SetListAddressTotal(nsIMdbRow* listRow, PRUint32 total)
>+NS_IMETHODIMP nsAddrDatabase::SetListAddressTotal(nsIMdbRow* aListRow, PRUint32 aTotal)
> {
>-    return AddIntColumn(listRow, m_ListTotalColumnToken, total);
>+    return AddIntColumn(aListRow, m_ListTotalColumnToken, aTotal);
>+}
>+
>+NS_IMETHODIMP nsAddrDatabase::FindRow(nsIAbCard * aCard,nsIMdbRow **_retval)
>+{
>+    PRUnichar *aPrimaryEmail;
>+    nsIMdbRow *newRow=nsnull;
>+    aCard->GetPrimaryEmail(&aPrimaryEmail);
>+    nsresult rv=GetRowForCharColumn (aPrimaryEmail,m_PriEmailColumnToken,PR_TRUE,&newRow);
>+
>+    *_retval=newRow;
>+    return rv;
> }
> 
> 
>@@ -2607,7 +2618,7 @@
>   return rv;
> }
> 
>-nsresult nsAddrDatabase::GetCardFromDB(nsIAbCard *newCard, nsIMdbRow* cardRow)
>+NS_IMETHODIMP nsAddrDatabase::GetCardFromDB(nsIAbCard *newCard, nsIMdbRow* cardRow)
> {
>     nsresult    err = NS_OK;
>     if (!newCard || !cardRow)
>Index: mailnews/addrbooksrc/nsAddrDatabase.h
>===================================================================
>RCS file: /cvsroot/mozilla/mailnews/addrbook/src/nsAddrDatabase.h,v
>retrieving revision 1.44
>diff -u -w -b -i -r1.44 nsAddrDatabase.h
>--- mailnews/addrbook/src/nsAddrDatabase.h	25 Apr 2003 03:05:12 -0000	1.44
>+++ mailnews/addrbook/src/nsAddrDatabase.h	20 Oct 2003 13:22:47 -0000
>@@ -322,6 +322,12 @@
> 
>   static void PRTime2Seconds(PRTime prTime, PRUint32 *seconds);
>   
>+
>+    NS_IMETHOD AddListCardColumnsToRow(nsIAbCard *aPCard, nsIMdbRow *aPListRow, PRUint32 aPos, nsIAbCard** aPNewCard, PRBool aInMailingList);
>+    NS_IMETHOD GetCardFromDB(nsIAbCard *aNewCard, nsIMdbRow* aCardRow);
>+    NS_IMETHOD SetListAddressTotal(nsIMdbRow* aListRow, PRUint32 aTotal);
>+    NS_IMETHOD FindRow(nsIAbCard * card,nsIMdbRow **_retval);
>+
> protected:
>   
>   static void		AddToCache(nsAddrDatabase* pAddrDB) {GetDBCache()->AppendElement(pAddrDB);}
>@@ -346,16 +352,13 @@
> 	nsresult GetIntColumn(nsIMdbRow *cardRow, mdb_token outToken, 
> 							PRUint32* pValue, PRUint32 defaultValue);
> 	nsresult GetBoolColumn(nsIMdbRow *cardRow, mdb_token outToken, PRBool* pValue);
>-	nsresult GetCardFromDB(nsIAbCard *newCard, nsIMdbRow* cardRow);
> 	nsresult GetListCardFromDB(nsIAbCard *listCard, nsIMdbRow* listRow);
> 	nsresult GetListFromDB(nsIAbDirectory *newCard, nsIMdbRow* listRow);
> 	nsresult AddRecordKeyColumnToRow(nsIMdbRow *pRow);
> 	nsresult AddAttributeColumnsToRow(nsIAbCard *card, nsIMdbRow *cardRow);
>-	nsresult AddListCardColumnsToRow(nsIAbCard *pCard, nsIMdbRow *pListRow, PRUint32 pos, nsIAbCard** pNewCard, PRBool aInMailingList);
> 	nsresult AddListAttributeColumnsToRow(nsIAbDirectory *list, nsIMdbRow *listRow);
> 	nsresult CreateCard(nsIMdbRow* cardRow, mdb_id listRowID, nsIAbCard **result);
> 	nsresult CreateCardFromDeletedCardsTable(nsIMdbRow* cardRow, mdb_id listRowID, nsIAbCard **result);
>-	nsresult SetListAddressTotal(nsIMdbRow* listRow, PRUint32 total);
> 	nsresult DeleteCardFromListRow(nsIMdbRow* pListRow, mdb_id cardRowID);
> 	void DeleteCardFromAllMailLists(mdb_id cardRowID);
> 	nsresult NotifyListEntryChange(PRUint32 abCode, nsIAbDirectory *dir, nsIAddrDBListener *instigator);
>Index: mailnews/import/outlook/src/MapiApi.cpp
>===================================================================
>RCS file: /cvsroot/mozilla/mailnews/import/outlook/src/MapiApi.cpp,v
>retrieving revision 1.23
>diff -u -w -b -i -r1.23 MapiApi.cpp
>--- mailnews/import/outlook/src/MapiApi.cpp	19 Feb 2002 22:49:08 -0000	1.23
>+++ mailnews/import/outlook/src/MapiApi.cpp	20 Oct 2003 13:24:47 -0000
>@@ -505,13 +505,12 @@
> {	
> 	ULONG		ulObjType;
> 	HRESULT		hr;
>-	hr =	lpMdb->OpenEntry(	cbEntry,
>+    hr = m_lpSession->OpenEntry(cbEntry,
> 								pEntryId,
> 								NULL,
> 								0,
> 								&ulObjType,
> 								(LPUNKNOWN *) ppOpen);
>-
> 	if (FAILED(hr)) {
> 		MAPI_TRACE2( "OpenMdbEntry failed: 0x%lx, %d\n", (long)hr, (int)hr);
> 		return( FALSE);
>Index: mailnews/import/outlook/src/nsOutlookMail.cpp
>===================================================================
>RCS file: /cvsroot/mozilla/mailnews/import/outlook/src/nsOutlookMail.cpp,v
>retrieving revision 1.29
>diff -u -w -b -i -r1.29 nsOutlookMail.cpp
>--- mailnews/import/outlook/src/nsOutlookMail.cpp	6 Nov 2002 02:58:04 -0000	1.29
>+++ mailnews/import/outlook/src/nsOutlookMail.cpp	20 Oct 2003 13:25:06 -0000
>@@ -1005,7 +1005,7 @@
>           pVal = m_mapi.GetMapiProperty( lpMsg, PR_SUBJECT);
>           if (pVal)
>             m_mapi.GetStringFromProp( pVal, subject);
>-          CreateList(subject.get(), pDb);
>+          CreateList(subject.get(), pDb, lpMsg, pFieldMap);
>         }
> 			}			
> 
>@@ -1017,8 +1017,10 @@
>   rv = pDb->Commit(nsAddrDBCommitType::kLargeCommit);
> 	return rv;
> }
>-
>-nsresult nsOutlookMail::CreateList( const PRUnichar * pName, nsIAddrDatabase *pDb)
>+nsresult nsOutlookMail::CreateList( const PRUnichar * pName,
>+                                   nsIAddrDatabase *pDb,
>+                                   LPMAPIPROP pUserList,
>+                                   nsIImportFieldMap *pFieldMap)
> {
>   // If no name provided then we're done.
>   if (!pName || !(*pName))
>@@ -1029,17 +1031,105 @@
>   if (!pDb)
>     return rv;
> 
>-  nsCOMPtr <nsIMdbRow> newRow;
>-  rv = pDb->GetNewListRow(getter_AddRefs(newRow));
>+  nsCOMPtr <nsIMdbRow> newListRow;
>+  rv = pDb->GetNewListRow(getter_AddRefs(newListRow));
>+  NS_ENSURE_SUCCESS(rv, rv);
>+  nsCAutoString column;
>+  column.AssignWithConversion(pName);
>+  rv = pDb->AddListName(newListRow, column.get());
>   NS_ENSURE_SUCCESS(rv, rv);
> 
>-  rv = pDb->AddListName(newRow, NS_ConvertUCS2toUTF8(pName).get());
>+    HRESULT             hr;
>+    LPSPropValue aValue = NULL ;
>+    ULONG aValueCount = 0 ;
>+
>+    LPSPropTagArray properties = NULL ;
>+    m_mapi.MAPIAllocateBuffer(CbNewSPropTagArray(1),
>+                       (void **)&properties) ;
>+    properties->cValues = 1;
>+    properties->aulPropTag [0] = m_mapi.GetEmailPropertyTag(pUserList, 0x8054);
>+    hr = pUserList->GetProps(properties, 0, &aValueCount, &aValue) ;
>+
>+    SBinaryArray *sa=(SBinaryArray *)&aValue->Value.bin;
>+
>+    LPENTRYID    lpEid;
>+    ULONG        cbEid;
>+    PRInt32        idx;
>+    LPMESSAGE        lpMsg;
>+    nsCString        type;
>+    LPSPropValue    pVal;
>+    nsString        subject;
>+    PRUint32 total;
>+    
>+
>+    total=sa->cValues;
>+    for (idx=0;idx<sa->cValues ;idx++)
>+    {
>+        lpEid= (LPENTRYID) sa->lpbin[idx].lpb;
>+        cbEid = sa->lpbin[idx].cb;
>+
>+
>+        if (!m_mapi.OpenEntry(cbEid, lpEid, (LPUNKNOWN *) &lpMsg))
>+        {
>+            
>+            IMPORT_LOG1( "*** Error opening messages in mailbox: %S\n", pName);
>+            return( NS_ERROR_FAILURE);
>+        }
>+        {
>+            {
>+                // This is a contact, add it to the address book!
>+                subject.Truncate( 0);
>+                pVal = m_mapi.GetMapiProperty( lpMsg, PR_SUBJECT);
>+                if (pVal)
>+                    m_mapi.GetStringFromProp( pVal, subject);
>+                
>+                    nsIMdbRow* newRow = nsnull;
>+                    nsIMdbRow* oldRow = nsnull;
>+                    pDb->GetNewRow( &newRow);
>+                    if (newRow) {
>+                        if (BuildCard( subject.get(), pDb, newRow, lpMsg, pFieldMap)) 
>+                        {
>+                            nsCOMPtr <nsIAbCard> userCard;
>+                            nsCOMPtr <nsIAbCard> newCard;
>+                            userCard = do_CreateInstance(NS_ABMDBCARD_CONTRACTID, &rv);
>   NS_ENSURE_SUCCESS(rv, rv);
>-  rv = pDb->AddCardRowToDB(newRow);
>+                            pDb->GetCardFromDB(userCard,newRow);
>+                            
>+                            //add card to db
>+                            PRBool bl=PR_FALSE;
>+                            pDb->FindRow(userCard,&oldRow);
>+                            if (oldRow)
>+                            {
>+                                NS_RELEASE(newRow);
>+                                newRow = oldRow;
>+                            }
>+                            else
>+                            {
>+                                pDb->AddCardRowToDB( newRow);
>+                            }
>+                            
>+                            //add card list
>+                            pDb->AddListCardColumnsToRow(userCard,
>+                                              newListRow,idx+1,
>+                                              getter_AddRefs(newCard),PR_TRUE);
>+
>+                            NS_RELEASE(newRow);
>+                        }
>+                    }
>+
>+
>+            }
>+        }
>+    }
>+  
>+  rv = pDb->AddCardRowToDB(newListRow);
>   NS_ENSURE_SUCCESS(rv, rv);
>-  rv = pDb->AddListDirNode(newRow);
>+
>+  rv = pDb->SetListAddressTotal(newListRow, total);
>+  rv = pDb->AddListDirNode(newListRow);
>   return rv;
> }
>+
> 
> void nsOutlookMail::SanitizeValue( nsString& val)
> {
>Index: mailnews/import/outlook/src/nsOutlookMail.h
>===================================================================
>RCS file: /cvsroot/mozilla/mailnews/import/outlook/src/nsOutlookMail.h,v
>retrieving revision 1.11
>diff -u -w -b -i -r1.11 nsOutlookMail.h
>--- mailnews/import/outlook/src/nsOutlookMail.h	6 Nov 2002 02:58:05 -0000	1.11
>+++ mailnews/import/outlook/src/nsOutlookMail.h	20 Oct 2003 13:25:06 -0000
>@@ -78,7 +78,7 @@
> 	void		SanitizeValue( nsString& val);
> 	void		SplitString( nsString& val1, nsString& val2);
> 	PRBool		BuildCard( const PRUnichar *pName, nsIAddrDatabase *pDb, nsIMdbRow *newRow, LPMAPIPROP pUser, nsIImportFieldMap *pFieldMap);
>-  nsresult  CreateList( const PRUnichar * pName, nsIAddrDatabase *pDb);
>+  nsresult  CreateList( const PRUnichar * pName, nsIAddrDatabase *pDb, LPMAPIPROP pUserList, nsIImportFieldMap *pFieldMap);
>   void SetDefaultContentType(CMapiMessage &msg, nsCString &cType);
> 
> private:
Attached patch update patch to trunk (obsolete) (deleted) — Splinter Review
Comment on attachment 133720 [details] [diff] [review]
update patch to trunk

->why are these [noscript]? they could be scriptable, right? 
No.The whole interface is definded noscript.
->The GetCardFromDB method is not named correctly 
GetCardFromDB is the origin name of this function.And a nsIMdbRow is a db
row.So
I think matbe GetCardFromDB.
OK?
Attachment #133720 - Flags: review?(bienvenu)
As I said before, "the GetCardFromDB method is not named correctly (I realize
you didn't name it, but you're making it a public interface, so it's more
important that its name reflect what it does) I suggest something like
InitCardFromRow."

>No.The whole interface is definded noscript.

Not sure what you mean - there are many methods in nsIAddrDatabase.idl that are
scriptable. Your new ones should also be scriptable.
Attached patch New patch incorporating David's suggestions (obsolete) (deleted) — Splinter Review
Attachment #131429 - Attachment is obsolete: true
Attachment #133684 - Attachment is obsolete: true
Attachment #133720 - Attachment is obsolete: true
Attachment #133731 - Flags: review?(bienvenu)
Thx for fixing those things. Here are the rest of my comments:

You can use nsCOMPtrs in this code - I think I didn't give you enough context in
my previous comment about this. Sorry about that. So, this code:

+                    nsIMdbRow* newRow = nsnull;
+                    nsIMdbRow* oldRow = nsnull;
+                    pDb->GetNewRow( &newRow);
+                    if (newRow) {
+                        if (BuildCard( subject.get(), pDb, newRow, lpMsg,
pFieldMap)) 
+                        {
+                            nsCOMPtr <nsIAbCard> userCard;
+                            nsCOMPtr <nsIAbCard> newCard;
+                            userCard =
do_CreateInstance(NS_ABMDBCARD_CONTRACTID, &rv);
   NS_ENSURE_SUCCESS(rv, rv);
-  rv = pDb->AddCardRowToDB(newRow);
+                            pDb->InitCardFromRow(userCard,newRow);
+                            
+                            //add card to db
+                            PRBool bl=PR_FALSE;
+                            pDb->FindRow(userCard,&oldRow);
+                            if (oldRow)
+                            {
+                                NS_RELEASE(newRow);
+                                newRow = oldRow;
+                            }
+                            else
+                            {
+                                pDb->AddCardRowToDB( newRow);
+                            }
+                            
+                            //add card list
+                            pDb->AddListCardColumnsToRow(userCard,
+                                              newListRow,idx+1,
+                                              getter_AddRefs(newCard),PR_TRUE);
+
+                            NS_RELEASE(newRow);
+                        }

can look like this code below instead.  However, I'm confused by this code.
After CreateInstance of userCard, you add the new row to the db with ths line:

  rv = pDb->AddCardRowToDB(newRow);

then, later, if you don't find the row, you add the new row to the db again. Am
I misunderstanding something?

                           pDb->FindRow(userCard,getter_AddRefs(oldRow));
                            if (oldRow)
                                newRow = oldRow;
                            else
                                pDb->AddCardRowToDB( newRow);

So, here's what the code would look like with comptrs.

                    nsCOMPtr <nsIMdbRow> newRow;
                    nsCOMPtr <nsIMdbRow> oldRow;
                    pDb->GetNewRow( getter_AddRefs(newRow));
                    if (newRow) {
                        if (BuildCard( subject.get(), pDb, newRow, lpMsg,
pFieldMap)) 
                        {
                            nsCOMPtr <nsIAbCard> userCard;
                            nsCOMPtr <nsIAbCard> newCard;
                            userCard =
do_CreateInstance(NS_ABMDBCARD_CONTRACTID, &rv);
   NS_ENSURE_SUCCESS(rv, rv);
  rv = pDb->AddCardRowToDB(newRow);
                            pDb->InitCardFromRow(userCard,newRow);
                            
                            //add card to db
                            PRBool bl=PR_FALSE;
                            pDb->FindRow(userCard,getter_AddRefs(oldRow));
                            if (oldRow)
                                newRow = oldRow;
                            else
                                pDb->AddCardRowToDB( newRow);
                            
                            //add card list
                            pDb->AddListCardColumnsToRow(userCard,
                                              newListRow,idx+1,
                                              getter_AddRefs(newCard),PR_TRUE);

                        }

this code doesn't follow the argument naming standard for the arg, but uses it a
for a local var. and it also looks like it leaks the primary e-mail string.
+NS_IMETHODIMP nsAddrDatabase::FindRow(nsIAbCard * aCard,nsIMdbRow **_retval)
+{
+    PRUnichar *aPrimaryEmail;
+    nsIMdbRow *newRow=nsnull;
+    aCard->GetPrimaryEmail(&aPrimaryEmail);
+    nsresult rv=GetRowForCharColumn
(aPrimaryEmail,m_PriEmailColumnToken,PR_TRUE,&newRow);
+
+    *_retval=newRow;
+    return rv;
 }
 

so, this code should look more like this:

NS_IMETHODIMP nsAddrDatabase::FindRow(nsIAbCard * aCard,nsIMdbRow **aRow)
{
    nsXPIDLString primaryEmail;
    aCard->GetPrimaryEmail(getter_Copies(primaryEmail));
    return GetRowForCharColumn(aPrimaryEmail, m_PriEmailColumnToken, PR_TRUE, aRow);
}
 
+    NS_IMETHOD FindRow(nsIAbCard * card,nsIMdbRow **_retval);

should be:
+    NS_IMETHOD FindRow(nsIAbCard * card,nsIMdbRow **aRow);


Again, thx for doing this.
Attached patch update (deleted) — Splinter Review
David , thanks for your particular comments.I have got many benefits from your
kindness.I am working on other an outlook interrelated bug. You can find it
here http://bugzilla.mozilla.org/show_bug.cgi?id=219559 .
Attachment #133731 - Attachment is obsolete: true
Attachment #134089 - Flags: review?(bienvenu)
Comment on attachment 134089 [details] [diff] [review]
update

looks good, r=bienvenu, thx.
Attachment #134089 - Flags: review?(bienvenu) → review+
Can you suggest a sr David?I am a beginner to Mozilla community.Thx.
Comment on attachment 134089 [details] [diff] [review]
update

Seth,Can you have a look at this?
Attachment #134089 - Flags: superreview?(sspitzer)
Attachment #134089 - Flags: superreview?(sspitzer) → superreview+
yes, wind li, this can be checked in. Do you want me to check it in for you when
the tree opens for 1.6b?
Yes,I do.Thanks,David.
fix checked in. thx again wind li
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Attachment #133720 - Flags: review?(bienvenu)
Attachment #133731 - Flags: review?(bienvenu)
Fix doesn't work for Outlook Express. Testing with OE6 and Mozilla 1.6 still
results in an empty list but all entries were imported. Result is a broken
mailing list.

-> Reopen because bugs marked as dupes refers also to other products as Outlook.
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Damn, bug 222774 depends on that bug. I'm very sorry.

-> Resetting to Fixed.
Status: REOPENED → RESOLVED
Closed: 21 years ago21 years ago
Resolution: --- → FIXED
Product: Browser → Seamonkey
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: