1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* globals gSummaryFrameManager */ // From messenger.js
/**
* Summarize a set of selected messages. This can either be a single thread or
* multiple threads.
*
* @param aMessageDisplay The MessageDisplayWidget object responsible for
* showing messages.
*/
function summarizeSelection(aMessageDisplay) {
// Figure out if we're looking at one thread or more than one thread. We want
// the view's version of threading, not the database's version, in order to
// thread together cross-folder messages. XXX: This falls apart for group by
// sort; what we really want is a way to specify only the cross-folder view.
let folderDisplay = aMessageDisplay.folderDisplay;
let selectedIndices = folderDisplay.selectedIndices;
let dbView = folderDisplay.view.dbView;
let getThreadId = function (index) {
return dbView.getThreadContainingIndex(index).getRootHdr().messageKey;
};
let firstThreadId = getThreadId(selectedIndices[0]);
let oneThread = true;
for (let i = 1; i < selectedIndices.length; i++) {
if (getThreadId(selectedIndices[i]) != firstThreadId) {
oneThread = false;
break;
}
}
let selectedMessages = folderDisplay.selectedMessages;
if (oneThread) {
summarizeThread(selectedMessages, aMessageDisplay);
} else {
summarizeMultipleSelection(selectedMessages, aMessageDisplay);
}
}
/**
* Given an array of messages which are all in the same thread, summarize them.
*
* @param aSelectedMessages Array of message headers.
* @param aMessageDisplay The MessageDisplayWidget object responsible for
* showing messages.
*/
function summarizeThread(aSelectedMessages, aMessageDisplay) {
const kSummaryURL = "chrome://messenger/content/multimessageview.xhtml";
aMessageDisplay.singleMessageDisplay = false;
gSummaryFrameManager.loadAndCallback(kSummaryURL, function () {
let childWindow = gSummaryFrameManager.iframe.contentWindow;
try {
childWindow.gMessageSummary.summarize(
"thread",
aSelectedMessages,
aMessageDisplay.folderDisplay.view.dbView,
aMessageDisplay.folderDisplay.selectMessages.bind(
aMessageDisplay.folderDisplay
),
aMessageDisplay
);
} catch (e) {
console.error(e);
throw e;
}
});
}
/**
* Given an array of message URIs, cause the message panel to display a summary
* of them.
*
* @param aSelectedMessages Array of message headers.
* @param aMessageDisplay The MessageDisplayWidget object responsible for
* showing messages.
*/
function summarizeMultipleSelection(aSelectedMessages, aMessageDisplay) {
const kSummaryURL = "chrome://messenger/content/multimessageview.xhtml";
aMessageDisplay.singleMessageDisplay = false;
gSummaryFrameManager.loadAndCallback(kSummaryURL, function () {
let childWindow = gSummaryFrameManager.iframe.contentWindow;
try {
childWindow.gMessageSummary.summarize(
"multipleselection",
aSelectedMessages,
aMessageDisplay.folderDisplay.view.dbView,
aMessageDisplay.folderDisplay.selectMessages.bind(
aMessageDisplay.folderDisplay
),
aMessageDisplay
);
} catch (e) {
console.error(e);
throw e;
}
});
}
|