Show "???" when message counts are unknown. Use RDF collation key sorting.

This commit is contained in:
putterman%netscape.com 1999-05-18 23:48:15 +00:00
Родитель b941736a5e
Коммит 1ed1220ae6
4 изменённых файлов: 69 добавлений и 17 удалений

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

@ -623,7 +623,20 @@ nsMsgFolderDataSource::createTotalMessagesNode(nsIMsgFolder *folder,
PRInt32 totalMessages; PRInt32 totalMessages;
rv = folder->GetTotalMessages(PR_FALSE, &totalMessages); rv = folder->GetTotalMessages(PR_FALSE, &totalMessages);
if(NS_SUCCEEDED(rv)) 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; return rv;
} }
@ -635,7 +648,21 @@ nsMsgFolderDataSource::createUnreadMessagesNode(nsIMsgFolder *folder,
PRInt32 totalUnreadMessages; PRInt32 totalUnreadMessages;
rv = folder->GetNumUnread(PR_FALSE, &totalUnreadMessages); rv = folder->GetNumUnread(PR_FALSE, &totalUnreadMessages);
if(NS_SUCCEEDED(rv)) 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; return NS_OK;
} }
@ -712,6 +739,11 @@ nsresult nsMsgFolderDataSource::DoDeleteFromFolder(nsIMsgFolder *folder, nsISupp
if (cnt > 0) if (cnt > 0)
rv = folder->DeleteMessages(messageArray); rv = folder->DeleteMessages(messageArray);
/* rv = folderArray->Count(&cnt);
if (NS_FAILED(rv)) return rv;
if (cnt > 0)
rv = folder->DeleteSubFolders(folderArray);
*/
return rv; return rv;
} }

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

@ -489,10 +489,10 @@ nsMsgMessageDataSource::createMessageNode(nsIMessage *message,
nsIRDFResource *property, nsIRDFResource *property,
nsIRDFNode **target) nsIRDFNode **target)
{ {
PRBool sort; PRBool sort;
if (peqSort(kNC_Subject, property, &sort)) if (peqCollationSort(kNC_Subject, property, &sort))
return createMessageNameNode(message, sort, target); return createMessageNameNode(message, sort, target);
else if (peqSort(kNC_Sender, property, &sort)) else if (peqCollationSort(kNC_Sender, property, &sort))
return createMessageSenderNode(message, sort, target); return createMessageSenderNode(message, sort, target);
else if (peq(kNC_Date, property)) else if (peq(kNC_Date, property))
return createMessageDateNode(message, target); return createMessageDateNode(message, target);

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

@ -37,47 +37,63 @@ peq(nsIRDFResource* r1, nsIRDFResource* r2)
} }
} }
PRBool static PRBool
peqSort(nsIRDFResource* r1, nsIRDFResource* r2, PRBool *isSort) peqWithParameter(nsIRDFResource *r1, nsIRDFResource *r2, PRBool *isParameter, const char *parameter)
{ {
if(!isSort)
return PR_FALSE;
char *r1Str, *r2Str; char *r1Str, *r2Str;
nsString r1nsStr, r2nsStr, r1nsSortStr; nsString r1nsStr, r2nsStr, r1nsParameterStr;
r1->GetValue(&r1Str); r1->GetValue(&r1Str);
r2->GetValue(&r2Str); r2->GetValue(&r2Str);
r1nsStr = r1Str; r1nsStr = r1Str;
r2nsStr = r2Str; r2nsStr = r2Str;
r1nsSortStr = r1Str; r1nsParameterStr = r1Str;
nsAllocator::Free(r1Str); nsAllocator::Free(r1Str);
nsAllocator::Free(r2Str); nsAllocator::Free(r2Str);
//probably need to not assume this will always come directly after property. //probably need to not assume this will always come directly after property.
r1nsSortStr +="?sort=true"; r1nsParameterStr +=parameter;
if(r1nsStr == r2nsStr) if(r1nsStr == r2nsStr)
{ {
*isSort = PR_FALSE; *isParameter = PR_FALSE;
return PR_TRUE; return PR_TRUE;
} }
else if(r1nsSortStr == r2nsStr) else if(r1nsParameterStr == r2nsStr)
{ {
*isSort = PR_TRUE; *isParameter = PR_TRUE;
return PR_TRUE; return PR_TRUE;
} }
else else
{ {
//In case the resources are equal but the values are different. I'm not sure if this //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. //could happen but it is feasible given interface.
*isSort = PR_FALSE; *isParameter = PR_FALSE;
return(peq(r1, r2)); 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) nsresult createNode(nsString& str, nsIRDFNode **node)
{ {
*node = nsnull; *node = nsnull;

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

@ -65,6 +65,10 @@ peq(nsIRDFResource* r1, nsIRDFResource* r2);
PRBool PRBool
peqSort(nsIRDFResource* r1, nsIRDFResource* r2, PRBool *isSort); 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 //Given an nsString, create an nsIRDFNode
nsresult createNode(nsString& str, nsIRDFNode **node); nsresult createNode(nsString& str, nsIRDFNode **node);