diff --git a/mailnews/base/public/nsIMessenger.idl b/mailnews/base/public/nsIMessenger.idl index bf95b1497a8c..b1b402dbd9a4 100644 --- a/mailnews/base/public/nsIMessenger.idl +++ b/mailnews/base/public/nsIMessenger.idl @@ -55,6 +55,7 @@ interface nsIMessenger : nsISupports { in boolean markRead); void MarkMessageRead(in nsIRDFCompositeDataSource database, in nsIDOMXULElement message, in boolean markRead); + void MarkAllMessagesRead(in nsIRDFCompositeDataSource database, in nsIDOMXULElement folder); void NewFolder(in nsIRDFCompositeDataSource database, in nsIDOMXULElement parentFolderElement, in string name); void Undo(); diff --git a/mailnews/base/resources/content/messenger.xul b/mailnews/base/resources/content/messenger.xul index 0d8294da1973..d6b0784fae1d 100644 --- a/mailnews/base/resources/content/messenger.xul +++ b/mailnews/base/resources/content/messenger.xul @@ -218,7 +218,7 @@ Rights Reserved. - + diff --git a/mailnews/base/resources/content/widgetglue.js b/mailnews/base/resources/content/widgetglue.js index 1cda9041e851..3b9f61c6a573 100644 --- a/mailnews/base/resources/content/widgetglue.js +++ b/mailnews/base/resources/content/widgetglue.js @@ -357,7 +357,20 @@ function MsgMarkMsgAsRead(markRead) function MsgMarkThreadAsRead() {} function MsgMarkByDate() {} -function MsgMarkAllRead() {} +function MsgMarkAllRead() +{ + var folderTree = GetFolderTree();; + var selectedFolderList = folderTree.getElementsByAttribute("selected", "true"); + if(selectedFolderList.length > 0) + { + var selectedFolder = selectedFolderList[0]; + messenger.MarkAllMessagesRead(folderTree.database, selectedFolder); + } + else { + dump("Nothing was selected\n"); + } +} + function MsgMarkAsFlagged() {} function MsgIgnoreThread() {} function MsgWatchThread() {} diff --git a/mailnews/base/src/nsMessenger.cpp b/mailnews/base/src/nsMessenger.cpp index e1a405c09945..c04bc95e1cdb 100644 --- a/mailnews/base/src/nsMessenger.cpp +++ b/mailnews/base/src/nsMessenger.cpp @@ -115,6 +115,7 @@ public: NS_IMETHOD ViewAllThreadMessages(nsIRDFCompositeDataSource *database); NS_IMETHOD MarkMessagesRead(nsIRDFCompositeDataSource *database, nsIDOMNodeList *messages, PRBool markRead); NS_IMETHOD MarkMessageRead(nsIRDFCompositeDataSource *database, nsIDOMXULElement *message, PRBool markRead); + NS_IMETHOD MarkAllMessagesRead(nsIRDFCompositeDataSource *database, nsIDOMXULElement *folder); NS_IMETHOD NewFolder(nsIRDFCompositeDataSource *database, nsIDOMXULElement *parentFolderElement, const char *name); @@ -868,6 +869,30 @@ nsMessenger::DoMarkMessagesRead(nsIRDFCompositeDataSource *database, nsISupports } +NS_IMETHODIMP +nsMessenger::MarkAllMessagesRead(nsIRDFCompositeDataSource *database, nsIDOMXULElement *folder) +{ + nsresult rv; + nsCOMPtr folderResource; + nsCOMPtr folderArray; + + if(!folder || !database) + return NS_ERROR_NULL_POINTER; + + rv = folder->GetResource(getter_AddRefs(folderResource)); + if(NS_FAILED(rv)) + return rv; + + if(NS_FAILED(NS_NewISupportsArray(getter_AddRefs(folderArray)))) + return NS_ERROR_OUT_OF_MEMORY; + + folderArray->AppendElement(folderResource); + + DoCommand(database, NC_RDF_MARKALLMESSAGESREAD, folderArray, nsnull); + + return rv; +} + NS_IMETHODIMP nsMessenger::NewFolder(nsIRDFCompositeDataSource *database, nsIDOMXULElement *parentFolderElement, const char *name) diff --git a/mailnews/base/src/nsMsgFolderDataSource.cpp b/mailnews/base/src/nsMsgFolderDataSource.cpp index 1cc5fa8fff14..36559d729020 100644 --- a/mailnews/base/src/nsMsgFolderDataSource.cpp +++ b/mailnews/base/src/nsMsgFolderDataSource.cpp @@ -58,6 +58,7 @@ nsIRDFResource* nsMsgFolderDataSource::kNC_NewFolder= nsnull; nsIRDFResource* nsMsgFolderDataSource::kNC_GetNewMessages= nsnull; nsIRDFResource* nsMsgFolderDataSource::kNC_Copy= nsnull; nsIRDFResource* nsMsgFolderDataSource::kNC_Move= nsnull; +nsIRDFResource* nsMsgFolderDataSource::kNC_MarkAllMessagesRead= nsnull; @@ -93,6 +94,7 @@ nsMsgFolderDataSource::~nsMsgFolderDataSource (void) NS_RELEASE2(kNC_GetNewMessages, refcnt); NS_RELEASE2(kNC_Copy, refcnt); NS_RELEASE2(kNC_Move, refcnt); + NS_RELEASE2(kNC_MarkAllMessagesRead, refcnt); nsServiceManager::ReleaseService(kRDFServiceCID, mRDFService); // XXX probably need shutdown listener here mRDFService = nsnull; @@ -132,6 +134,7 @@ nsresult nsMsgFolderDataSource::Init() mRDFService->GetResource(NC_RDF_GETNEWMESSAGES, &kNC_GetNewMessages); mRDFService->GetResource(NC_RDF_COPY, &kNC_Copy); mRDFService->GetResource(NC_RDF_MOVE, &kNC_Move); + mRDFService->GetResource(NC_RDF_MARKALLMESSAGESREAD, &kNC_MarkAllMessagesRead); } mInitialized = PR_TRUE; return NS_OK; @@ -430,6 +433,7 @@ nsMsgFolderDataSource::GetAllCommands(nsIRDFResource* source, cmds->AppendElement(kNC_GetNewMessages); cmds->AppendElement(kNC_Copy); cmds->AppendElement(kNC_Move); + cmds->AppendElement(kNC_MarkAllMessagesRead); } if (cmds != nsnull) @@ -466,7 +470,8 @@ nsMsgFolderDataSource::IsCommandEnabled(nsISupportsArray/**/* aS (aCommand == kNC_NewFolder) || (aCommand == kNC_Copy) || (aCommand == kNC_Move) || - (aCommand == kNC_GetNewMessages))) { + (aCommand == kNC_GetNewMessages) || + (aCommand == kNC_MarkAllMessagesRead))) { *aResult = PR_FALSE; return NS_OK; } @@ -527,6 +532,10 @@ nsMsgFolderDataSource::DoCommand(nsISupportsArray/**/* aSources, { rv = DoCopyToFolder(folder, aArguments, transactionManager, PR_TRUE); } + else if((aCommand == kNC_MarkAllMessagesRead)) + { + rv = folder->MarkAllMessagesRead(); + } } } diff --git a/mailnews/base/src/nsMsgFolderDataSource.h b/mailnews/base/src/nsMsgFolderDataSource.h index 6926fc7e11f1..e7300576c2f9 100644 --- a/mailnews/base/src/nsMsgFolderDataSource.h +++ b/mailnews/base/src/nsMsgFolderDataSource.h @@ -175,6 +175,7 @@ protected: static nsIRDFResource* kNC_GetNewMessages; static nsIRDFResource* kNC_Copy; static nsIRDFResource* kNC_Move; + static nsIRDFResource* kNC_MarkAllMessagesRead; }; diff --git a/mailnews/base/src/nsMsgRDFUtils.h b/mailnews/base/src/nsMsgRDFUtils.h index 996508b205c0..baa33d66b72c 100644 --- a/mailnews/base/src/nsMsgRDFUtils.h +++ b/mailnews/base/src/nsMsgRDFUtils.h @@ -54,6 +54,7 @@ typedef struct _nsMsgRDFNotification { #define NC_RDF_GETNEWMESSAGES "http://home.netscape.com/NC-rdf#GetNewMessages" #define NC_RDF_COPY "http://home.netscape.com/NC-rdf#Copy" #define NC_RDF_MOVE "http://home.netscape.com/NC-rdf#Move" +#define NC_RDF_MARKALLMESSAGESREAD "http://home.netscape.com/NC-rdf#MarkAllMessagesRead" //Message Commands #define NC_RDF_MARKREAD "http://home.netscape.com/NC-rdf#MarkRead" diff --git a/mailnews/base/util/nsMsgDBFolder.cpp b/mailnews/base/util/nsMsgDBFolder.cpp index f3617df99e1f..08ace5cff03d 100644 --- a/mailnews/base/util/nsMsgDBFolder.cpp +++ b/mailnews/base/util/nsMsgDBFolder.cpp @@ -434,3 +434,12 @@ NS_IMETHODIMP nsMsgDBFolder::WriteToFolderCacheElem(nsIMsgFolderCacheElement *el return rv; } +NS_IMETHODIMP +nsMsgDBFolder::MarkAllMessagesRead(void) +{ + nsresult rv = GetDatabase(); + + if(NS_SUCCEEDED(rv)) + return mDatabase->MarkAllRead(nsnull); + +} \ No newline at end of file diff --git a/mailnews/base/util/nsMsgDBFolder.h b/mailnews/base/util/nsMsgDBFolder.h index 0a773c27fffa..17de32405a0a 100644 --- a/mailnews/base/util/nsMsgDBFolder.h +++ b/mailnews/base/util/nsMsgDBFolder.h @@ -62,6 +62,8 @@ public: NS_IMETHOD WriteToFolderCache(nsIMsgFolderCache *folderCache); NS_IMETHOD WriteToFolderCacheElem(nsIMsgFolderCacheElement *element); + NS_IMETHOD MarkAllMessagesRead(void); + protected: virtual nsresult ReadDBFolderInfo(PRBool force); virtual nsresult GetDatabase() = 0;