133402 - selected addressbook cards in sidebar do not prefill msg compose - r=sspitzer, sr=bienvenu

This commit is contained in:
shliang%netscape.com 2002-05-30 01:08:13 +00:00
Родитель 2030e67911
Коммит d2e480e3fb
5 изменённых файлов: 130 добавлений и 6 удалений

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

@ -37,6 +37,7 @@
* ***** END LICENSE BLOCK ***** */
#include "nsISupports.idl"
#include "nsISupportsArray.idl"
interface nsIAbCard;
interface nsIAbDirectory;
@ -68,4 +69,5 @@ interface nsIAbView : nsISupports
nsIAbCard getCardFromRow(in long row);
void selectAll();
void deleteSelectedCards();
readonly attribute nsISupportsArray selectedAddresses;
};

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

@ -498,21 +498,35 @@ function GetSelectedRows()
function GetSelectedAbCards()
{
if (!gAbView)
var abView = gAbView;
// if sidebar is open, and addressbook panel is open and focused,
// then use the ab view from sidebar (gCurFrame is from sidebarOverlay.js)
const abPanelUrl = "chrome://messenger/content/addressbook/addressbook-panel.xul";
if (document.getElementById("sidebar-box")) {
if (gCurFrame &&
gCurFrame.getAttribute("src") == abPanelUrl &&
document.commandDispatcher.focusedWindow == gCurFrame.contentDocument.defaultView)
{
abView = gCurFrame.contentDocument.defaultView.gAbView;
}
}
if (!abView)
return null;
var cards = new Array(gAbView.selection.count);
var cards = new Array(abView.selection.count);
var i,j;
var count = gAbView.selection.getRangeCount();
var count = abView.selection.getRangeCount();
var current = 0;
for (i=0; i < count; i++) {
var start = new Object;
var end = new Object;
gAbView.selection.getRangeAt(i,start,end);
abView.selection.getRangeAt(i,start,end);
for (j=start.value;j<=end.value;j++) {
cards[current] = gAbView.getCardFromRow(j);
cards[current] = abView.getCardFromRow(j);
current++;
}
}

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

@ -42,7 +42,8 @@
onload="AbPanelLoad();"
onunload="AbPanelUnload();"
xmlns:nc="http://home.netscape.com/NC-rdf#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
selectedaddresses="true">
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/addressbook.js"/>
<script type="application/x-javascript" src="chrome://messenger/content/addressbook/abCommon.js"/>

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

@ -48,6 +48,7 @@
#include "nsCollationCID.h"
#include "nsIAddrBookSession.h"
#include "nsAbBaseCID.h"
#include "nsISupportsPrimitives.h"
#include "nsIPrefService.h"
#include "nsIPrefBranch.h"
@ -55,6 +56,8 @@
#include "nsIAddrDatabase.h" // for kPriEmailColumn
#include "rdf.h"
#define CARD_NOT_FOUND -1
#define ALL_ROWS -1
@ -1154,3 +1157,74 @@ nsresult nsAbView::GetSelectedCards(nsISupportsArray **selectedCards)
return NS_OK;
}
NS_IMETHODIMP nsAbView::GetSelectedAddresses(nsISupportsArray **_retval)
{
NS_ENSURE_ARG_POINTER(_retval);
nsCOMPtr<nsISupportsArray> selectedCards;
nsresult rv = GetSelectedCards(getter_AddRefs(selectedCards));
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsISupportsArray> addresses(do_CreateInstance(NS_SUPPORTSARRAY_CONTRACTID));
PRUint32 count;
selectedCards->Count(&count);
for (PRUint32 i = 0; i < count; i++) {
nsCOMPtr<nsISupports> supports;
selectedCards->GetElementAt(i, getter_AddRefs(supports));
nsCOMPtr<nsIAbCard> card = do_QueryInterface(supports, &rv);
NS_ENSURE_SUCCESS(rv, rv);
PRBool isMailList;
card->GetIsMailList(&isMailList);
nsXPIDLString primaryEmail;
if (isMailList) {
nsCOMPtr<nsIRDFService> rdfService = do_GetService(NS_RDF_CONTRACTID "/rdf-service;1", &rv);
NS_ENSURE_SUCCESS(rv, rv);
nsXPIDLCString mailListURI;
card->GetMailListURI(getter_Copies(mailListURI));
nsCOMPtr<nsIRDFResource> resource;
rv = rdfService->GetResource(mailListURI, getter_AddRefs(resource));
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsIAbDirectory> mailList = do_QueryInterface(resource, &rv);
NS_ENSURE_SUCCESS(rv,rv);
nsCOMPtr<nsISupportsArray> mailListAddresses;
rv = mailList->GetAddressLists(getter_AddRefs(mailListAddresses));
NS_ENSURE_SUCCESS(rv,rv);
PRUint32 mailListCount = 0;
mailListAddresses->Count(&mailListCount);
for (PRUint32 j = 0; j < mailListCount; j++) {
nsCOMPtr<nsISupports> item = getter_AddRefs(mailListAddresses->ElementAt(j));
nsCOMPtr<nsIAbCard> mailListCard = do_QueryInterface(item, &rv);
NS_ENSURE_SUCCESS(rv,rv);
rv = mailListCard->GetPrimaryEmail(getter_Copies(primaryEmail));
NS_ENSURE_SUCCESS(rv,rv);
if (!primaryEmail.IsEmpty()) {
nsCOMPtr<nsISupportsString> supportsEmail(do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID));
supportsEmail->SetDataWithLength(primaryEmail.Length(), ToNewCString(primaryEmail));
addresses->AppendElement(supportsEmail);
}
}
}
else {
rv = card->GetPrimaryEmail(getter_Copies(primaryEmail));
NS_ENSURE_SUCCESS(rv,rv);
if (!primaryEmail.IsEmpty()) {
nsCOMPtr<nsISupportsString> supportsEmail(do_CreateInstance(NS_SUPPORTS_STRING_CONTRACTID));
supportsEmail->SetDataWithLength(primaryEmail.Length(), ToNewCString(primaryEmail));
addresses->AppendElement(supportsEmail);
}
}
}
NS_IF_ADDREF(*_retval = addresses);
return NS_OK;
}

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

@ -154,6 +154,13 @@ function ComposeMessage(type, format, folder, messageArray)
if (type == msgComposeType.New) //new message
{
//dump("OpenComposeWindow with " + identity + "\n");
// if the addressbook sidebar panel is open and has focus, get
// the selected addresses from it
if (document.commandDispatcher.focusedWindow.document.documentElement.hasAttribute("selectedaddresses"))
return NewMessageToSelectedAddresses(type, format, identity);
msgComposeService.OpenComposeWindow(null, null, type, format, identity, msgWindow);
return;
}
@ -200,6 +207,32 @@ function ComposeMessage(type, format, folder, messageArray)
dump("### nodeList is invalid\n");
}
function NewMessageToSelectedAddresses(type, format, identity) {
var abSidebarPanel = document.commandDispatcher.focusedWindow;
var abResultsTree = abSidebarPanel.document.getElementById("abResultsTree");
var abResultsBoxObject = abResultsTree.treeBoxObject;
var abView = abResultsBoxObject.view;
abView = abView.QueryInterface(Components.interfaces.nsIAbView);
var addresses = abView.selectedAddresses;
var params = Components.classes["@mozilla.org/messengercompose/composeparams;1"].createInstance(Components.interfaces.nsIMsgComposeParams);
if (params) {
params.type = type;
params.format = format;
params.identity = identity;
var composeFields = Components.classes["@mozilla.org/messengercompose/composefields;1"].createInstance(Components.interfaces.nsIMsgCompFields);
if (composeFields) {
var addressList = "";
for (var i = 0; i < addresses.Count(); i++) {
addressList = addressList + (i > 0 ? ",":"") + addresses.GetElementAt(i).QueryInterface(Components.interfaces.nsISupportsString).data;
}
composeFields.to = addressList;
params.composeFields = composeFields;
msgComposeService.OpenComposeWindowWithParams(null, params);
}
}
}
function CreateNewSubfolder(chromeWindowURL, preselectedMsgFolder,
dualUseFolders, callBackFunctionName)
{