зеркало из https://github.com/mozilla/gecko-dev.git
Show "???" when message counts are unknown. Use RDF collation key sorting.
This commit is contained in:
Родитель
b941736a5e
Коммит
1ed1220ae6
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче