mirror of
https://github.com/ManchildProductions/binoc-central-mirror.git
synced 2026-06-11 13:29:06 +00:00
177 lines
5.9 KiB
JavaScript
177 lines
5.9 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/. */
|
|
|
|
this.EXPORTED_SYMBOLS = ['MailViewManager', 'MailViewConstants'];
|
|
|
|
var Cc = Components.classes;
|
|
var Ci = Components.interfaces;
|
|
var Cr = Components.results;
|
|
var Cu = Components.utils;
|
|
|
|
var nsMsgSearchScope = Ci.nsMsgSearchScope;
|
|
var nsMsgSearchAttrib = Ci.nsMsgSearchAttrib;
|
|
var nsMsgSearchOp = Ci.nsMsgSearchOp;
|
|
|
|
var nsMsgMessageFlags = Ci.nsMsgMessageFlags;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
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).
|
|
*/
|
|
var MailViewManager = {
|
|
_views: {},
|
|
_customMailViews: Cc["@mozilla.org/messenger/mailviewlist;1"]
|
|
.getService(Components.interfaces.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 aViewDef The view definition, three attributes are required:
|
|
* - name: A string name for the view, for debugging purposes only. This
|
|
* should not be localized!
|
|
* - index: The index to assign to the view.
|
|
* - makeTerms: A function to invoke that returns a list of search terms.
|
|
*/
|
|
defineView: function MailViewManager_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: function MailViewManager_wrapCustomView(aCustomViewIndex) {
|
|
let mailView = this._customMailViews.getMailViewAt(aCustomViewIndex);
|
|
return {
|
|
name: mailView.prettyName, // since the user created it it's localized
|
|
index: aCustomViewIndex,
|
|
makeTerms: function(aSession, aData) {
|
|
return mailView.searchTerms;
|
|
}
|
|
};
|
|
},
|
|
|
|
_findCustomViewByName: function MailViewManager_findCustomViewByName(aName) {
|
|
let count = this._customMailViews.mailViewCount;
|
|
for (let i = 0; i < count; i++) {
|
|
let 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 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: function MailViewManager_getMailViewByIndex(aViewIndex) {
|
|
if (typeof(aViewIndex) == "string")
|
|
return this._findCustomViewByName(aViewIndex);
|
|
if (aViewIndex < MailViewConstants.kViewItemFirstCustom)
|
|
return this._views[aViewIndex];
|
|
else
|
|
return this._wrapCustomView(aViewIndex -
|
|
MailViewConstants.kViewItemFirstCustom);
|
|
},
|
|
};
|
|
|
|
MailViewManager.defineView({
|
|
name: "all mail", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemAll,
|
|
makeTerms: function(aSession, aData) {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
MailViewManager.defineView({
|
|
name: "new mail / unread", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemUnread,
|
|
makeTerms: function(aSession, aData) {
|
|
let term = aSession.createTerm();
|
|
let value = term.value;
|
|
|
|
value.status = nsMsgMessageFlags.Read;
|
|
value.attrib = nsMsgSearchAttrib.MsgStatus;
|
|
term.value = value;
|
|
term.attrib = nsMsgSearchAttrib.MsgStatus;
|
|
term.op = nsMsgSearchOp.Isnt;
|
|
term.booleanAnd = true;
|
|
|
|
return [term];
|
|
}
|
|
});
|
|
|
|
MailViewManager.defineView({
|
|
name: "tags", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemTags,
|
|
makeTerms: function(aSession, aKeyword) {
|
|
let term = aSession.createTerm();
|
|
let value = term.value;
|
|
|
|
value.str = aKeyword;
|
|
value.attrib = nsMsgSearchAttrib.Keywords;
|
|
term.value = value;
|
|
term.attrib = nsMsgSearchAttrib.Keywords;
|
|
term.op = nsMsgSearchOp.Contains;
|
|
term.booleanAnd = true;
|
|
|
|
return [term];
|
|
}
|
|
});
|
|
|
|
MailViewManager.defineView({
|
|
name: "not deleted", // debugging assistance only! not localized!
|
|
index: MailViewConstants.kViewItemNotDeleted,
|
|
makeTerms: function(aSession, aKeyword) {
|
|
let term = aSession.createTerm();
|
|
let value = term.value;
|
|
|
|
value.status = nsMsgMessageFlags.IMAPDeleted;
|
|
value.attrib = nsMsgSearchAttrib.MsgStatus;
|
|
term.value = value;
|
|
term.attrib = nsMsgSearchAttrib.MsgStatus;
|
|
term.op = nsMsgSearchOp.Isnt;
|
|
term.booleanAnd = true;
|
|
|
|
return [term];
|
|
}
|
|
});
|