Fixing bug 12165. Adding the ability to get messages for multiple accounts from the GetMsg button and file menu dropdown of messenger application. r=bienvenu sr=sspitzer

This commit is contained in:
racham%netscape.com 2001-02-07 07:37:04 +00:00
parent e058f8087c
commit ba724c809d
15 changed files with 228 additions and 27 deletions

View File

@ -88,6 +88,12 @@ interface nsIMsgProtocolInfo : nsISupports
port value is returned */
long getDefaultServerPort(in boolean isSecure);
/**
* An attribute that tell us whether on not we can
* get messages for the given server type
*/
readonly attribute boolean canGetMessages;
/**
* do biff by default?
*/

View File

@ -58,6 +58,19 @@ function GetMsgFolderFromURI(folderURI)
}
function GetServer(uri)
{
if (!uri) return null;
try {
var folder = GetMsgFolderFromUri(uri);
return folder.server;
}
catch (ex) {
dump("GetServer("+uri+") failed, ex="+ex+"\n");
}
return null;
}
function LoadMessage(messageNode)
{
var uri = messageNode.getAttribute('id');

View File

@ -212,6 +212,7 @@ var DefaultController =
case "cmd_setFolderCharset":
case "cmd_reload":
case "cmd_getNewMessages":
case "cmd_getMsgsForAuthAccounts":
case "cmd_getNextNMessages":
case "cmd_find":
case "cmd_findAgain":
@ -325,7 +326,8 @@ var DefaultController =
case "cmd_renameFolder":
return IsRenameFolderEnabled();
case "cmd_getNewMessages":
return IsGetNewMessagesEnabled();
case "cmd_getMsgsForAuthAccounts":
return IsGetNewMessagesEnabled();
case "cmd_getNextNMessages":
return IsGetNextNMessagesEnabled();
case "cmd_emptyTrash":
@ -349,6 +351,10 @@ var DefaultController =
case "cmd_getNewMessages":
MsgGetMessage();
break;
case "cmd_getMsgsForAuthAccounts":
MsgGetMessage();
MsgGetMessagesForAllAuthenticatedAccounts();
break;
case "cmd_getNextNMessages":
MsgGetNextNMessages();
break;
@ -556,6 +562,7 @@ function CommandUpdate_Mail()
goUpdateCommand('cmd_renameFolder');
goUpdateCommand('cmd_setFolderCharset');
goUpdateCommand('cmd_getNewMessages');
goUpdateCommand('cmd_getMsgsForAuthAccounts');
goUpdateCommand('cmd_getNextNMessages');
goUpdateCommand('cmd_find');
goUpdateCommand('cmd_findAgain');

View File

@ -278,6 +278,49 @@ function MsgGetMessagesForAllServers(defaultServer)
}
}
/**
* Get messages for all those accounts which have the capability
* of getting messages and have session password available i.e.,
* curretnly logged in accounts.
*/
function MsgGetMessagesForAllAuthenticatedAccounts()
{
try
{
var allServers = accountManager.allServers;
for (var i=0;i<allServers.Count();i++)
{
var currentServer = allServers.GetElementAt(i).QueryInterface(Components.interfaces.nsIMsgIncomingServer);
var protocolinfo = Components.classes["@mozilla.org/messenger/protocol/info;1?type=" +
currentServer.type].getService(Components.interfaces.nsIMsgProtocolInfo);
if (protocolinfo.canGetMessages && currentServer.password)
{
// Get new messages now
GetMessagesForInboxOnServer(currentServer);
}
}
}
catch(ex)
{
dump(ex + "\n");
}
}
/**
* Get messages for the account selected from Menu dropdowns.
*/
function MsgGetMessagesForAccount(aEvent)
{
if (!aEvent)
return;
var uri = aEvent.target.id;
var server = GetServer(uri);
GetMessagesForInboxOnServer(server);
aEvent.preventBubble();
}
function MsgGetNextNMessages()
{
var folder = GetFirstSelectedMsgFolder();

View File

@ -41,6 +41,7 @@ Rights Reserved.
<script src="chrome://messenger/content/mailCommands.js"/>
<script src="chrome://messenger/content/mailWindowOverlay.js"/>
<script src="chrome://messenger/content/commandglue.js"/>
<stringbundleset id="stringbundleset"/>
@ -126,7 +127,9 @@ Rights Reserved.
<broadcaster id="cmd_synchronizeOffline" oncommand="goDoCommand('cmd_synchronizeOffline')" disabled="true"/>
<broadcaster id="cmd_downloadFlagged" oncommand="goDoCommand('cmd_downloadFlagged')" disabled="true"/>
<broadcaster id="cmd_downloadSelected" oncommand="goDoCommand('cmd_downloadSelected')" disabled="true"/>
<broadcaster id="cmd_getMsgsForAuthAccounts"
oncommand="goDoCommand('cmd_getMsgsForAuthAccounts'); event.preventBubble()"
disabled="true"/>
</broadcasterset>
<keyset id="keyset">
@ -160,6 +163,10 @@ Rights Reserved.
<key id="key_saveAsFile" key="&saveAsFileCmd.key;" observes="cmd_saveAsFile" modifiers="accel"/>
<key id="key_viewPageSource" key="&pageSourceCmd.key;" observes="cmd_viewPageSource" modifiers="accel"/>
<key id="key_getNewMessages" key="&getNewMsgCmd.key;" observes="cmd_getNewMessages" modifiers="accel"/>
<key id="key_getAllNewMessages"
key="&getAllNewMsgCmd.key;"
observes="cmd_getMsgsForAuthAccounts"
modifiers="accel, shift"/>
<key id="key_find" key="&findCmd.key;" observes="cmd_find" modifiers="accel"/>
<key id="key_findAgain" key="&findAgainCmd.key;" observes="cmd_findAgain" modifiers="accel"/>
@ -663,6 +670,30 @@ Rights Reserved.
accesskey="&getNewMsgCmd.accesskey;"
key="key_getNewMessages"
observes="cmd_getNewMessages"/>
<menu value="&getNewMsgForCmd.label;"
accesskey="&getNewMsgForCmd.accesskey;"
datasources="rdf:msgaccountmanager"
containment="http://home.netscape.com/NC-rdf#child"
ref="msgaccounts:/"
observes="cmd_getNewMessages">
<menupopup>
<menuitem value="&getAllNewMsgCmd.label;"
key="key_getAllNewMessages"
observes="cmd_getMsgsForAuthAccounts"/>
<menuseparator/>
</menupopup>
<template>
<rule nc:CanGetMessages="true">
<menupopup>
<menuitem uri="..."
data="..."
value="rdf:http://home.netscape.com/NC-rdf#Name"
oncommand="MsgGetMessagesForAccount(event)"/>
</menupopup>
</rule>
</template>
<menupopup/>
</menu>
<menuitem id="menu_getnextnmsg" value="&getNextNMsgCmd.label;"
observes="cmd_getNextNMessages"/>
<menuitem value="&sendUnsentCmd.label;"
@ -1027,7 +1058,29 @@ Rights Reserved.
<toolbox id="mailToolbarToolbox">
<toolbar class="toolbar-primary chromeclass-toolbar" id="msgToolbar" persist="collapsed">
<box id="toolbar_button_box">
<button class="button-toolbar-2 top" id="button-getmsg" value="&getMsgButton.label;" tooltip="aTooltip" tooltiptext="&getMsgButton.tooltip;" observes="cmd_getNewMessages"/>
<menubutton class="menubutton-dual toolbar top" id="button-getmsg"
value="&getMsgButton.label;" crop="right" tooltip="aTooltip"
buttontooltiptext="&getMsgButton.tooltip;"
observes="cmd_getNewMessages" datasources="rdf:msgaccountmanager"
containment="http://home.netscape.com/NC-rdf#child"
ref="msgaccounts:/">
<menupopup>
<menuitem value="&getAllNewMsgCmd.label;"
observes="cmd_getMsgsForAuthAccounts"/>
<menuseparator/>
</menupopup>
<template>
<rule nc:CanGetMessages="true">
<menupopup>
<menuitem uri="..."
data="..."
value="rdf:http://home.netscape.com/NC-rdf#Name"
oncommand="MsgGetMessagesForAccount(event);"/>
</menupopup>
</rule>
</template>
<menupopup/>
</menubutton>
<button class="button-toolbar-2 top" id="button-newmsg" value="&newMsgButton.label;" tooltip="aTooltip" tooltiptext="&newMsgButton.tooltip;" oncommand="MsgNewMessage(event)"/>
<toolbarseparator class="toolbarseparator-primary"/>
<button class="button-toolbar-2 top" id="button-reply" value="&replyButton.label;" tooltip="aTooltip" tooltiptext="&replyButton.tooltip;" observes="button_reply" oncommand="MsgReplyMessage(event)"/>

View File

@ -373,6 +373,7 @@ var MessageWindowController =
case "cmd_viewPageSource":
case "cmd_reload":
case "cmd_getNewMessages":
case "cmd_getMsgsForAuthAccounts":
case "cmd_getNextNMessages":
case "cmd_find":
case "cmd_findAgain":
@ -429,6 +430,7 @@ var MessageWindowController =
}
return ( gCurrentMessageUri != null);
case "cmd_getNewMessages":
case "cmd_getMsgsForAuthAccounts":
return IsGetNewMessagesEnabled();
case "cmd_getNextNMessages":
return IsGetNextNMessagesEnabled();
@ -446,6 +448,9 @@ var MessageWindowController =
case "cmd_getNewMessages":
MsgGetMessage();
break;
case "cmd_getMsgsForAuthAccounts":
MsgGetMessagesForAllAuthenticatedAccounts();
break;
case "cmd_getNextNMessages":
MsgGetNextNMessages();
break;
@ -552,6 +557,7 @@ function CommandUpdate_Mail()
goUpdateCommand('cmd_viewPageSource');
goUpdateCommand('cmd_reload');
goUpdateCommand('cmd_getNewMessages');
goUpdateCommand('cmd_getMsgsForAuthAccounts');
goUpdateCommand('cmd_getNextNMessages');
goUpdateCommand('cmd_find');
goUpdateCommand('cmd_findAgain');

View File

@ -711,20 +711,6 @@ function GetSelectedFolder()
}
function GetServer(uri)
{
if (!uri) return null;
try {
var folder = GetMsgFolderFromUri(uri);
return folder.server;
}
catch (ex) {
dump("GetServer("+uri+") failed, ex="+ex+"\n");
}
return null;
}
function FolderPaneOnClick(event)
{
debug("in FolderPaneClick()\n");

View File

@ -46,6 +46,10 @@ Rights Reserved.
<!ENTITY getNewMsgCmd.label "Get New Messages">
<!ENTITY getNewMsgCmd.accesskey "g">
<!ENTITY getNewMsgCmd.key "t">
<!ENTITY getNewMsgForCmd.label "Get New Messages for">
<!ENTITY getNewMsgForCmd.accesskey "f">
<!ENTITY getAllNewMsgCmd.label "Get All New Messages">
<!ENTITY getAllNewMsgCmd.key "t">
<!ENTITY getNextNMsgCmd.label "Get Next 500 News Messages">
<!ENTITY sendUnsentCmd.label "Send Unsent Messages">
<!ENTITY sendUnsentCmd.accesskey "d">

View File

@ -78,6 +78,7 @@ nsIRDFResource* nsMsgAccountManagerDataSource::kNC_FolderTreeNameSort=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_PageTag=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_IsDefaultServer=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_SupportsFilters=nsnull;
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_CanGetMessages=nsnull;
// containment
nsIRDFResource* nsMsgAccountManagerDataSource::kNC_Child=nsnull;
@ -115,6 +116,7 @@ nsCOMPtr<nsISupportsArray> nsMsgAccountManagerDataSource::mAccountRootArcsOut;
#define NC_RDF_SETTINGS NC_NAMESPACE_URI "Settings"
#define NC_RDF_ISDEFAULTSERVER NC_NAMESPACE_URI "IsDefaultServer"
#define NC_RDF_SUPPORTSFILTERS NC_NAMESPACE_URI "SupportsFilters"
#define NC_RDF_CANGETMESSAGES NC_NAMESPACE_URI "CanGetMessages"
nsMsgAccountManagerDataSource::nsMsgAccountManagerDataSource()
{
@ -132,6 +134,7 @@ nsMsgAccountManagerDataSource::nsMsgAccountManagerDataSource()
getRDFService()->GetResource(NC_RDF_PAGETAG, &kNC_PageTag);
getRDFService()->GetResource(NC_RDF_ISDEFAULTSERVER, &kNC_IsDefaultServer);
getRDFService()->GetResource(NC_RDF_SUPPORTSFILTERS, &kNC_SupportsFilters);
getRDFService()->GetResource(NC_RDF_CANGETMESSAGES, &kNC_CanGetMessages);
getRDFService()->GetResource(NC_RDF_ACCOUNT, &kNC_Account);
getRDFService()->GetResource(NC_RDF_SERVER, &kNC_Server);
getRDFService()->GetResource(NC_RDF_IDENTITY, &kNC_Identity);
@ -170,6 +173,7 @@ nsMsgAccountManagerDataSource::~nsMsgAccountManagerDataSource()
NS_IF_RELEASE(kNC_PageTag);
NS_IF_RELEASE(kNC_IsDefaultServer);
NS_IF_RELEASE(kNC_SupportsFilters);
NS_IF_RELEASE(kNC_CanGetMessages);
NS_IF_RELEASE(kNC_Account);
NS_IF_RELEASE(kNC_Server);
NS_IF_RELEASE(kNC_Identity);
@ -289,15 +293,15 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
else if (property == kNC_PageTag) {
// do NOT localize these strings. these are the urls of the XUL files
if (source == kNC_PageTitleServer)
str.AssignWithConversion("am-server.xul");
str = NS_LITERAL_STRING("am-server.xul");
else if (source == kNC_PageTitleCopies)
str.AssignWithConversion("am-copies.xul");
str = NS_LITERAL_STRING("am-copies.xul");
else if (source == kNC_PageTitleAdvanced)
str.AssignWithConversion("am-advanced.xul");
str = NS_LITERAL_STRING("am-advanced.xul");
else if (source == kNC_PageTitleSMTP)
str.AssignWithConversion("am-smtp.xul");
str = NS_LITERAL_STRING("am-smtp.xul");
else {
str.AssignWithConversion("am-main.xul");
str = NS_LITERAL_STRING("am-main.xul");
/* if this is a server, with no identities, then we show a special panel */
nsCOMPtr<nsIMsgIncomingServer> server;
@ -306,7 +310,7 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
PRBool hasIdentities;
rv = serverHasIdentities(server, &hasIdentities);
if (NS_SUCCEEDED(rv) && !hasIdentities) {
str.AssignWithConversion("am-serverwithnoidentities.xul");
str = NS_LITERAL_STRING("am-serverwithnoidentities.xul");
}
}
}
@ -367,7 +371,7 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
folder->GetIsServer(&isServer);
// no need to localize this!
if (isServer)
str.AssignWithConversion("ServerSettings");
str = NS_LITERAL_STRING("ServerSettings");
}
else if (property == kNC_IsDefaultServer) {
@ -376,7 +380,7 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
if (NS_FAILED(rv) || !thisServer) return NS_RDF_NO_VALUE;
if (isDefaultServer(thisServer))
str.AssignWithConversion("true");
str = NS_LITERAL_STRING("true");
}
else if (property == kNC_SupportsFilters) {
@ -385,7 +389,15 @@ nsMsgAccountManagerDataSource::GetTarget(nsIRDFResource *source,
if (NS_FAILED(rv) || !server) return NS_RDF_NO_VALUE;
if (supportsFilters(server))
str.AssignWithConversion("true");
str = NS_LITERAL_STRING("true");
}
else if (property == kNC_CanGetMessages) {
nsCOMPtr<nsIMsgIncomingServer> server;
rv = getServerForFolderNode(source, getter_AddRefs(server));
if (NS_FAILED(rv) || !server) return NS_RDF_NO_VALUE;
if (canGetMessages(server))
str = NS_LITERAL_STRING("true");
}
if (!str.IsEmpty())
rv = createNode(str, target, getRDFService());
@ -664,7 +676,7 @@ nsMsgAccountManagerDataSource::HasAssertion(nsIRDFResource *aSource,
// answer if it's a server.. any failure falls through to the default case
//
// short-circuit on property, so objects like filters, etc, don't get queried
else if (aProperty == kNC_IsDefaultServer ||
else if (aProperty == kNC_IsDefaultServer || aProperty == kNC_CanGetMessages ||
aProperty == kNC_SupportsFilters) {
nsCOMPtr<nsIMsgIncomingServer> server;
rv = getServerForFolderNode(aSource, getter_AddRefs(server));
@ -701,6 +713,11 @@ nsMsgAccountManagerDataSource::HasAssertionServer(nsIMsgIncomingServer *aServer,
*_retval = supportsFilters(aServer);
} else
*_retval = !supportsFilters(aServer);
} else if (aProperty == kNC_CanGetMessages) {
if (aTarget == kTrueLiteral) {
*_retval = canGetMessages(aServer);
} else
*_retval = !canGetMessages(aServer);
} else {
*_retval = PR_FALSE;
}
@ -750,6 +767,29 @@ nsMsgAccountManagerDataSource::supportsFilters(nsIMsgIncomingServer *aServer)
return PR_FALSE;
}
PRBool
nsMsgAccountManagerDataSource::canGetMessages(nsIMsgIncomingServer *aServer)
{
nsresult rv;
nsXPIDLCString type;
rv = aServer->GetType(getter_Copies(type));
NS_ENSURE_SUCCESS(rv, PR_FALSE);
nsCAutoString contractid(NS_MSGPROTOCOLINFO_CONTRACTID_PREFIX);
contractid.Append(type);
nsCOMPtr<nsIMsgProtocolInfo> protocolInfo =
do_GetService(contractid, &rv);
NS_ENSURE_SUCCESS(rv, PR_FALSE);
PRBool canGetMessages = PR_FALSE;
protocolInfo->GetCanGetMessages(&canGetMessages);
return canGetMessages;
}
nsresult
nsMsgAccountManagerDataSource::HasAssertionAccountRoot(nsIRDFResource *aProperty,
nsIRDFNode *aTarget,

View File

@ -32,6 +32,7 @@
#include "nsMsgRDFDataSource.h"
#include "nsIMsgAccountManager.h"
#include "nsIIncomingServerListener.h"
#include "nsIMsgProtocolInfo.h"
#include "nsWeakPtr.h"
/* {3f989ca4-f77a-11d2-969d-006008948010} */
@ -89,6 +90,7 @@ protected:
PRBool isDefaultServer(nsIMsgIncomingServer *aServer);
PRBool supportsFilters(nsIMsgIncomingServer *aServer);
PRBool canGetMessages(nsIMsgIncomingServer *aServer);
static PRBool isContainment(nsIRDFResource *aProperty);
nsresult getServerForFolderNode(nsIRDFNode *aResource,
@ -108,6 +110,7 @@ protected:
static nsIRDFResource* kNC_PageTag;
static nsIRDFResource* kNC_IsDefaultServer;
static nsIRDFResource* kNC_SupportsFilters;
static nsIRDFResource* kNC_CanGetMessages;
static nsIRDFResource* kNC_Child;
static nsIRDFResource* kNC_AccountRoot;

View File

@ -3075,6 +3075,14 @@ nsImapService::GetCanDuplicate(PRBool *aCanDuplicate)
return NS_OK;
}
NS_IMETHODIMP
nsImapService::GetCanGetMessages(PRBool *aCanGetMessages)
{
NS_ENSURE_ARG_POINTER(aCanGetMessages);
*aCanGetMessages = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
nsImapService::GetDefaultCopiesAndFoldersPrefsToServer(PRBool *aDefaultCopiesAndFoldersPrefsToServer)
{

View File

@ -597,6 +597,14 @@ nsMovemailService::GetCanDelete(PRBool *aCanDelete)
return NS_OK;
}
NS_IMETHODIMP
nsMoveMailService::GetCanGetMessages(PRBool *aCanGetMessages)
{
NS_ENSURE_ARG_POINTER(aCanGetMessages);
*aCanGetMessages = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
nsMovemailService::GetCanDuplicate(PRBool *aCanDuplicate)
{

View File

@ -163,6 +163,14 @@ nsNoneService::GetCanDuplicate(PRBool *aCanDuplicate)
return NS_OK;
}
NS_IMETHODIMP
nsNoneService::GetCanGetMessages(PRBool *aCanGetMessages)
{
NS_ENSURE_ARG_POINTER(aCanGetMessages);
*aCanGetMessages = PR_FALSE;
return NS_OK;
}
NS_IMETHODIMP
nsNoneService::GetDefaultCopiesAndFoldersPrefsToServer(PRBool *aDefaultCopiesAndFoldersPrefsToServer)
{

View File

@ -537,6 +537,14 @@ nsPop3Service::GetCanDuplicate(PRBool *aCanDuplicate)
return NS_OK;
}
NS_IMETHODIMP
nsPop3Service::GetCanGetMessages(PRBool *aCanGetMessages)
{
NS_ENSURE_ARG_POINTER(aCanGetMessages);
*aCanGetMessages = PR_TRUE;
return NS_OK;
}
NS_IMETHODIMP
nsPop3Service::GetDefaultServerPort(PRBool isSecure, PRInt32 *aPort)
{

View File

@ -1450,6 +1450,14 @@ nsNntpService::GetCanDuplicate(PRBool *aCanDuplicate)
return NS_OK;
}
NS_IMETHODIMP
nsNntpService::GetCanGetMessages(PRBool *aCanGetMessages)
{
NS_ENSURE_ARG_POINTER(aCanGetMessages);
*aCanGetMessages = PR_FALSE;
return NS_OK;
}
NS_IMETHODIMP
nsNntpService::GetDefaultCopiesAndFoldersPrefsToServer(PRBool *aDefaultCopiesAndFoldersPrefsToServer)
{