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;
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;
}

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

@ -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);

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

@ -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;

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

@ -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);