More work on 17376. reviewed by bienvenu. Store open folder and keep array of msgWindows.

This commit is contained in:
putterman%netscape.com 1999-10-28 23:27:21 +00:00
Родитель fb9c158faa
Коммит c701981fdb
10 изменённых файлов: 76 добавлений и 61 удалений

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

@ -32,6 +32,8 @@
#include "nsIMsgIncomingServer.idl"
#include "nsIMsgAccountManager.idl"
#include "nsIFolderListener.idl"
#include "nsIMsgWindow.idl"
#include "nsISupportsArray.idl"
interface nsIMsgFolderCache;
interface nsIMsgStatusFeedback;
@ -43,7 +45,7 @@ interface nsIMsgMailSession : nsISupports {
readonly attribute nsIMsgIncomingServer currentServer;
readonly attribute nsIMsgAccountManager accountManager;
readonly attribute nsIMsgFolderCache folderCache;
attribute nsIMsgStatusFeedback temporaryMsgStatusFeedback;
void Shutdown();
@ -61,5 +63,9 @@ interface nsIMsgMailSession : nsISupports {
void NotifyFolderItemAdded(in nsIFolder folder, in nsISupports item);
void NotifyFolderItemDeleted(in nsIFolder folder, in nsISupports item);
void NotifyFolderLoaded(in nsIFolder folder);
void AddMsgWindow(in nsIMsgWindow msgWindow);
void RemoveMsgWindow(in nsIMsgWindow msgWindow);
readonly attribute nsISupportsArray msgWindowsArray;
};

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

@ -19,6 +19,7 @@
#include "nsISupports.idl"
#include "nsIMsgStatusFeedback.idl"
#include "nsIMessageView.idl"
#include "nsIMsgFolder.idl"
interface nsITransactionManager;
@ -33,4 +34,5 @@ interface nsIMsgWindow : nsISupports {
attribute nsIMsgStatusFeedback statusFeedback;
attribute nsITransactionManager transactionManager;
attribute nsIMessageView messageView;
attribute nsIMsgFolder openFolder;
};

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

@ -196,6 +196,7 @@ function ChangeFolderByDOMNode(folderNode)
function ChangeFolderByURI(uri)
{
dump('In ChangeFolderByURI\n');
var resource = RDF.GetResource(uri);
var msgfolder =
resource.QueryInterface(Components.interfaces.nsIMsgFolder);
@ -223,16 +224,21 @@ function ChangeFolderByURI(uri)
{
gCurrentLoadingFolderURI = "";
msgfolder.updateFolder();
RerootFolder(uri);
RerootFolder(uri, msgfolder);
}
}
function RerootFolder(uri)
function RerootFolder(uri, newFolder)
{
dump('In reroot folder\n');
var folder = GetThreadTreeFolder();
ClearThreadTreeSelection();
//Set the window's new open folder.
msgWindow.openFolder = newFolder;
folder.setAttribute('ref', uri);
var afterFolderLoadTime = new Date();
var timeToLoad = (afterFolderLoadTime.getTime() - gBeforeFolderLoadTime.getTime())/1000;
if(showPerformance)

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

@ -70,6 +70,7 @@ var folderListener = {
OnFolderLoaded: function (folder)
{
dump('In OnFolderLoader\n');
if(folder)
{
var resource = folder.QueryInterface(Components.interfaces.nsIRDFResource);
@ -81,8 +82,11 @@ var folderListener = {
gCurrentLoadingFolderURI="";
var msgFolder = folder.QueryInterface(Components.interfaces.nsIMsgFolder);
if(msgFolder)
{
msgFolder.endFolderLoading();
RerootFolder(uri);
dump("before reroot in OnFolderLoaded\n");
RerootFolder(uri, msgFolder);
}
}
}
}
@ -104,7 +108,7 @@ function OnLoadMessenger()
loadStartFolder();
getFolderListener();
AddToSession();
goSetDefaultController(DefaultController);
}
@ -117,7 +121,10 @@ function OnUnloadMessenger()
{
mailSession = mailSession.QueryInterface(Components.interfaces.nsIMsgMailSession);
if(mailSession)
{
mailSession.RemoveFolderListener(folderListener);
mailSession.RemoveMsgWindow(msgWindow);
}
}
saveWindowPosition();
@ -208,14 +215,15 @@ function loadStartFolder()
}
function getFolderListener()
function AddToSession()
{
try {
var mailSession = Components.classes[mailSessionProgID].getService(Components.interfaces.nsIMsgMailSession);
mailSession.AddFolderListener(folderListener);
mailSession.AddMsgWindow(msgWindow);
} catch (ex) {
dump("Error adding folder listener\n");
dump("Error adding to session\n");
}
}
@ -223,6 +231,7 @@ function InitMsgWindow()
{
msgWindow.statusFeedback = statusFeedback;
msgWindow.messageView = messageView;
}
function AddDataSources()

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

@ -83,11 +83,6 @@ nsMessageViewDataSource::QueryInterface(REFNSIID iid, void** result)
*result = NS_STATIC_CAST(nsIMessageView*, this);
NS_ADDREF_THIS();
}
else if(iid.Equals(nsCOMTypeInfo<nsIMsgWindow>::GetIID()))
{
*result = NS_STATIC_CAST(nsIMsgWindow*, this);
NS_ADDREF_THIS();
}
if(*result)
{
@ -557,49 +552,6 @@ NS_IMETHODIMP nsMessageViewDataSource::SetShowThreads(PRBool aShowThreads)
return NS_OK;
}
NS_IMETHODIMP nsMessageViewDataSource::GetStatusFeedback(nsIMsgStatusFeedback * *aStatusFeedback)
{
if(!aStatusFeedback)
return NS_ERROR_NULL_POINTER;
*aStatusFeedback = mStatusFeedback;
NS_IF_ADDREF(*aStatusFeedback);
return NS_OK;
}
NS_IMETHODIMP nsMessageViewDataSource::SetStatusFeedback(nsIMsgStatusFeedback * aStatusFeedback)
{
mStatusFeedback = aStatusFeedback;
return NS_OK;
}
NS_IMETHODIMP nsMessageViewDataSource::GetTransactionManager(nsITransactionManager * *aTransactionManager)
{
if(!aTransactionManager)
return NS_ERROR_NULL_POINTER;
*aTransactionManager = mTransactionManager;
NS_IF_ADDREF(*aTransactionManager);
return NS_OK;
}
NS_IMETHODIMP nsMessageViewDataSource::SetTransactionManager(nsITransactionManager * aTransactionManager)
{
mTransactionManager = aTransactionManager;
return NS_OK;
}
NS_IMETHODIMP nsMessageViewDataSource::GetMessageView(nsIMessageView * *aMessageView)
{
return NS_OK;
}
NS_IMETHODIMP nsMessageViewDataSource::SetMessageView(nsIMessageView * aMessageView)
{
return NS_OK;
}
nsresult
nsMessageViewDataSource::createMessageNode(nsIMessage *message,

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

@ -29,13 +29,12 @@
#include "nsIMessage.h"
#include "nsIMsgThread.h"
#include "nsCOMPtr.h"
#include "nsIMsgWindow.h"
/**
* The mail data source.
*/
class nsMessageViewDataSource : public nsIRDFCompositeDataSource, public nsIMessageView,
public nsIRDFObserver, public nsIMsgWindow
public nsIRDFObserver
{
private:
nsCOMPtr<nsISupportsArray> mObservers;
@ -49,7 +48,6 @@ public:
NS_DECL_NSIRDFCOMPOSITEDATASOURCE
NS_DECL_NSIRDFOBSERVER
NS_DECL_NSIMESSAGEVIEW
NS_DECL_NSIMSGWINDOW
nsMessageViewDataSource(void);
virtual ~nsMessageViewDataSource (void);
virtual nsresult Init();
@ -72,8 +70,6 @@ protected:
static nsIRDFResource* kNC_Sender;
static nsIRDFResource* kNC_Status;
nsCOMPtr<nsIMsgStatusFeedback> mStatusFeedback;
nsCOMPtr<nsITransactionManager> mTransactionManager;
};

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

@ -59,7 +59,10 @@ nsMsgMailSession::~nsMsgMailSession()
nsresult nsMsgMailSession::Init()
{
nsresult rv = NS_NewISupportsArray(getter_AddRefs(mListeners));
if(NS_FAILED(rv))
return rv;
rv = NS_NewISupportsArray(getter_AddRefs(mWindows));
return rv;
}
@ -295,4 +298,25 @@ NS_IMETHODIMP nsMsgMailSession::NotifyFolderLoaded(nsIFolder *folder)
}
NS_IMETHODIMP nsMsgMailSession::AddMsgWindow(nsIMsgWindow *msgWindow)
{
mWindows->AppendElement(msgWindow);
return NS_OK;
}
NS_IMETHODIMP nsMsgMailSession::RemoveMsgWindow(nsIMsgWindow *msgWindow)
{
mWindows->RemoveElement(msgWindow);
return NS_OK;
}
NS_IMETHODIMP nsMsgMailSession::GetMsgWindowsArray(nsISupportsArray * *aWindowsArray)
{
if(!aWindowsArray)
return NS_ERROR_NULL_POINTER;
*aWindowsArray = mWindows;
NS_IF_ADDREF(*aWindowsArray);
return NS_OK;
}

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

@ -52,6 +52,7 @@ protected:
nsIMsgAccountManager *m_accountManager;
nsIMsgFolderCache *m_msgFolderCache;
nsCOMPtr<nsISupportsArray> mListeners;
nsCOMPtr<nsISupportsArray> mWindows;
// stick this here temporarily
nsCOMPtr <nsIMsgStatusFeedback> m_temporaryMsgStatusFeedback;

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

@ -85,3 +85,20 @@ NS_IMETHODIMP nsMsgWindow::SetMessageView(nsIMessageView * aMessageView)
mMessageView = aMessageView;
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::GetOpenFolder(nsIMsgFolder * *aOpenFolder)
{
if(!aOpenFolder)
return NS_ERROR_NULL_POINTER;
*aOpenFolder = mOpenFolder;
NS_IF_ADDREF(*aOpenFolder);
return NS_OK;
}
NS_IMETHODIMP nsMsgWindow::SetOpenFolder(nsIMsgFolder * aOpenFolder)
{
mOpenFolder = aOpenFolder;
return NS_OK;
}

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

@ -23,6 +23,8 @@
#include "nsIMsgStatusFeedback.h"
#include "nsITransactionManager.h"
#include "nsIMessageView.h"
#include "nsIMsgFolder.h"
#include "nsCOMPtr.h"
class nsMsgWindow : public nsIMsgWindow {
@ -40,7 +42,7 @@ protected:
nsCOMPtr<nsIMsgStatusFeedback> mStatusFeedback;
nsCOMPtr<nsITransactionManager> mTransactionManager;
nsCOMPtr<nsIMessageView> mMessageView;
nsCOMPtr<nsIMsgFolder> mOpenFolder;
};