зеркало из https://github.com/mozilla/pjs.git
133402 - selected addressbook cards in sidebar do not prefill msg compose - r=sspitzer, sr=bienvenu
This commit is contained in:
Родитель
2030e67911
Коммит
d2e480e3fb
|
@ -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)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче