code cleanup for #103412. better string usage in the mail datasources

to prevent unneeeded allocations and copies.  fix OnItemPropertyFlagChanged()
to check the property first to do as little as possible.  r/sr=bienvenu
This commit is contained in:
sspitzer%netscape.com 2001-10-06 05:11:51 +00:00
parent 3e5cd6994a
commit 600b2f6854
4 changed files with 65 additions and 90 deletions

View File

@ -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<nsIMsgFolder> folder(do_QueryInterface(item));
if(!folder)
{
if(!folder) {
nsCOMPtr<nsIMsgDBHdr> msgHdr = do_QueryInterface(item);
if (msgHdr)
rv = msgHdr->GetFolder(getter_AddRefs(folder));
@ -947,20 +948,19 @@ nsMsgFolderDataSource::OnItemPropertyFlagChanged(nsISupports *item,
}
nsCOMPtr<nsIRDFResource> 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<nsIRDFNode> 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)
{

View File

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

View File

@ -360,17 +360,6 @@ nsMsgRDFDataSource::getRDFService()
return mRDFService;
}
nsresult nsMsgRDFDataSource::NotifyPropertyChanged(nsIRDFResource *resource,
nsIRDFResource *propertyResource,
const char *newValue)
{
nsCOMPtr<nsIRDFNode> 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)

View File

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