mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 05:45:37 +00:00
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:
parent
3e5cd6994a
commit
600b2f6854
@ -918,9 +918,9 @@ nsMsgFolderDataSource::OnItemBoolPropertyChanged(nsISupports *item,
|
|||||||
else if (kSynchronizeAtom == property) {
|
else if (kSynchronizeAtom == property) {
|
||||||
NotifyPropertyChanged(resource, kNC_Synchronize, literalNode);
|
NotifyPropertyChanged(resource, kNC_Synchronize, literalNode);
|
||||||
}
|
}
|
||||||
else if (kOpenAtom == property) {
|
else if (kOpenAtom == property) {
|
||||||
NotifyPropertyChanged(resource, kNC_Open, literalNode);
|
NotifyPropertyChanged(resource, kNC_Open, literalNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
@ -931,14 +931,15 @@ nsMsgFolderDataSource::OnItemPropertyFlagChanged(nsISupports *item,
|
|||||||
nsIAtom *property,
|
nsIAtom *property,
|
||||||
PRUint32 oldFlag,
|
PRUint32 oldFlag,
|
||||||
PRUint32 newFlag)
|
PRUint32 newFlag)
|
||||||
{
|
{
|
||||||
nsresult rv;
|
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)
|
if (kBiffStateAtom == property) {
|
||||||
//so check for both of these here!!
|
// 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));
|
nsCOMPtr<nsIMsgFolder> folder(do_QueryInterface(item));
|
||||||
if(!folder)
|
if(!folder) {
|
||||||
{
|
|
||||||
nsCOMPtr<nsIMsgDBHdr> msgHdr = do_QueryInterface(item);
|
nsCOMPtr<nsIMsgDBHdr> msgHdr = do_QueryInterface(item);
|
||||||
if (msgHdr)
|
if (msgHdr)
|
||||||
rv = msgHdr->GetFolder(getter_AddRefs(folder));
|
rv = msgHdr->GetFolder(getter_AddRefs(folder));
|
||||||
@ -947,20 +948,19 @@ nsMsgFolderDataSource::OnItemPropertyFlagChanged(nsISupports *item,
|
|||||||
}
|
}
|
||||||
|
|
||||||
nsCOMPtr<nsIRDFResource> resource(do_QueryInterface(folder));
|
nsCOMPtr<nsIRDFResource> resource(do_QueryInterface(folder));
|
||||||
if(resource)
|
if(resource) {
|
||||||
{
|
// be careful about skipping if oldFlag == newFlag
|
||||||
if (kBiffStateAtom == property)
|
// see the comment in nsMsgFolder::SetBiffState() about filters
|
||||||
{
|
|
||||||
nsCAutoString newBiffStateStr;
|
nsCOMPtr<nsIRDFNode> biffNode;
|
||||||
rv = GetBiffStateString(newFlag, newBiffStateStr);
|
rv = createBiffStateNodeFromFlag(newFlag, getter_AddRefs(biffNode));
|
||||||
if(NS_FAILED(rv))
|
NS_ENSURE_SUCCESS(rv,rv);
|
||||||
return rv;
|
|
||||||
NotifyPropertyChanged(resource, kNC_BiffState, newBiffStateStr);
|
NotifyPropertyChanged(resource, kNC_BiffState, biffNode);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMETHODIMP
|
NS_IMETHODIMP
|
||||||
@ -1019,7 +1019,7 @@ nsresult nsMsgFolderDataSource::createFolderNode(nsIMsgFolder* folder,
|
|||||||
else if ((kNC_Charset == property))
|
else if ((kNC_Charset == property))
|
||||||
rv = createCharsetNode(folder, target);
|
rv = createCharsetNode(folder, target);
|
||||||
else if ((kNC_BiffState == property))
|
else if ((kNC_BiffState == property))
|
||||||
rv = createBiffStateNode(folder, target);
|
rv = createBiffStateNodeFromFolder(folder, target);
|
||||||
else if ((kNC_HasUnreadMessages == property))
|
else if ((kNC_HasUnreadMessages == property))
|
||||||
rv = createHasUnreadMessagesNode(folder, target);
|
rv = createHasUnreadMessagesNode(folder, target);
|
||||||
else if ((kNC_NewMessages == property))
|
else if ((kNC_NewMessages == property))
|
||||||
@ -1049,9 +1049,22 @@ nsMsgFolderDataSource::createFolderNameNode(nsIMsgFolder *folder,
|
|||||||
if (NS_FAILED(rv)) return rv;
|
if (NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
if (sort) {
|
if (sort) {
|
||||||
nsAutoString nameString(name);
|
// to create the sort string, we get the sort order
|
||||||
CreateNameSortString(folder, nameString);
|
// append the name, and make the whole thing lower case
|
||||||
createNode(nameString, target, getRDFService());
|
// 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 {
|
else {
|
||||||
createNode(name.get(), target, getRDFService());
|
createNode(name.get(), target, getRDFService());
|
||||||
@ -1089,22 +1102,6 @@ nsresult nsMsgFolderDataSource::createFolderTreeSimpleNameNode(nsIMsgFolder * fo
|
|||||||
return NS_OK;
|
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)
|
nsresult nsMsgFolderDataSource::CreateUnreadMessagesNameString(PRInt32 unreadMessages, nsAutoString &nameString)
|
||||||
{
|
{
|
||||||
//Only do this if unread messages are positive
|
//Only do this if unread messages are positive
|
||||||
@ -1504,31 +1501,36 @@ nsMsgFolderDataSource::createCharsetNode(nsIMsgFolder *folder, nsIRDFNode **targ
|
|||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsMsgFolderDataSource::createBiffStateNode(nsIMsgFolder *folder, nsIRDFNode **target)
|
nsMsgFolderDataSource::createBiffStateNodeFromFolder(nsIMsgFolder *folder, nsIRDFNode **target)
|
||||||
{
|
{
|
||||||
nsresult rv;
|
nsresult rv;
|
||||||
PRUint32 biffState;
|
PRUint32 biffState;
|
||||||
rv = folder->GetBiffState(&biffState);
|
rv = folder->GetBiffState(&biffState);
|
||||||
if(NS_FAILED(rv)) return rv;
|
if(NS_FAILED(rv)) return rv;
|
||||||
|
|
||||||
nsCAutoString biffString;
|
rv = createBiffStateNodeFromFlag(biffState, target);
|
||||||
GetBiffStateString(biffState, biffString);
|
NS_ENSURE_SUCCESS(rv,rv);
|
||||||
nsAutoString uniStr;uniStr.AssignWithConversion(biffString);
|
|
||||||
createNode(uniStr, target, getRDFService());
|
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
nsMsgFolderDataSource::GetBiffStateString(PRUint32 biffState, nsCAutoString& biffStateStr)
|
nsMsgFolderDataSource::createBiffStateNodeFromFlag(PRUint32 flag, nsIRDFNode **target)
|
||||||
{
|
{
|
||||||
if(biffState == nsIMsgFolder::nsMsgBiffState_NewMail)
|
const PRUnichar *biffStateStr;
|
||||||
biffStateStr = "NewMail";
|
|
||||||
else if(biffState == nsIMsgFolder::nsMsgBiffState_NoMail)
|
|
||||||
biffStateStr = "NoMail";
|
|
||||||
else
|
|
||||||
biffStateStr = "UnknownMail";
|
|
||||||
|
|
||||||
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
|
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
|
nsresult
|
||||||
nsMsgFolderDataSource::OnTotalMessagePropertyChanged(nsIMsgFolder *folder, PRInt32 oldValue, PRInt32 newValue)
|
nsMsgFolderDataSource::OnTotalMessagePropertyChanged(nsIMsgFolder *folder, PRInt32 oldValue, PRInt32 newValue)
|
||||||
{
|
{
|
||||||
|
@ -156,7 +156,8 @@ protected:
|
|||||||
nsresult createTotalMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
nsresult createTotalMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||||
nsresult createUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
nsresult createUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||||
nsresult createCharsetNode(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 createHasUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||||
nsresult createNewMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
nsresult createNewMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||||
nsresult createSubfoldersHaveUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
nsresult createSubfoldersHaveUnreadMessagesNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||||
@ -165,7 +166,7 @@ protected:
|
|||||||
nsresult createFolderSynchronizeNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
nsresult createFolderSynchronizeNode(nsIMsgFolder *folder, nsIRDFNode **target);
|
||||||
nsresult createFolderSyncDisabledNode(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);
|
nsresult getFolderArcLabelsOut(nsISupportsArray **arcs);
|
||||||
|
|
||||||
@ -188,9 +189,7 @@ protected:
|
|||||||
PRBool tv, PRBool *hasAssertion);
|
PRBool tv, PRBool *hasAssertion);
|
||||||
|
|
||||||
nsresult GetBiffStateString(PRUint32 biffState, nsCAutoString & biffStateStr);
|
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 CreateUnreadMessagesNameString(PRInt32 unreadMessages, nsAutoString &nameString);
|
||||||
nsresult CreateArcsOutEnumerator();
|
nsresult CreateArcsOutEnumerator();
|
||||||
|
|
||||||
|
@ -360,17 +360,6 @@ nsMsgRDFDataSource::getRDFService()
|
|||||||
return mRDFService;
|
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,
|
nsresult nsMsgRDFDataSource::NotifyPropertyChanged(nsIRDFResource *resource,
|
||||||
nsIRDFResource *propertyResource,
|
nsIRDFResource *propertyResource,
|
||||||
nsIRDFNode *newNode)
|
nsIRDFNode *newNode)
|
||||||
|
@ -76,9 +76,7 @@ class nsMsgRDFDataSource : public nsIRDFDataSource,
|
|||||||
static PRBool changeEnumFunc(nsISupports *aElement, void *aData);
|
static PRBool changeEnumFunc(nsISupports *aElement, void *aData);
|
||||||
nsresult NotifyObservers(nsIRDFResource *subject, nsIRDFResource *property,
|
nsresult NotifyObservers(nsIRDFResource *subject, nsIRDFResource *property,
|
||||||
nsIRDFNode *object, PRBool assert, PRBool change);
|
nsIRDFNode *object, PRBool assert, PRBool change);
|
||||||
nsresult NotifyPropertyChanged(nsIRDFResource *resource,
|
|
||||||
nsIRDFResource *propertyResource,
|
|
||||||
const char *newValue);
|
|
||||||
nsresult NotifyPropertyChanged(nsIRDFResource *resource,
|
nsresult NotifyPropertyChanged(nsIRDFResource *resource,
|
||||||
nsIRDFResource *propertyResource,
|
nsIRDFResource *propertyResource,
|
||||||
nsIRDFNode *newNode);
|
nsIRDFNode *newNode);
|
||||||
|
Loading…
Reference in New Issue
Block a user