diff --git a/mozilla/mailnews/base/public/nsIFolder.idl b/mozilla/mailnews/base/public/nsIFolder.idl
index f0247e0a8ad..1389111b1ff 100644
--- a/mozilla/mailnews/base/public/nsIFolder.idl
+++ b/mozilla/mailnews/base/public/nsIFolder.idl
@@ -23,6 +23,8 @@
#include "nsICollection.idl"
#include "nsIFolderListener.idl"
+interface nsISupportsArray;
+
[scriptable, uuid(75621650-0fce-11d3-8b49-006008948010)]
interface nsIFolder : nsICollection {
@@ -66,7 +68,8 @@ interface nsIFolder : nsICollection {
// void NotifyFolderLoaded();
// void NotifyDeleteOrMoveMessagesCompleted(in nsIFolder folder);
-
+ // lists all descendents, not just first level children
+ void ListDescendents(in nsISupportsArray descendents);
void Shutdown(in boolean shutdownChildren);
};
diff --git a/mozilla/mailnews/base/public/nsIMessenger.idl b/mozilla/mailnews/base/public/nsIMessenger.idl
index 1d1e9fc9781..a138e63f003 100644
--- a/mozilla/mailnews/base/public/nsIMessenger.idl
+++ b/mozilla/mailnews/base/public/nsIMessenger.idl
@@ -70,7 +70,8 @@ interface nsIMessenger : nsISupports {
void RenameFolder(in nsIRDFCompositeDataSource db,
in nsIRDFResource folder, in wstring name);
void CompactFolder(in nsIRDFCompositeDataSource db,
- in nsIRDFResource folder);
+ in nsIRDFResource folder,
+ in boolean forAll);
void EmptyTrash(in nsIRDFCompositeDataSource db,
in nsIRDFResource folder);
diff --git a/mozilla/mailnews/base/public/nsIMsgFolder.idl b/mozilla/mailnews/base/public/nsIMsgFolder.idl
index d16a7160e58..f4d3ede8a30 100644
--- a/mozilla/mailnews/base/public/nsIMsgFolder.idl
+++ b/mozilla/mailnews/base/public/nsIMsgFolder.idl
@@ -126,6 +126,8 @@ const nsMsgBiffState nsMsgBiffState_Unknown = 2; // We dunno whether there is ne
*/
readonly attribute boolean canRename;
+ readonly attribute boolean canCompact;
+
/**
* the phantom server folder
*/
@@ -151,6 +153,7 @@ const nsMsgBiffState nsMsgBiffState_Unknown = 2; // We dunno whether there is ne
void createStorageIfMissing(in nsIUrlListener urlListener);
void compact(in nsIUrlListener aListener);
+ void compactAll(in nsIUrlListener aListener);
void emptyTrash(in nsIMsgWindow aMsgWindow, in nsIUrlListener aListener);
/**
@@ -331,6 +334,8 @@ const nsMsgBiffState nsMsgBiffState_Unknown = 2; // We dunno whether there is ne
*/
attribute nsIFileSpec path;
+ readonly attribute string baseMessageURI;
+
const nsMsgDispositionState nsMsgDispositionState_Replied = 0;
const nsMsgDispositionState nsMsgDispositionState_Forwarded = 1;
void addMessageDispositionState(in nsIMessage aMessage, in nsMsgDispositionState aDispositionFlag);
diff --git a/mozilla/mailnews/base/public/nsIMsgFolderCompactor.idl b/mozilla/mailnews/base/public/nsIMsgFolderCompactor.idl
index 8dd92809dc2..3537007e5ba 100644
--- a/mozilla/mailnews/base/public/nsIMsgFolderCompactor.idl
+++ b/mozilla/mailnews/base/public/nsIMsgFolderCompactor.idl
@@ -35,6 +35,7 @@ interface nsIMsgFolderCompactor : nsISupports
{
void Init(in nsIMsgFolder folder, in string baseMsgUri, in nsIMsgDatabase db,
in nsIFileSpec pathSpec);
+ void InitCompactAll(in nsIMsgFolder folder);
// we probably want to add the ability to set an enumerator to determine which
// messages to copy over in the compaction process.
void StartCompacting();
diff --git a/mozilla/mailnews/base/resources/content/folderPane.xul b/mozilla/mailnews/base/resources/content/folderPane.xul
index 2362aad805a..8f0955e9e28 100644
--- a/mozilla/mailnews/base/resources/content/folderPane.xul
+++ b/mozilla/mailnews/base/resources/content/folderPane.xul
@@ -54,6 +54,7 @@
NewMessages="rdf:http://home.netscape.com/NC-rdf#NewMessages"
SubfoldersHaveUnreadMessages="rdf:http://home.netscape.com/NC-rdf#SubfoldersHaveUnreadMessages"
CanRename="rdf:http://home.netscape.com/NC-rdf#CanRename"
+ CanCompact="rdf:http://home.netscape.com/NC-rdf#CanCompact"
CanCreateSubfolders="rdf:http://home.netscape.com/NC-rdf#CanCreateSubfolders"
CanSubscribe="rdf:http://home.netscape.com/NC-rdf#CanSubscribe"
CanFileMessages="rdf:http://home.netscape.com/NC-rdf#CanFileMessages"
@@ -74,6 +75,7 @@
HasUnreadMessages="rdf:http://home.netscape.com/NC-rdf#HasUnreadMessages"
SubfoldersHaveUnreadMessages="rdf:http://home.netscape.com/NC-rdf#SubfoldersHaveUnreadMessages"
CanRename="rdf:http://home.netscape.com/NC-rdf#CanRename"
+ CanCompact="rdf:http://home.netscape.com/NC-rdf#CanCompact"
CanCreateSubfolders="rdf:http://home.netscape.com/NC-rdf#CanCreateSubfolders"
CanSubscribe="rdf:http://home.netscape.com/NC-rdf#CanSubscribe"
CanFileMessages="rdf:http://home.netscape.com/NC-rdf#CanFileMessages"
diff --git a/mozilla/mailnews/base/resources/content/mail3PaneWindowCommands.js b/mozilla/mailnews/base/resources/content/mail3PaneWindowCommands.js
index cae5b9668d9..f20296708b5 100644
--- a/mozilla/mailnews/base/resources/content/mail3PaneWindowCommands.js
+++ b/mozilla/mailnews/base/resources/content/mail3PaneWindowCommands.js
@@ -490,7 +490,7 @@ var DefaultController =
MsgEmptyTrash();
return;
case "cmd_compactFolder":
- MsgCompactFolder();
+ MsgCompactFolder(true);
return;
}
},
diff --git a/mozilla/mailnews/base/resources/content/mailContextMenus.js b/mozilla/mailnews/base/resources/content/mailContextMenus.js
index 0f8727bddc9..f184853b818 100644
--- a/mozilla/mailnews/base/resources/content/mailContextMenus.js
+++ b/mozilla/mailnews/base/resources/content/mailContextMenus.js
@@ -191,6 +191,7 @@ function fillFolderPaneContextMenu()
SetupRenameMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder);
+ SetupCompactMenuItem(targetFolder, numSelected, isServer, serverType);
ShowMenuItem("folderPaneContext-emptyTrash", (numSelected <= 1) && (specialFolder == 'Trash'));
EnableMenuItem("folderPaneContext-emptyTrash", true);
@@ -252,6 +253,18 @@ function SetupRemoveMenuItem(targetFolder, numSelected, isServer, serverType, sp
}
}
+function SetupCompactMenuItem(targetFolder, numSelected)
+{
+ var canCompact = (targetFolder.getAttribute('CanCompact') == "true");
+ ShowMenuItem("folderPaneContext-compact", (numSelected <=1) && canCompact);
+ EnableMenuItem("folderPaneContext-compact", true );
+
+ if(canCompact)
+ {
+ SetMenuItemValue("folderPaneContext-compact", Bundle.GetStringFromName("compactFolder"));
+ }
+}
+
function SetupNewMenuItem(targetFolder, numSelected, isServer, serverType, specialFolder)
{
var canCreateNew = targetFolder.getAttribute('CanCreateSubfolders') == 'true';
diff --git a/mozilla/mailnews/base/resources/content/mailWindowOverlay.js b/mozilla/mailnews/base/resources/content/mailWindowOverlay.js
index e415c61e7c2..d95aa918d48 100644
--- a/mozilla/mailnews/base/resources/content/mailWindowOverlay.js
+++ b/mozilla/mailnews/base/resources/content/mailWindowOverlay.js
@@ -940,7 +940,18 @@ function IsEmptyTrashEnabled()
function IsCompactFolderEnabled()
{
- return IsMailFolderSelected();
+ var folderTree = GetFolderTree();
+ var selectedFolders = folderTree.selectedItems;
+ var numFolders = selectedFolders.length;
+
+ if (numFolders <= 0 )
+ return false;
+
+ var folder = selectedFolders[0];
+ if (!folder)
+ return false;
+
+ return (folder.getAttribute('CanCompact') == "true");
}
var gDeleteButton = null;
diff --git a/mozilla/mailnews/base/resources/content/mailWindowOverlay.xul b/mozilla/mailnews/base/resources/content/mailWindowOverlay.xul
index 4de46bcd2bf..9058c8faaed 100644
--- a/mozilla/mailnews/base/resources/content/mailWindowOverlay.xul
+++ b/mozilla/mailnews/base/resources/content/mailWindowOverlay.xul
@@ -122,7 +122,7 @@ Rights Reserved.
-
+
@@ -387,6 +387,10 @@ Rights Reserved.
value="&folderContextRename.label;"
accesskey="&folderContextRename.accesskey;"
oncommand="MsgRenameFolder();"/>
+ //for one folder only