diff --git a/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp b/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp index d1e565993a4..cd7b3a65e4e 100644 --- a/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp +++ b/mozilla/mailnews/base/src/nsMsgFolderDataSource.cpp @@ -918,9 +918,9 @@ nsMsgFolderDataSource::OnItemBoolPropertyChanged(nsISupports *item, else if (kSynchronizeAtom == property) { NotifyPropertyChanged(resource, kNC_Synchronize, literalNode); } - else if (kOpenAtom == property) { + else if (kOpenAtom == property) { NotifyPropertyChanged(resource, kNC_Open, literalNode); - } + } } return rv; @@ -931,14 +931,15 @@ nsMsgFolderDataSource::OnItemPropertyFlagChanged(nsISupports *item, nsIAtom *property, PRUint32 oldFlag, PRUint32 newFlag) - { - nsresult rv; - //Suresh: for Incoming biff(to turn it on) the item is of type nsIFolder (see nsMsgFolder::SetBiffState) - //For clearing the biff the item is of type nsIMsgDBHdr (see nsMsgDBFolder::OnKeyChange) - //so check for both of these here!! +{ + nsresult rv; + + if (kBiffStateAtom == property) { + // for Incoming biff (to turn it on) the item is of type nsIFolder (see nsMsgFolder::SetBiffState) + // for clearing the biff the item is of type nsIMsgDBHdr (see nsMsgDBFolder::OnKeyChange) + // so check for both of these here nsCOMPtr folder(do_QueryInterface(item)); - if(!folder) - { + if(!folder) { nsCOMPtr msgHdr = do_QueryInterface(item); if (msgHdr) rv = msgHdr->GetFolder(getter_AddRefs(folder)); @@ -947,20 +948,19 @@ nsMsgFolderDataSource::OnItemPropertyFlagChanged(nsISupports *item, } nsCOMPtr resource(do_QueryInterface(folder)); - if(resource) - { - if (kBiffStateAtom == property) - { - nsCAutoString newBiffStateStr; - rv = GetBiffStateString(newFlag, newBiffStateStr); - if(NS_FAILED(rv)) - return rv; - NotifyPropertyChanged(resource, kNC_BiffState, newBiffStateStr); - } + if(resource) { + // be careful about skipping if oldFlag == newFlag + // see the comment in nsMsgFolder::SetBiffState() about filters + + nsCOMPtr biffNode; + rv = createBiffStateNodeFromFlag(newFlag, getter_AddRefs(biffNode)); + NS_ENSURE_SUCCESS(rv,rv); + + NotifyPropertyChanged(resource, kNC_BiffState, biffNode); } + } - return NS_OK; - + return NS_OK; } NS_IMETHODIMP @@ -1019,7 +1019,7 @@ nsresult nsMsgFolderDataSource::createFolderNode(nsIMsgFolder* folder, else if ((kNC_Charset == property)) rv = createCharsetNode(folder, target); else if ((kNC_BiffState == property)) - rv = createBiffStateNode(folder, target); + rv = createBiffStateNodeFromFolder(folder, target); else if ((kNC_HasUnreadMessages == property)) rv = createHasUnreadMessagesNode(folder, target); else if ((kNC_NewMessages == property)) @@ -1049,9 +1049,22 @@ nsMsgFolderDataSource::createFolderNameNode(nsIMsgFolder *folder, if (NS_FAILED(rv)) return rv; if (sort) { - nsAutoString nameString(name); - CreateNameSortString(folder, nameString); - createNode(nameString, target, getRDFService()); + // to create the sort string, we get the sort order + // append the name, and make the whole thing lower case + // because we want AAA to be next to aaa. + PRInt32 order; + rv = folder->GetSortOrder(&order); + NS_ENSURE_SUCCESS(rv,rv); + + nsAutoString orderString; + orderString.AppendInt(order); + + orderString.Append(name.get()); + + // make sort insensitive to case + orderString.ToLowerCase(); + + createNode(orderString.get(), target, getRDFService()); } else { createNode(name.get(), target, getRDFService()); @@ -1089,22 +1102,6 @@ nsresult nsMsgFolderDataSource::createFolderTreeSimpleNameNode(nsIMsgFolder * fo return NS_OK; } -nsresult nsMsgFolderDataSource::CreateNameSortString(nsIMsgFolder *folder, nsAutoString &name) -{ - PRInt32 order; - nsresult rv = folder->GetSortOrder(&order); - NS_ENSURE_SUCCESS(rv,rv); - - nsAutoString orderString; - orderString.AppendInt(order); - - // sort is insensitive to case - name.ToLowerCase(); - name.Insert(orderString, 0); - - return NS_OK; -} - nsresult nsMsgFolderDataSource::CreateUnreadMessagesNameString(PRInt32 unreadMessages, nsAutoString &nameString) { //Only do this if unread messages are positive @@ -1504,31 +1501,36 @@ nsMsgFolderDataSource::createCharsetNode(nsIMsgFolder *folder, nsIRDFNode **targ } nsresult -nsMsgFolderDataSource::createBiffStateNode(nsIMsgFolder *folder, nsIRDFNode **target) +nsMsgFolderDataSource::createBiffStateNodeFromFolder(nsIMsgFolder *folder, nsIRDFNode **target) { - nsresult rv; - PRUint32 biffState; - rv = folder->GetBiffState(&biffState); - if(NS_FAILED(rv)) return rv; + nsresult rv; + PRUint32 biffState; + rv = folder->GetBiffState(&biffState); + if(NS_FAILED(rv)) return rv; - nsCAutoString biffString; - GetBiffStateString(biffState, biffString); - nsAutoString uniStr;uniStr.AssignWithConversion(biffString); - createNode(uniStr, target, getRDFService()); - return NS_OK; + rv = createBiffStateNodeFromFlag(biffState, target); + NS_ENSURE_SUCCESS(rv,rv); } nsresult -nsMsgFolderDataSource::GetBiffStateString(PRUint32 biffState, nsCAutoString& biffStateStr) +nsMsgFolderDataSource::createBiffStateNodeFromFlag(PRUint32 flag, nsIRDFNode **target) { - if(biffState == nsIMsgFolder::nsMsgBiffState_NewMail) - biffStateStr = "NewMail"; - else if(biffState == nsIMsgFolder::nsMsgBiffState_NoMail) - biffStateStr = "NoMail"; - else - biffStateStr = "UnknownMail"; + const PRUnichar *biffStateStr; - return NS_OK; + switch (flag) { + case nsIMsgFolder::nsMsgBiffState_NewMail: + biffStateStr = NS_LITERAL_STRING("NewMail").get(); + break; + case nsIMsgFolder::nsMsgBiffState_NoMail: + biffStateStr = NS_LITERAL_STRING("NoMail").get(); + break; + default: + biffStateStr = NS_LITERAL_STRING("UnknownMail").get(); + break; + } + + createNode(biffStateStr, target, getRDFService()); + return NS_OK; } nsresult @@ -1726,19 +1728,6 @@ nsMsgFolderDataSource::OnUnreadMessagePropertyChanged(nsIMsgFolder *folder, PRIn **/ -nsresult -nsMsgFolderDataSource::GetNewMessagesString(PRBool newMessages, nsCAutoString& newMessagesStr) -{ - if(newMessages) - newMessagesStr = "true"; - else - newMessagesStr = "false"; - - - - return NS_OK; -} - nsresult nsMsgFolderDataSource::OnTotalMessagePropertyChanged(nsIMsgFolder *folder, PRInt32 oldValue, PRInt32 newValue) { diff --git a/mozilla/mailnews/base/src/nsMsgFolderDataSource.h b/mozilla/mailnews/base/src/nsMsgFolderDataSource.h index 61990bb9745..1247110256f 100644 --- a/mozilla/mailnews/base/src/nsMsgFolderDataSource.h +++ b/mozilla/mailnews/base/src/nsMsgFolderDataSource.h @@ -156,7 +156,8 @@ protected: nsresult createTotalMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target); nsresult createUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target); nsresult createCharsetNode(nsIMsgFolder *folder, nsIRDFNode **target); - nsresult createBiffStateNode(nsIMsgFolder *folder, nsIRDFNode **target); + nsresult createBiffStateNodeFromFolder(nsIMsgFolder *folder, nsIRDFNode **target); + nsresult createBiffStateNodeFromFlag(PRUint32 flag, nsIRDFNode **target); nsresult createHasUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target); nsresult createNewMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target); nsresult createSubfoldersHaveUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target); @@ -165,7 +166,7 @@ protected: nsresult createFolderSynchronizeNode(nsIMsgFolder *folder, nsIRDFNode **target); nsresult createFolderSyncDisabledNode(nsIMsgFolder *folder, nsIRDFNode **target); - nsresult createFolderChildNode(nsIMsgFolder *folder, nsIRDFNode **target); + nsresult createFolderChildNode(nsIMsgFolder *folder, nsIRDFNode **target); nsresult getFolderArcLabelsOut(nsISupportsArray **arcs); @@ -188,9 +189,7 @@ protected: PRBool tv, PRBool *hasAssertion); nsresult GetBiffStateString(PRUint32 biffState, nsCAutoString & biffStateStr); - nsresult GetNewMessagesString(PRBool newMessages, nsCAutoString & newMessagesStr); - nsresult CreateNameSortString(nsIMsgFolder *folder, nsAutoString &name); nsresult CreateUnreadMessagesNameString(PRInt32 unreadMessages, nsAutoString &nameString); nsresult CreateArcsOutEnumerator(); diff --git a/mozilla/mailnews/base/src/nsMsgRDFDataSource.cpp b/mozilla/mailnews/base/src/nsMsgRDFDataSource.cpp index d6f73b8ce79..85cd6131545 100644 --- a/mozilla/mailnews/base/src/nsMsgRDFDataSource.cpp +++ b/mozilla/mailnews/base/src/nsMsgRDFDataSource.cpp @@ -360,17 +360,6 @@ nsMsgRDFDataSource::getRDFService() return mRDFService; } -nsresult nsMsgRDFDataSource::NotifyPropertyChanged(nsIRDFResource *resource, - nsIRDFResource *propertyResource, - const char *newValue) -{ - nsCOMPtr newValueNode; - nsAutoString newValueStr; newValueStr.AssignWithConversion(newValue); - createNode(newValueStr, getter_AddRefs(newValueNode), getRDFService()); - NotifyPropertyChanged(resource, propertyResource, newValueNode); - return NS_OK; -} - nsresult nsMsgRDFDataSource::NotifyPropertyChanged(nsIRDFResource *resource, nsIRDFResource *propertyResource, nsIRDFNode *newNode) diff --git a/mozilla/mailnews/base/src/nsMsgRDFDataSource.h b/mozilla/mailnews/base/src/nsMsgRDFDataSource.h index 59d1e49f3fa..86987a9b96b 100644 --- a/mozilla/mailnews/base/src/nsMsgRDFDataSource.h +++ b/mozilla/mailnews/base/src/nsMsgRDFDataSource.h @@ -76,9 +76,7 @@ class nsMsgRDFDataSource : public nsIRDFDataSource, static PRBool changeEnumFunc(nsISupports *aElement, void *aData); nsresult NotifyObservers(nsIRDFResource *subject, nsIRDFResource *property, nsIRDFNode *object, PRBool assert, PRBool change); - nsresult NotifyPropertyChanged(nsIRDFResource *resource, - nsIRDFResource *propertyResource, - const char *newValue); + nsresult NotifyPropertyChanged(nsIRDFResource *resource, nsIRDFResource *propertyResource, nsIRDFNode *newNode);