diff --git a/mailnews/base/src/nsMsgFolderDataSource.cpp b/mailnews/base/src/nsMsgFolderDataSource.cpp index 6e60a2daf523..a67ce6400623 100644 --- a/mailnews/base/src/nsMsgFolderDataSource.cpp +++ b/mailnews/base/src/nsMsgFolderDataSource.cpp @@ -623,7 +623,20 @@ nsMsgFolderDataSource::createTotalMessagesNode(nsIMsgFolder *folder, PRInt32 totalMessages; rv = folder->GetTotalMessages(PR_FALSE, &totalMessages); if(NS_SUCCEEDED(rv)) - rv = createNode(totalMessages, target); + { + if(totalMessages >= 0) + rv = createNode(totalMessages, target); + else if(totalMessages == -1) + { + nsString unknownMessages("???"); + createNode(unknownMessages, target); + } + else if(totalMessages == -2) + { + nsString unknownMessages(""); + createNode(unknownMessages, target); + } + } return rv; } @@ -635,7 +648,21 @@ nsMsgFolderDataSource::createUnreadMessagesNode(nsIMsgFolder *folder, PRInt32 totalUnreadMessages; rv = folder->GetNumUnread(PR_FALSE, &totalUnreadMessages); if(NS_SUCCEEDED(rv)) - rv = createNode(totalUnreadMessages, target); + { + if(totalUnreadMessages >=0) + rv = createNode(totalUnreadMessages, target); + else if(totalUnreadMessages == -1) + { + nsString unknownMessages("???"); + createNode(unknownMessages, target); + } + else if(totalUnreadMessages == -2) + { + nsString unknownMessages(""); + createNode(unknownMessages, target); + } + } + return NS_OK; } @@ -712,6 +739,11 @@ nsresult nsMsgFolderDataSource::DoDeleteFromFolder(nsIMsgFolder *folder, nsISupp if (cnt > 0) rv = folder->DeleteMessages(messageArray); +/* rv = folderArray->Count(&cnt); + if (NS_FAILED(rv)) return rv; + if (cnt > 0) + rv = folder->DeleteSubFolders(folderArray); +*/ return rv; } diff --git a/mailnews/base/src/nsMsgMessageDataSource.cpp b/mailnews/base/src/nsMsgMessageDataSource.cpp index bcb534e5b802..645f397c25d2 100644 --- a/mailnews/base/src/nsMsgMessageDataSource.cpp +++ b/mailnews/base/src/nsMsgMessageDataSource.cpp @@ -489,10 +489,10 @@ nsMsgMessageDataSource::createMessageNode(nsIMessage *message, nsIRDFResource *property, nsIRDFNode **target) { - PRBool sort; - if (peqSort(kNC_Subject, property, &sort)) + PRBool sort; + if (peqCollationSort(kNC_Subject, property, &sort)) return createMessageNameNode(message, sort, target); - else if (peqSort(kNC_Sender, property, &sort)) + else if (peqCollationSort(kNC_Sender, property, &sort)) return createMessageSenderNode(message, sort, target); else if (peq(kNC_Date, property)) return createMessageDateNode(message, target); diff --git a/mailnews/base/src/nsMsgRDFUtils.cpp b/mailnews/base/src/nsMsgRDFUtils.cpp index 4e613ab0727e..99c8a0fcbffe 100644 --- a/mailnews/base/src/nsMsgRDFUtils.cpp +++ b/mailnews/base/src/nsMsgRDFUtils.cpp @@ -37,47 +37,63 @@ peq(nsIRDFResource* r1, nsIRDFResource* r2) } } -PRBool -peqSort(nsIRDFResource* r1, nsIRDFResource* r2, PRBool *isSort) +static PRBool +peqWithParameter(nsIRDFResource *r1, nsIRDFResource *r2, PRBool *isParameter, const char *parameter) { - if(!isSort) - return PR_FALSE; - char *r1Str, *r2Str; - nsString r1nsStr, r2nsStr, r1nsSortStr; + nsString r1nsStr, r2nsStr, r1nsParameterStr; r1->GetValue(&r1Str); r2->GetValue(&r2Str); r1nsStr = r1Str; r2nsStr = r2Str; - r1nsSortStr = r1Str; + r1nsParameterStr = r1Str; nsAllocator::Free(r1Str); nsAllocator::Free(r2Str); //probably need to not assume this will always come directly after property. - r1nsSortStr +="?sort=true"; + r1nsParameterStr +=parameter; if(r1nsStr == r2nsStr) { - *isSort = PR_FALSE; + *isParameter = PR_FALSE; return PR_TRUE; } - else if(r1nsSortStr == r2nsStr) + else if(r1nsParameterStr == r2nsStr) { - *isSort = PR_TRUE; + *isParameter = PR_TRUE; return PR_TRUE; } else { //In case the resources are equal but the values are different. I'm not sure if this //could happen but it is feasible given interface. - *isSort = PR_FALSE; + *isParameter = PR_FALSE; return(peq(r1, r2)); } } +PRBool +peqCollationSort(nsIRDFResource *r1, nsIRDFResource *r2, PRBool *isCollationSort) +{ + + if(!isCollationSort) + return PR_FALSE; + + return peqWithParameter(r1, r2, isCollationSort, "?collation=true"); +} + +PRBool +peqSort(nsIRDFResource* r1, nsIRDFResource* r2, PRBool *isSort) +{ + if(!isSort) + return PR_FALSE; + + return peqWithParameter(r1, r2, isSort, "?sort=true"); +} + nsresult createNode(nsString& str, nsIRDFNode **node) { *node = nsnull; diff --git a/mailnews/base/src/nsMsgRDFUtils.h b/mailnews/base/src/nsMsgRDFUtils.h index 086a5ea93e85..cd3388101a01 100644 --- a/mailnews/base/src/nsMsgRDFUtils.h +++ b/mailnews/base/src/nsMsgRDFUtils.h @@ -65,6 +65,10 @@ peq(nsIRDFResource* r1, nsIRDFResource* r2); PRBool peqSort(nsIRDFResource* r1, nsIRDFResource* r2, PRBool *isSort); +//Returns PR_TRUE if r1 is equal to r2 and r2 is the collation property. +PRBool +peqCollationSort(nsIRDFResource* r1, nsIRDFResource* r2, PRBool *isCollation); + //Given an nsString, create an nsIRDFNode nsresult createNode(nsString& str, nsIRDFNode **node);