This commit is contained in:
jefft%netscape.com 1999-06-10 14:55:36 +00:00
Родитель 120f39eaea
Коммит a1a2c1c3a1
12 изменённых файлов: 50 добавлений и 20 удалений

Просмотреть файл

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