From 511518616efb64bf8932ebbf19fdddb5d8512a8d Mon Sep 17 00:00:00 2001 From: "naving%netscape.com" Date: Thu, 21 Feb 2002 01:37:36 +0000 Subject: [PATCH] 120076 r=bienvenu sr=mscott a=roc+moz. Undo delete for local msgs should also update popstate.dat. also fixing one js error from last checkin. git-svn-id: svn://10.0.0.236/trunk@115129 18797224-902f-48f8-a5cc-f745e15eee43 --- .../resources/content/msgMail3PaneWindow.js | 4 +++ .../resources/content/msgViewNavigation.js | 2 -- .../local/public/nsIMsgLocalMailFolder.idl | 2 ++ .../mailnews/local/src/nsLocalMailFolder.cpp | 12 ++++----- .../mailnews/local/src/nsLocalMailFolder.h | 1 - mozilla/mailnews/local/src/nsLocalUndoTxn.cpp | 25 +++++++++++++++++-- mozilla/mailnews/local/src/nsPop3Protocol.cpp | 6 ++--- 7 files changed, 38 insertions(+), 14 deletions(-) diff --git a/mozilla/mailnews/base/resources/content/msgMail3PaneWindow.js b/mozilla/mailnews/base/resources/content/msgMail3PaneWindow.js index 6524033dc36..7774139668e 100644 --- a/mozilla/mailnews/base/resources/content/msgMail3PaneWindow.js +++ b/mozilla/mailnews/base/resources/content/msgMail3PaneWindow.js @@ -24,6 +24,10 @@ /* This is where functions related to the 3 pane window are kept */ +// from MailNewsTypes.h +const nsMsgViewIndex_None = 0xFFFFFFFF; + + var gFolderOutliner; var gMessagePane; var gMessagePaneFrame; diff --git a/mozilla/mailnews/base/resources/content/msgViewNavigation.js b/mozilla/mailnews/base/resources/content/msgViewNavigation.js index f6303119787..7b27b295912 100644 --- a/mozilla/mailnews/base/resources/content/msgViewNavigation.js +++ b/mozilla/mailnews/base/resources/content/msgViewNavigation.js @@ -232,8 +232,6 @@ function CrossFolderNavigation(type, supportsFolderPane ) return folder; } -// from MailNewsTypes.h -const nsMsgViewIndex_None = 0xFFFFFFFF; function ScrollToMessage(type, wrap, selectMessage) { diff --git a/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl b/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl index 71bbeee8e11..2f0543bda3f 100644 --- a/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl +++ b/mozilla/mailnews/local/public/nsIMsgLocalMailFolder.idl @@ -36,6 +36,7 @@ * ***** END LICENSE BLOCK ***** */ #include "nsISupports.idl" +#include "nsISupportsArray.idl" interface nsIMsgWindow; interface nsIUrlListener; interface nsIMsgDatabase; @@ -57,4 +58,5 @@ interface nsIMsgLocalMailFolder : nsISupports { void copyFolderLocal(in nsIMsgFolder srcFolder, in boolean isMove, in nsIMsgWindow msgWindow, in nsIMsgCopyServiceListener listener ); void doNextSubFolder(in nsIMsgFolder srcFolder, in nsIMsgWindow msgWindow, in nsIMsgCopyServiceListener listener ); attribute boolean checkForNewMessagesAfterParsing; + [noscript] void markMsgsOnPop3Server(in nsISupportsArray messages, in boolean deleteMsgs); }; diff --git a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp index 10093d50f27..dfb9e38c0dd 100644 --- a/mozilla/mailnews/local/src/nsLocalMailFolder.cpp +++ b/mozilla/mailnews/local/src/nsLocalMailFolder.cpp @@ -107,7 +107,7 @@ static NS_DEFINE_CID(kMsgMailSessionCID, NS_MSGMAILSESSION_CID); extern char* ReadPopData(const char *hostname, const char* username, nsIFileSpec* mailDirectory); extern void SavePopData(char *data, nsIFileSpec* maildirectory); -extern void net_pop3_delete_if_in_server(char *data, char *uidl, PRBool *changed); +extern void net_pop3_mark_if_in_server(char *data, char *uidl, PRBool deleteChar, PRBool *changed); extern void KillPopData(char* data); ////////////////////////////////////////////////////////////////////////////// @@ -150,7 +150,6 @@ nsMsgLocalMailFolder::nsMsgLocalMailFolder(void) : mHaveReadNameFromDB(PR_FALSE), mGettingMail(PR_FALSE), mInitialized(PR_FALSE), mCopyState(nsnull), mType(nsnull), mCheckForNewMessagesAfterParsing(PR_FALSE) - { // NS_INIT_REFCNT(); done by superclass } @@ -1606,7 +1605,7 @@ nsMsgLocalMailFolder::DeleteMessages(nsISupportsArray *messages, if(NS_SUCCEEDED(rv)) { nsCOMPtr msgSupport; - DeleteMsgsOnPop3Server(messages); + MarkMsgsOnPop3Server(messages, PR_TRUE); if (NS_FAILED(rv)) return rv; EnableNotifications(allMessageCountNotifications, PR_FALSE); @@ -2878,7 +2877,8 @@ nsresult nsMsgLocalMailFolder::CopyMessageTo(nsISupports *message, // read the message headers and see if we have it, then mark the message for deletion from the server. // The next time we look at mail the message will be deleted from the server. -nsresult nsMsgLocalMailFolder::DeleteMsgsOnPop3Server(nsISupportsArray *messages) +NS_IMETHODIMP +nsMsgLocalMailFolder::MarkMsgsOnPop3Server(nsISupportsArray *messages, PRBool deleteMsgs) { char *uidl; char *header = NULL; @@ -2982,8 +2982,8 @@ nsresult nsMsgLocalMailFolder::DeleteMsgsOnPop3Server(nsISupportsArray *messages *lastChar = '\0'; lastChar --; } - - net_pop3_delete_if_in_server(popData, uidl, &changed); + + net_pop3_mark_if_in_server(popData, uidl, deleteMsgs, &changed); } } } diff --git a/mozilla/mailnews/local/src/nsLocalMailFolder.h b/mozilla/mailnews/local/src/nsLocalMailFolder.h index a9fc321975f..f3ff6f55288 100644 --- a/mozilla/mailnews/local/src/nsLocalMailFolder.h +++ b/mozilla/mailnews/local/src/nsLocalMailFolder.h @@ -217,7 +217,6 @@ protected: nsCOMPtr mMsgStringService; nsresult setSubfolderFlag(PRUnichar *aFolderName, PRUint32 flags); - nsresult DeleteMsgsOnPop3Server(nsISupportsArray *messages); }; #endif // nsMsgLocalMailFolder_h__ diff --git a/mozilla/mailnews/local/src/nsLocalUndoTxn.cpp b/mozilla/mailnews/local/src/nsLocalUndoTxn.cpp index 881815ff366..b5295f9c9cf 100644 --- a/mozilla/mailnews/local/src/nsLocalUndoTxn.cpp +++ b/mozilla/mailnews/local/src/nsLocalUndoTxn.cpp @@ -43,6 +43,7 @@ #include "nsMsgImapCID.h" #include "nsIImapService.h" #include "nsIUrlListener.h" +#include "nsIMsgLocalMailFolder.h" #include "nsIEventQueueService.h" static NS_DEFINE_CID(kMailboxServiceCID, NS_IMAILBOXSERVICE_IID); @@ -255,6 +256,9 @@ nsLocalMoveCopyMsgTxn::UndoTransaction() } else { + nsCOMPtr srcMessages; + NS_NewISupportsArray(getter_AddRefs(srcMessages)); + nsCOMPtr msgSupports; for (i=0; iGetMsgHdrForKey(m_dstKeyArray.GetAt(i), @@ -268,9 +272,16 @@ nsLocalMoveCopyMsgTxn::UndoTransaction() NS_ASSERTION(newHdr, "fatal ... cannot create new msg header\n"); if (NS_SUCCEEDED(rv) && newHdr) - srcDB->UndoDelete(newHdr); + { + srcDB->UndoDelete(newHdr); + msgSupports =do_QueryInterface(newHdr); + srcMessages->AppendElement(msgSupports); + } } } + nsCOMPtr localFolder = do_QueryInterface(srcFolder); + if (localFolder) + localFolder->MarkMsgsOnPop3Server(srcMessages, PR_FALSE /*deleteMsgs*/); } srcDB->SetSummaryValid(PR_TRUE); srcDB->Commit(nsMsgDBCommitType::kLargeCommit); @@ -305,7 +316,10 @@ nsLocalMoveCopyMsgTxn::RedoTransaction() PRUint32 i; nsCOMPtr oldHdr; nsCOMPtr newHdr; - + + nsCOMPtr srcMessages; + NS_NewISupportsArray(getter_AddRefs(srcMessages)); + nsCOMPtr msgSupports; for (i=0; iAppendElement(msgSupports); + rv = dstDB->CopyHdrFromExistingHdr(m_dstKeyArray.GetAt(i), oldHdr, PR_TRUE, getter_AddRefs(newHdr)); @@ -340,6 +357,10 @@ nsLocalMoveCopyMsgTxn::RedoTransaction() } else { + nsCOMPtr localFolder = do_QueryInterface(srcFolder); + if (localFolder) + localFolder->MarkMsgsOnPop3Server(srcMessages, PR_TRUE /*deleteMsgs*/); + rv = srcDB->DeleteMessages(&m_srcKeyArray, nsnull); srcDB->SetSummaryValid(PR_TRUE); srcDB->Commit(nsMsgDBCommitType::kLargeCommit); diff --git a/mozilla/mailnews/local/src/nsPop3Protocol.cpp b/mozilla/mailnews/local/src/nsPop3Protocol.cpp index 656bcc3b9f6..8d04baa78ea 100644 --- a/mozilla/mailnews/local/src/nsPop3Protocol.cpp +++ b/mozilla/mailnews/local/src/nsPop3Protocol.cpp @@ -323,7 +323,7 @@ our state file, mark any messages we have for deletion and then re-save the stat */ extern char* ReadPopData(const char *hostname, const char* username, nsIFileSpec* maildirectory); extern void SavePopData(char *data, nsIFileSpec* maildirectory); -extern void net_pop3_delete_if_in_server(char *data, char *uidl, PRBool *changed); +extern void net_pop3_mark_if_in_server(char *data, char *uidl, PRBool deleteChar, PRBool *changed); extern void KillPopData(char* data); static void net_pop3_free_state(Pop3UidlHost* host); @@ -356,7 +356,7 @@ message is not found, then the message was downloaded completly and already dele from the server. So this only applies to messages kept on the server or too big for download. */ -void net_pop3_delete_if_in_server(char *data, char *uidl, PRBool *changed) +void net_pop3_mark_if_in_server(char *data, char *uidl, PRBool deleteChar, PRBool *changed) { Pop3UidlHost *host = (Pop3UidlHost*) data; @@ -364,7 +364,7 @@ void net_pop3_delete_if_in_server(char *data, char *uidl, PRBool *changed) return; if (PL_HashTableLookup (host->hash, (const void*) uidl)) { - PL_HashTableAdd(host->hash, uidl, (void*) DELETE_CHAR); + PL_HashTableAdd(host->hash, uidl, deleteChar ? (void*) DELETE_CHAR : (void*) KEEP); *changed = PR_TRUE; } }