зеркало из https://github.com/mozilla/pjs.git
undo framework
This commit is contained in:
Родитель
120f39eaea
Коммит
a1a2c1c3a1
|
@ -25,9 +25,11 @@
|
|||
#include "nsFileSpec.h"
|
||||
#include "nsISupportsArray.h"
|
||||
#include "nsIMessage.h"
|
||||
#include "nsITransactionManager.h"
|
||||
%}
|
||||
interface nsISupportsArray;
|
||||
interface nsIMessage;
|
||||
interface nsITransactionManager;
|
||||
|
||||
[scriptable, uuid(85e39ff0-b248-11d2-b7ef-00805f05ffa5)]
|
||||
interface nsIMsgFolder : nsIFolder {
|
||||
|
@ -115,7 +117,7 @@ interface nsIMsgFolder : nsIFolder {
|
|||
|
||||
void GetExpansionArray(in nsISupportsArray expansionArray);
|
||||
|
||||
void DeleteMessages(in nsISupportsArray message);
|
||||
void DeleteMessages(in nsISupportsArray message, in nsITransactionManager txnMgr);
|
||||
|
||||
void AcquireSemaphore (in nsISupports semHolder);
|
||||
void ReleaseSemaphore (in nsISupports semHolder);
|
||||
|
|
|
@ -96,7 +96,7 @@ static nsresult DeleteMessage(nsIURL *aURL, nsIMsgFolder *srcFolder)
|
|||
nsCOMPtr<nsISupportsArray> messageArray;
|
||||
NS_NewISupportsArray(getter_AddRefs(messageArray));
|
||||
messageArray->AppendElement(message);
|
||||
rv = srcFolder->DeleteMessages(messageArray);
|
||||
rv = srcFolder->DeleteMessages(messageArray, nsnull);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
|
|
@ -446,6 +446,12 @@ nsMessenger::DoCommand(nsIRDFCompositeDataSource* db, char *command,
|
|||
rv = rdfService->GetResource(command, getter_AddRefs(commandResource));
|
||||
if(NS_SUCCEEDED(rv))
|
||||
{
|
||||
|
||||
// ** jt - temporary solution for pickybacking the undo manager into
|
||||
// the nsISupportArray
|
||||
if (mTxnMgr)
|
||||
srcArray->InsertElementAt(mTxnMgr, 0);
|
||||
|
||||
rv = db->DoCommand(srcArray, commandResource, argumentArray);
|
||||
}
|
||||
|
||||
|
|
|
@ -442,19 +442,31 @@ nsMsgFolderDataSource::DoCommand(nsISupportsArray/*<nsIRDFResource>*/* aSources,
|
|||
nsISupportsArray/*<nsIRDFResource>*/* aArguments)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
nsCOMPtr<nsITransactionManager> transactionManager;
|
||||
nsCOMPtr<nsISupports> supports;
|
||||
// XXX need to handle batching of command applied to all sources
|
||||
|
||||
PRUint32 cnt;
|
||||
PRUint32 i = 0;
|
||||
|
||||
rv = aSources->Count(&cnt);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
for (PRUint32 i = 0; i < cnt; i++) {
|
||||
nsCOMPtr<nsISupports> supports = getter_AddRefs(aSources->ElementAt(i));
|
||||
|
||||
if (cnt > 1)
|
||||
{
|
||||
supports = getter_AddRefs(aSources->ElementAt(0));
|
||||
transactionManager = do_QueryInterface(supports, &rv);
|
||||
if (NS_SUCCEEDED(rv) && transactionManager)
|
||||
i = 1;
|
||||
}
|
||||
|
||||
for ( ; i < cnt; i++) {
|
||||
supports = getter_AddRefs(aSources->ElementAt(i));
|
||||
nsCOMPtr<nsIMsgFolder> folder = do_QueryInterface(supports, &rv);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
if (peq(aCommand, kNC_Delete))
|
||||
{
|
||||
rv = DoDeleteFromFolder(folder, aArguments);
|
||||
rv = DoDeleteFromFolder(folder, aArguments, transactionManager);
|
||||
}
|
||||
else if(peq(aCommand, kNC_NewFolder))
|
||||
{
|
||||
|
@ -746,7 +758,9 @@ nsMsgFolderDataSource::createFolderMessageNode(nsIMsgFolder *folder,
|
|||
}
|
||||
|
||||
|
||||
nsresult nsMsgFolderDataSource::DoDeleteFromFolder(nsIMsgFolder *folder, nsISupportsArray *arguments)
|
||||
nsresult nsMsgFolderDataSource::DoDeleteFromFolder(
|
||||
nsIMsgFolder *folder, nsISupportsArray *arguments,
|
||||
nsITransactionManager* txnMgr)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
PRUint32 itemCount;
|
||||
|
@ -777,7 +791,7 @@ nsresult nsMsgFolderDataSource::DoDeleteFromFolder(nsIMsgFolder *folder, nsISupp
|
|||
rv = messageArray->Count(&cnt);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
if (cnt > 0)
|
||||
rv = folder->DeleteMessages(messageArray);
|
||||
rv = folder->DeleteMessages(messageArray, txnMgr);
|
||||
|
||||
rv = folderArray->Count(&cnt);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include "nsIFolderListener.h"
|
||||
#include "nsMsgRDFDataSource.h"
|
||||
|
||||
|
||||
#include "nsITransactionManager.h"
|
||||
|
||||
/**
|
||||
* The mail data source.
|
||||
|
@ -143,7 +143,7 @@ protected:
|
|||
nsISupportsArray **arcs);
|
||||
|
||||
nsresult DoDeleteFromFolder(nsIMsgFolder *folder,
|
||||
nsISupportsArray *arguments);
|
||||
nsISupportsArray *arguments, nsITransactionManager *txnMgr);
|
||||
|
||||
nsresult DoNewFolder(nsIMsgFolder *folder,
|
||||
nsISupportsArray *arguments);
|
||||
|
|
|
@ -258,7 +258,8 @@ public:
|
|||
NS_IMETHOD GetHostName(char **hostName);
|
||||
|
||||
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo, nsIMsgDatabase **db) = 0;
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages) = 0;
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages,
|
||||
nsITransactionManager *txnMgr) = 0;
|
||||
NS_IMETHOD GetNewMessages();
|
||||
|
||||
NS_IMETHOD GetCharset(PRUnichar * *aCharset) = 0;
|
||||
|
|
|
@ -839,7 +839,8 @@ nsresult nsImapMailFolder::GetDBFolderInfoAndDB(
|
|||
return openErr;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsImapMailFolder::DeleteMessages(nsISupportsArray *messages)
|
||||
NS_IMETHODIMP nsImapMailFolder::DeleteMessages(nsISupportsArray *messages,
|
||||
nsITransactionManager *txnMgr)
|
||||
{
|
||||
nsresult rv = NS_ERROR_FAILURE;
|
||||
// *** jt - assuming delete is move to the trash folder for now
|
||||
|
|
|
@ -96,7 +96,8 @@ public:
|
|||
|
||||
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo,
|
||||
nsIMsgDatabase **db);
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages);
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages,
|
||||
nsITransactionManager *txnMgr);
|
||||
NS_IMETHOD CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgHdr, nsIMessage
|
||||
**message);
|
||||
NS_IMETHOD GetNewMessages();
|
||||
|
|
|
@ -1044,7 +1044,8 @@ nsMsgLocalMailFolder::FindSubFolder(const char *subFolderName, nsIFolder **aFold
|
|||
return NS_ERROR_NULL_POINTER;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::DeleteMessages(nsISupportsArray *messages)
|
||||
NS_IMETHODIMP nsMsgLocalMailFolder::DeleteMessages(nsISupportsArray *messages,
|
||||
nsITransactionManager *txnMgr)
|
||||
{
|
||||
nsresult rv = GetDatabase();
|
||||
if(NS_SUCCEEDED(rv))
|
||||
|
@ -1058,14 +1059,15 @@ NS_IMETHODIMP nsMsgLocalMailFolder::DeleteMessages(nsISupportsArray *messages)
|
|||
nsCOMPtr<nsIMessage> message(do_QueryInterface(msgSupports));
|
||||
if(message)
|
||||
{
|
||||
DeleteMessage(message);
|
||||
DeleteMessage(message, txnMgr);
|
||||
}
|
||||
}
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsMsgLocalMailFolder::DeleteMessage(nsIMessage *message)
|
||||
nsresult nsMsgLocalMailFolder::DeleteMessage(nsIMessage *message,
|
||||
nsITransactionManager *txnMgr)
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr <nsIMsgDBHdr> msgDBHdr;
|
||||
|
|
|
@ -95,7 +95,8 @@ public:
|
|||
|
||||
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo, nsIMsgDatabase **db);
|
||||
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages);
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages,
|
||||
nsITransactionManager *txnMgr);
|
||||
NS_IMETHOD CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgDBHdr, nsIMessage **message);
|
||||
NS_IMETHOD GetNewMessages();
|
||||
|
||||
|
@ -125,7 +126,7 @@ protected:
|
|||
//Returns the child as well.
|
||||
nsresult AddSubfolder(nsAutoString name, nsIMsgFolder **child);
|
||||
|
||||
nsresult DeleteMessage(nsIMessage *message);
|
||||
nsresult DeleteMessage(nsIMessage *message, nsITransactionManager *txnMgr);
|
||||
virtual const nsIID& GetIncomingServerType() {return nsIPop3IncomingServer::GetIID();}
|
||||
|
||||
protected:
|
||||
|
|
|
@ -1062,7 +1062,8 @@ NS_IMETHODIMP nsMsgNewsFolder::GetPath(nsFileSpec& aPathName)
|
|||
}
|
||||
|
||||
/* this is news, so remember that DeleteMessage is really CANCEL */
|
||||
NS_IMETHODIMP nsMsgNewsFolder::DeleteMessages(nsISupportsArray *messages)
|
||||
NS_IMETHODIMP nsMsgNewsFolder::DeleteMessages(nsISupportsArray *messages,
|
||||
nsITransactionManager *txnMgr)
|
||||
{
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
|
|
|
@ -85,7 +85,8 @@ public:
|
|||
|
||||
virtual nsresult GetDBFolderInfoAndDB(nsIDBFolderInfo **folderInfo, nsIMsgDatabase **db);
|
||||
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages);
|
||||
NS_IMETHOD DeleteMessages(nsISupportsArray *messages,
|
||||
nsITransactionManager *txnMgr);
|
||||
NS_IMETHOD CreateMessageFromMsgDBHdr(nsIMsgDBHdr *msgDBHdr, nsIMessage **message);
|
||||
NS_IMETHOD GetNewMessages();
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче