sorting and threading now remember selection. Removed Test5000 message. Cleaned up

js a bit and moved globals into one function. r =alecf.


git-svn-id: svn://10.0.0.236/trunk@59715 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
putterman%netscape.com
2000-02-04 01:56:38 +00:00
parent 1f4ed0f0e7
commit 1fa499a8a8
6 changed files with 177 additions and 81 deletions

View File

@@ -56,5 +56,7 @@ interface nsIMsgViewNavigationService : nsISupports {
in boolean wrapAround, in boolean isThreaded);
void OpenTreeitemAndDescendants(in nsIDOMNode treeitem);
void EnsureDocumentIsLoaded(in nsIDOMXULDocument document);
};

View File

@@ -24,21 +24,6 @@
*/
var msgComposeService = Components.classes['component://netscape/messengercompose'].getService();
msgComposeService = msgComposeService.QueryInterface(Components.interfaces.nsIMsgComposeService);
var mailSession = Components.classes["component://netscape/messenger/services/session"].getService(Components.interfaces.nsIMsgMailSession);
var accountManager = Components.classes["component://netscape/messenger/account-manager"].getService(Components.interfaces.nsIMsgAccountManager);
var RDF = Components.classes['component://netscape/rdf/rdf-service'].getService();
RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
var prefs = Components.classes['component://netscape/preferences'].getService();
prefs = prefs.QueryInterface(Components.interfaces.nsIPref);
var showPerformance = prefs.GetBoolPref('mail.showMessengerPerformance');
var msgNavigationService = Components.classes['component://netscape/messenger/msgviewnavigationservice'].getService();
msgNavigationService= msgNavigationService.QueryInterface(Components.interfaces.nsIMsgViewNavigationService);
var gBeforeFolderLoadTime;
function OpenURL(url)
@@ -316,15 +301,80 @@ function UpdateStatusMessageCounts(folder)
}
function SaveThreadPaneSelection()
{
var tree = GetThreadTree();
var selectedItems = tree.selectedItems;
var numSelected = selectedItems.length;
var selectionArray = new Array(numSelected);
for(var i = 0; i < numSelected; i++)
{
selectionArray[i] = selectedItems[i].getAttribute("id");
}
return selectionArray;
}
function RestoreThreadPaneSelection(selectionArray)
{
var tree = GetThreadTree();
var numSelected = selectionArray.length;
msgNavigationService.EnsureDocumentIsLoaded(document);
var messageElement;
for(var i = 0 ; i < numSelected; i++)
{
messageElement = document.getElementById(selectionArray[i]);
if(!messageElement && messageView.showThreads)
{
var treeFolder = GetThreadTreeFolder();
var folderURI = treeFolder.getAttribute('ref');
var folderResource = RDF.GetResource(folderURI);
var folder = folderResource.QueryInterface(Components.interfaces.nsIMsgFolder);
var messageResource = RDF.GetResource(selectionArray[i]);
var message = messageResource.QueryInterface(Components.interfaces.nsIMessage);
var topLevelMessage = GetTopLevelMessageForMessage(message, folder);
var topLevelResource = topLevelMessage.QueryInterface(Components.interfaces.nsIRDFResource);
var topLevelURI = topLevelResource.Value;
var topElement = document.getElementById(topLevelURI);
if(topElement)
{
msgNavigationService.OpenTreeitemAndDescendants(topElement);
}
messageElement = document.getElementById(selectionArray[i]);
}
tree.addItemToSelection(messageElement);
if(messageElement && (i==0))
tree.ensureElementIsVisible(messageElement);
}
}
function SortThreadPane(column, sortKey, secondarySortKey)
{
var node = document.getElementById(column);
if(!node)
return false;
return SortColumn(node, sortKey, secondarySortKey);
var selection = SaveThreadPaneSelection();
var beforeSortTime = new Date();
var result = SortColumn(node, sortKey, secondarySortKey);
var afterSortTime = new Date();
var timeToSort = (afterSortTime.getTime() - beforeSortTime.getTime())/1000;
if(showPerformance)
dump("timeToSort is " + timeToSort + "seconds\n");
RestoreThreadPaneSelection(selection);
return result;
}
function SortFolderPane(column, sortKey)
@@ -596,34 +646,6 @@ function ShowThreads(showThreads)
}
}
function FolderTest5000()
{
folderDataSource = folderDataSource.QueryInterface(Components.interfaces.nsIRDFDataSource);
var childProperty = RDF.GetResource("http://home.netscape.com/NC-rdf#MessageChild");
var folderResource = RDF.GetResource("mailbox://scottip@nsmail-2.mcom.com/test5000");
var beforeTime = new Date();
var messageChildren = folderDataSource.GetTargets(folderResource, childProperty, true);
var afterGetTargetsTime = new Date();
var timeToLoad = (afterGetTargetsTime.getTime() - beforeTime.getTime())/1000;
dump("Time to load is " + timeToLoad + " seconds\n");
messageChildren = messageChildren.QueryInterface(Components.interfaces.nsISimpleEnumerator);
while(messageChildren.HasMoreElements())
{
messageChildren.GetNext();
}
var afterTime = new Date();
timeToLoad = (afterTime.getTime() - beforeTime.getTime())/1000;
dump("Time to load is " + timeToLoad + " seconds\n");
}
function GetNextMessageAfterDelete(messages)
{

View File

@@ -599,7 +599,6 @@ Rights Reserved.
<menuseparator/>
<menuitem value="&backCmd.label;" disabled="true" oncommand="MsgGoBack();"/>
<menuitem value="&forwardCmd.label;" disabled="true" oncommand="MsgGoForward();"/>
<menuitem value="5000 message folder test" oncommand="FolderTest5000();"/>
</menupopup>
</menu>
<menu value="&msgMenu.label;">

View File

@@ -35,6 +35,26 @@ var accountManagerDSProgID = datasourceProgIDPrefix + "msgaccountmanager";
var folderDSProgID = datasourceProgIDPrefix + "mailnewsfolders";
var messageDSProgID = datasourceProgIDPrefix + "mailnewsmessages";
var messenger;
var accountManagerDataSource;
var folderDataSource;
var messageDataSource;
var pref;
var statusFeedback;
var messageView;
var msgWindow;
var msgComposeService;
var mailSession;
var accountManager;
var RDF;
var showPerformance;
var msgNavigationService;
var msgComposeType;
var msgComposeFormat;
var Bundle;
var gFolderTree;
var gThreadTree;
var gThreadAndMessagePaneSplitter = null;
@@ -47,29 +67,6 @@ var gCurrentLoadingFolderIsThreaded = false;
var gCurrentLoadingFolderSortID ="";
// get the messenger instance
var messenger = Components.classes[messengerProgID].createInstance();
messenger = messenger.QueryInterface(Components.interfaces.nsIMessenger);
//Create datasources
var accountManagerDataSource = Components.classes[accountManagerDSProgID].createInstance();
var folderDataSource = Components.classes[folderDSProgID].createInstance();
var messageDataSource = Components.classes[messageDSProgID].createInstance();
var pref = Components.classes[prefProgID].getService(Components.interfaces.nsIPref);
//Create windows status feedback
var statusFeedback = Components.classes[statusFeedbackProgID].createInstance();
statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback);
//Create message view object
var messageView = Components.classes[messageViewProgID].createInstance();
messageView = messageView.QueryInterface(Components.interfaces.nsIMessageView);
//Create message window object
var msgWindow = Components.classes[msgWindowProgID].createInstance();
msgWindow = msgWindow.QueryInterface(Components.interfaces.nsIMsgWindow);
// the folderListener object
var folderListener = {
OnItemAdded: function(parentItem, item, view) {},
@@ -138,6 +135,8 @@ var folderListener = {
gCurrentLoadingFolderURI = "";
//Now let's select the first new message if there is one
var beforeScrollToNew = new Date();
msgNavigationService.EnsureDocumentIsLoaded(document);
ScrollToFirstNewMessage();
var afterScrollToNew = new Date();
var timeToScroll = (afterScrollToNew.getTime() - beforeScrollToNew.getTime())/1000;
@@ -160,6 +159,9 @@ var folderListener = {
/* Functions related to startup */
function OnLoadMessenger()
{
var beforeLoadMessenger = new Date();
CreateGlobals();
verifyAccounts();
loadStartPage();
@@ -214,6 +216,15 @@ function OnLoadMessenger()
catch (ex) {
dump("failed to set the view headers menu item\n");
}
var afterLoadMessenger = new Date();
var timeToLoad = (afterLoadMessenger.getTime() - beforeLoadMessenger.getTime())/1000;
if(showPerformance)
{
dump("Time in OnLoadMessger is " + timeToLoad + " seconds\n");
}
}
function OnUnloadMessenger()
@@ -233,6 +244,54 @@ function OnUnloadMessenger()
}
function CreateGlobals()
{
// get the messenger instance
messenger = Components.classes[messengerProgID].createInstance();
messenger = messenger.QueryInterface(Components.interfaces.nsIMessenger);
//Create datasources
accountManagerDataSource = Components.classes[accountManagerDSProgID].createInstance();
folderDataSource = Components.classes[folderDSProgID].createInstance();
messageDataSource = Components.classes[messageDSProgID].createInstance();
pref = Components.classes[prefProgID].getService(Components.interfaces.nsIPref);
//Create windows status feedback
statusFeedback = Components.classes[statusFeedbackProgID].createInstance();
statusFeedback = statusFeedback.QueryInterface(Components.interfaces.nsIMsgStatusFeedback);
//Create message view object
messageView = Components.classes[messageViewProgID].createInstance();
messageView = messageView.QueryInterface(Components.interfaces.nsIMessageView);
//Create message window object
msgWindow = Components.classes[msgWindowProgID].createInstance();
msgWindow = msgWindow.QueryInterface(Components.interfaces.nsIMsgWindow);
msgComposeService = Components.classes['component://netscape/messengercompose'].getService();
msgComposeService = msgComposeService.QueryInterface(Components.interfaces.nsIMsgComposeService);
mailSession = Components.classes["component://netscape/messenger/services/session"].getService(Components.interfaces.nsIMsgMailSession);
accountManager = Components.classes["component://netscape/messenger/account-manager"].getService(Components.interfaces.nsIMsgAccountManager);
RDF = Components.classes['component://netscape/rdf/rdf-service'].getService();
RDF = RDF.QueryInterface(Components.interfaces.nsIRDFService);
showPerformance = pref.GetBoolPref('mail.showMessengerPerformance');
msgNavigationService = Components.classes['component://netscape/messenger/msgviewnavigationservice'].getService();
msgNavigationService= msgNavigationService.QueryInterface(Components.interfaces.nsIMsgViewNavigationService);
msgComposeType = Components.interfaces.nsIMsgCompType;
msgComposeFormat = Components.interfaces.nsIMsgCompFormat;
Bundle = srGetStrBundle("chrome://messenger/locale/messenger.properties");
}
function verifyAccounts() {
try {
var am = Components.classes[accountManagerProgID].getService(Components.interfaces.nsIMsgAccountManager);
@@ -304,6 +363,9 @@ function loadStartFolder()
dump('InboxURI = ' + inboxURI + '\n');
//first, let's see if it's already in the dom. This will make life easier.
//We need to make sure content is built by this time
msgNavigationService.EnsureDocumentIsLoaded(document);
var inbox = document.getElementById(inboxURI);
//if it's not here we will have to make sure it's open.
@@ -318,6 +380,7 @@ function loadStartFolder()
}
catch(ex)
{
dump(ex);
dump('Exception in LoadStartFolder caused by no default account. We know about this\n');
}
@@ -510,13 +573,14 @@ function FindMessenger()
function RefreshThreadTreeView()
{
var selection = SaveThreadPaneSelection();
var currentFolder = GetThreadTreeFolder();
var currentFolderID = currentFolder.getAttribute('ref');
//This will make us lose selection when this happens.
//need to figure out if we have to save off selection or if
//tree widget is responsible for this.
ClearThreadTreeSelection();
currentFolder.setAttribute('ref', currentFolderID);
RestoreThreadPaneSelection(selection);
}
function ClearThreadTreeSelection()

View File

@@ -24,12 +24,6 @@
* and then calls a function/command in commandglue
*/
var msgComposeType = Components.interfaces.nsIMsgCompType;
var msgComposeFormat = Components.interfaces.nsIMsgCompFormat;
var Bundle = srGetStrBundle("chrome://messenger/locale/messenger.properties");
var prefs = Components.classes['component://netscape/preferences'].getService();
prefs = prefs.QueryInterface(Components.interfaces.nsIPref);
// Controller object for folder pane
var FolderPaneController =
@@ -422,7 +416,7 @@ function MsgForwardMessage(event)
dump("\nMsgForwardMessage from XUL\n");
var forwardType = 0;
try {
var forwardType = prefs.GetIntPref("mail.forward_message_mode");
var forwardType = pref.GetIntPref("mail.forward_message_mode");
} catch (e) {dump ("failed to retrieve pref mail.forward_message_mode");}
if (forwardType == 0)
@@ -897,19 +891,19 @@ function MsgViewIgnoreThread() {}
function MsgViewAllHeaders()
{
prefs.SetIntPref("mail.show_headers",2);
pref.SetIntPref("mail.show_headers",2);
MsgReload();
return true;
}
function MsgViewNormalHeaders()
{
prefs.SetIntPref("mail.show_headers",1);
pref.SetIntPref("mail.show_headers",1);
MsgReload();
return true;
}
function MsgViewBriefHeaders()
{
prefs.SetIntPref("mail.show_headers",0);
pref.SetIntPref("mail.show_headers",0);
MsgReload();
return true;
}

View File

@@ -28,6 +28,7 @@
#include "nsIMessage.h"
#include "nsIMsgFolder.h"
#include "nsIMsgThread.h"
#include "nsIDocument.h"
typedef PRBool (*navigationFunction)(nsIDOMXULElement *message, navigationInfoPtr info);
@@ -557,6 +558,20 @@ nsresult nsMsgViewNavigationService::FindNextMessageUnthreaded(navigationInfoPtr
return NS_OK;
}
NS_IMETHODIMP nsMsgViewNavigationService::EnsureDocumentIsLoaded(nsIDOMXULDocument *xulDocument)
{
nsresult rv;
nsCOMPtr<nsIDocument> document = do_QueryInterface(xulDocument);
if(!document)
return NS_ERROR_FAILURE;
rv = document->FlushPendingNotifications();
return rv;
}
//Finds the next message in a threaded view.
nsresult nsMsgViewNavigationService::FindNextMessageInThreads(nsIDOMNode *startMessage, navigationInfoPtr info, nsIDOMNode **nextMessage)
{