169 строки
5.4 KiB
JavaScript
169 строки
5.4 KiB
JavaScript
/* 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/. */
|
|
|
|
/**
|
|
* Put the MailViewConstants in an object so we can export them to
|
|
* msgViewPickerOverlay in one blob without contaminating everyone's address
|
|
* space who might want to import us.
|
|
*/
|
|
export var MailViewConstants = {
|
|
// tag views have kViewTagMarker + their key as value
|
|
kViewItemAll: 0,
|
|
kViewItemUnread: 1,
|
|
kViewItemTags: 2, // former labels used values 2-6
|
|
kViewItemNotDeleted: 3,
|
|
// not a real view! a sentinel value to pop up a dialog
|
|
kViewItemVirtual: 7,
|
|
// not a real view! a sentinel value to pop up a dialog
|
|
kViewItemCustomize: 8,
|
|
kViewItemFirstCustom: 9,
|
|
|
|
kViewCurrent: "current-view",
|
|
kViewCurrentTag: "current-view-tag",
|
|
kViewTagMarker: ":",
|
|
};
|
|
|
|
/**
|
|
* MailViews are view 'filters' implemented using search terms. DBViewWrapper
|
|
* uses the SearchSpec class to combine the search terms of the mailview with
|
|
* those of the virtual folder (if applicable) and the quicksearch (if
|
|
* applicable).
|
|
*/
|
|
export var MailViewManager = {
|
|
_views: {},
|
|
_customMailViews: Cc["@mozilla.org/messenger/mailviewlist;1"].getService(
|
|
Ci.nsIMsgMailViewList
|
|
),
|
|
|
|
/**
|
|
* Define one of the built-in mail-views. If you want to define your own
|
|
* view, you need to define a custom view using nsIMsgMailViewList.
|
|
*
|
|
* We define our own little view definition abstraction because some day this
|
|
* functionality may want to be generalized to be usable by gloda as well.
|
|
*
|
|
* @param {object} aViewDef - The view definition.
|
|
* @param {string} aViewDef.name - Name for the view, for debugging
|
|
* purposes only. This should not be localized!
|
|
* @param {integer} aViewDef.index - The index to assign to the view.
|
|
* @param {Function} aViewDef.makeTerms - A function to invoke that returns
|
|
* a list of search terms.
|
|
*/
|
|
defineView(aViewDef) {
|
|
this._views[aViewDef.index] = aViewDef;
|
|
},
|
|
|
|
/**
|
|
* Wrap a custom view into our cute little view abstraction. We do not cache
|
|
* these because views should not change often enough for it to matter from
|
|
* a performance perspective, but they will change enough to make stale
|
|
* caches a potential issue.
|
|
*/
|
|
_wrapCustomView(aCustomViewIndex) {
|
|
const mailView = this._customMailViews.getMailViewAt(aCustomViewIndex);
|
|
return {
|
|
name: mailView.prettyName, // since the user created it it's localized
|
|
index: aCustomViewIndex,
|
|
makeTerms() {
|
|
return mailView.searchTerms;
|
|
},
|
|
};
|
|
},
|
|
|
|
_findCustomViewByName(aName) {
|
|
const count = this._customMailViews.mailViewCount;
|
|
for (let i = 0; i < count; i++) {
|
|
const mailView = this._customMailViews.getMailViewAt(i);
|
|
if (mailView.mailViewName == aName) {
|
|
return this._wrapCustomView(i);
|
|
}
|
|
}
|
|
throw new Error("No custom view with name: " + aName);
|
|
},
|
|
|
|
/**
|
|
* Return the view definition associated with the given view index.
|
|
*
|
|
* @param {integer|string} aViewIndex - If the value is an integer it
|
|
* references the built-in view with the view index from MailViewConstants,
|
|
* or if the index is >= MailViewConstants.kViewItemFirstCustom, it is a
|
|
* reference to a custom view definition. If the value is a string, it is
|
|
* the name of a custom view.
|
|
* The string case is mainly intended for testing purposes.
|
|
*/
|
|
getMailViewByIndex(aViewIndex) {
|
|
if (typeof aViewIndex == "string") {
|
|
return this._findCustomViewByName(aViewIndex);
|
|
}
|
|
if (aViewIndex < MailViewConstants.kViewItemFirstCustom) {
|
|
return this._views[aViewIndex];
|
|
}
|
|
return this._wrapCustomView(
|
|
aViewIndex - MailViewConstants.kViewItemFirstCustom
|
|
);
|
|
},
|
|
};
|
|
|
|
MailViewManager.defineView({
|
|
name: "all mail", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemAll,
|
|
makeTerms() {
|
|
return null;
|
|
},
|
|
});
|
|
|
|
MailViewManager.defineView({
|
|
name: "new mail / unread", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemUnread,
|
|
makeTerms(aSession) {
|
|
const term = aSession.createTerm();
|
|
const value = term.value;
|
|
|
|
value.status = Ci.nsMsgMessageFlags.Read;
|
|
value.attrib = Ci.nsMsgSearchAttrib.MsgStatus;
|
|
term.value = value;
|
|
term.attrib = Ci.nsMsgSearchAttrib.MsgStatus;
|
|
term.op = Ci.nsMsgSearchOp.Isnt;
|
|
term.booleanAnd = true;
|
|
|
|
return [term];
|
|
},
|
|
});
|
|
|
|
MailViewManager.defineView({
|
|
name: "tags", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemTags,
|
|
makeTerms(aSession, aKeyword) {
|
|
const term = aSession.createTerm();
|
|
const value = term.value;
|
|
|
|
value.str = aKeyword;
|
|
value.attrib = Ci.nsMsgSearchAttrib.Keywords;
|
|
term.value = value;
|
|
term.attrib = Ci.nsMsgSearchAttrib.Keywords;
|
|
term.op = Ci.nsMsgSearchOp.Contains;
|
|
term.booleanAnd = true;
|
|
|
|
return [term];
|
|
},
|
|
});
|
|
|
|
MailViewManager.defineView({
|
|
name: "not deleted", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemNotDeleted,
|
|
makeTerms(aSession) {
|
|
const term = aSession.createTerm();
|
|
const value = term.value;
|
|
|
|
value.status = Ci.nsMsgMessageFlags.IMAPDeleted;
|
|
value.attrib = Ci.nsMsgSearchAttrib.MsgStatus;
|
|
term.value = value;
|
|
term.attrib = Ci.nsMsgSearchAttrib.MsgStatus;
|
|
term.op = Ci.nsMsgSearchOp.Isnt;
|
|
term.booleanAnd = true;
|
|
|
|
return [term];
|
|
},
|
|
});
|