зеркало из 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;
|
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);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче