📄 filterlistdialog.js
字号:
if (!filter) return; var filterList = currentFilterList(); if (!filterList) return; if (gPromptService) { if (!gPromptService.confirm(window, null, gFilterBundle.getString("deleteFilterConfirmation"))) return; } filterList.removeFilter(filter); refresh();}function onUp(event){ moveCurrentFilter(nsMsgFilterMotion.up);}function onDown(event){ moveCurrentFilter(nsMsgFilterMotion.down);}function viewLog(){ var uri = gFilterTree.getAttribute("ref"); var server = gRDF.GetResource(uri).QueryInterface(Components.interfaces.nsIMsgFolder).server; var filterList = currentFilterList(); var args = {filterList: filterList}; window.openDialog("chrome://messenger/content/viewLog.xul", "FilterLog", "chrome,modal,titlebar,resizable,centerscreen", args);}function onFilterClose(){ // make sure to save the filter to disk var filterList = currentFilterList(); if (filterList) filterList.saveToDefaultFile(); if (gRunFiltersButton.getAttribute("label") == gRunFiltersButton.getAttribute("stoplabel")) { var promptTitle = gFilterBundle.getString("promptTitle"); var promptMsg = gFilterBundle.getString("promptMsg");; var stopButtonLabel = gFilterBundle.getString("stopButtonLabel"); var continueButtonLabel = gFilterBundle.getString("continueButtonLabel"); var result = false; if (gPromptService) result = gPromptService.confirmEx(window, promptTitle, promptMsg, (gPromptService.BUTTON_TITLE_IS_STRING*gPromptService.BUTTON_POS_0) + (gPromptService.BUTTON_TITLE_IS_STRING*gPromptService.BUTTON_POS_1), continueButtonLabel, stopButtonLabel, null, null, {value:0}); if (result) gFilterListMsgWindow.StopUrls(); else return false; } window.close(); return true;}function runSelectedFilters(){ // if run button has "stop" label, do stop. if (gRunFiltersButton.getAttribute("label") == gRunFiltersButton.getAttribute("stoplabel")) { gFilterListMsgWindow.StopUrls(); return; } var folderURI = gRunFiltersFolderPicker.getAttribute("uri"); var resource = gRDF.GetResource(folderURI); var msgFolder = resource.QueryInterface(Components.interfaces.nsIMsgFolder); var filterService = Components.classes["@mozilla.org/messenger/services/filters;1"].getService(Components.interfaces.nsIMsgFilterService); var filterList = filterService.getTempFilterList(msgFolder); var folders = Components.classes["@mozilla.org/supports-array;1"].createInstance(Components.interfaces.nsISupportsArray); folders.AppendElement(msgFolder); // make sure the tmp filter list uses the real filter list log stream filterList.logStream = currentFilterList().logStream; filterList.loggingEnabled = currentFilterList().loggingEnabled; var sel = gFilterTree.view.selection; for (var i = 0; i < sel.getRangeCount(); i++) { var start = {}, end = {}; sel.getRangeAt(i, start, end); for (var j = start.value; j <= end.value; j++) { var curFilter = getFilter(j); if (curFilter) { filterList.insertFilterAt(start.value - j, curFilter); } } } filterService.applyFiltersToFolders(filterList, folders, gFilterListMsgWindow);}function moveCurrentFilter(motion){ var filterList = currentFilterList(); var filter = currentFilter(); if (!filterList || !filter) return; filterList.moveFilter(filter, motion); refresh();}function rebuildFilterTree(uri){ gFilterTree.view.selection.clearSelection(); gFilterTree.removeAttribute("ref"); gFilterTree.setAttribute("ref", uri);}function refresh() { if (!gFilterTree) return; var selectedRes; // store the selected resource before we rebuild the tree try { selectedRes = gFilterTree.currentIndex >= 0 ? gFilterTree.builderView.getResourceAtIndex(gFilterTree.currentIndex) : null; } catch (ex) { dump("ex = " + ex + "\n"); selectedRes = null; } rebuildFilterTree(gCurrentServerURI); // restore selection to the previous selected resource if (selectedRes) { var previousSel = gFilterTree.builderView.getIndexOfResource(selectedRes); if (previousSel >= 0) { // sometimes the selected element is gone. gFilterTree.view.selection.select(previousSel); gFilterTree.treeBoxObject.ensureRowIsVisible(previousSel); } }}function updateButtons(){ var numFiltersSelected = gFilterTree.view.selection.count; var oneFilterSelected = (numFiltersSelected == 1); var filter = currentFilter(); // "edit" only enabled when one filter selected or if we couldn't parse the filter gEditButton.disabled = !oneFilterSelected || filter.unparseable; // "delete" only enabled when one filter selected gDeleteButton.disabled = !oneFilterSelected; // we can run multiple filters on a folder // so only disable this UI if no filters are selected gRunFiltersFolderPickerLabel.disabled = !numFiltersSelected; gRunFiltersFolderPicker.disabled = !numFiltersSelected; gRunFiltersButton.disabled = !numFiltersSelected; // "up" enabled only if one filter selected, and it's not the first gReorderUpButton.disabled = !(oneFilterSelected && gFilterTree.currentIndex > 0); // "down" enabled only if one filter selected, and it's not the last gReorderDownButton.disabled = !(oneFilterSelected && gFilterTree.currentIndex < gFilterTree.view.rowCount-1);}/** * get the selected server if it can have filters */function getSelectedServerForFilters(){ var firstItem = null; var args = window.arguments; var selectedFolder = args[0].folder; if (args && args[0] && selectedFolder) { var msgFolder = selectedFolder.QueryInterface(Components.interfaces.nsIMsgFolder); try { var rootFolder = msgFolder.server.rootFolder; if (rootFolder.isServer) { var server = rootFolder.server; if (server.canHaveFilters) { // for news, select the news folder // for everything else, select the folder's server firstItem = (server.type == "nntp") ? msgFolder.URI : rootFolder.URI; } } } catch (ex) { } } return firstItem;}/** if the selected server cannot have filters, get the default server * if the default server cannot have filters, check all accounts * and get a server that can have filters. */function getServerThatCanHaveFilters(){ var firstItem = null; var accountManager = Components.classes["@mozilla.org/messenger/account-manager;1"]. getService(Components.interfaces.nsIMsgAccountManager); var defaultAccount = accountManager.defaultAccount; var defaultIncomingServer = defaultAccount.incomingServer; // check to see if default server can have filters if (defaultIncomingServer.canHaveFilters) { firstItem = defaultIncomingServer.serverURI; } // if it cannot, check all accounts to find a server // that can have filters else { var allServers = accountManager.allServers; var numServers = allServers.Count(); var index = 0; for (index = 0; index < numServers; index++) { var currentServer = allServers.GetElementAt(index).QueryInterface(Components.interfaces.nsIMsgIncomingServer); if (currentServer.canHaveFilters) { firstItem = currentServer.serverURI; break; } } } return firstItem;}function onFilterClick(event){ // we only care about button 0 (left click) events if (event.button != 0) return; var row = {}, col = {}, childElt = {}; var filterTree = document.getElementById("filterTree"); filterTree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, childElt); if (row.value == -1 || row.value > filterTree.view.rowCount-1 || event.originalTarget.localName != "treechildren") { if (event.originalTarget.localName == "treecol") { // clicking on the name column in the filter list should not sort event.stopPropagation(); } return; } if (col.value.id == "activeColumn") { toggleFilter(filterTree.builderView.getResourceAtIndex(row.value)); }}function onFilterDoubleClick(event){ // we only care about button 0 (left click) events if (event.button != 0) return; var row = {}, col = {}, childElt = {}; var filterTree = document.getElementById("filterTree"); filterTree.treeBoxObject.getCellAt(event.clientX, event.clientY, row, col, childElt); if (row.value == -1 || row.value > filterTree.view.rowCount-1 || event.originalTarget.localName != "treechildren") { // double clicking on a non valid row should not open the edit filter dialog return; } // if the cell is in a "cycler" column (the enabled column) // don't open the edit filter dialog with the selected filter if (!col.value.cycler) onEditFilter();}function onFilterTreeKeyPress(event){ // for now, only do something on space key if (event.keyCode != 0) return; var rangeCount = gFilterTree.view.selection.getRangeCount(); for (var i = 0; i < rangeCount; ++i) { var start = {}, end = {}; gFilterTree.view.selection.getRangeAt(i, start, end); for (var k = start.value; k <= end.value; ++k) { toggleFilter(gFilterTree.builderView.getResourceAtIndex(k)); } }}function doHelpButton(){ openHelp("mail-filters");}/** * For a given server folder, get the uri for the first folder. For imap * and pop it's INBOX and it's the very first group for news accounts. */function getFirstFolderURI(msgFolder){ // Sanity check. if (! msgFolder.isServer) return msgFolder.URI; try { // Find Inbox for imap and pop if (msgFolder.server.type != "nntp") { var outNumFolders = new Object(); var inboxFolder = msgFolder.getFoldersWithFlag(MSG_FOLDER_FLAG_INBOX, 1, outNumFolders); if (inboxFolder) return inboxFolder.URI; else // If inbox does not exist then use the server uri as default. return msgFolder.URI; } else // XXX TODO: For news, we should find the 1st group/folder off the news groups. For now use server uri. return msgFolder.URI; } catch (ex) { dump(ex + "\n"); } return msgFolder.URI;}function GetPromptService(){ try { return Components.classes["@mozilla.org/embedcomp/prompt-service;1"] .getService(Components.interfaces.nsIPromptService); } catch (e) { return null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -