Страницы: 1
Друзья, необходимо решить следующую задачу. Есть некоторая виртуальная папка MY_FOLD, мне необходимо посмотреть, сколько сообщений в ней, это можно сделать например при помощи следующего кода:
var folderName = "MY_FOLD";
function fixNum(aNumber) {
return aNumber <= 0 ? "" : aNumber;
}
function searchFolder (folderName)
{
var res;
var accountManager = Components. classes ["@mozilla.org/messenger/account-manager;1"].
getService (Components. interfaces. nsIMsgAccountManager);
var allServers = accountManager. allServers;
var numServers = allServers. Count ();
for (var index = 0; index < numServers; index++)
{
var rootFolder = allServers. GetElementAt (index). QueryInterface (Components. interfaces. nsIMsgIncomingServer). rootFolder;
if (rootFolder)
{
var allFolders = Components. classes ["@mozilla.org/supports-array;1"]. createInstance (Components. interfaces. nsISupportsArray);
rootFolder. ListDescendents (allFolders);
var numFolders = allFolders. Count ();
for (var folderIndex = 0; folderIndex < numFolders; folderIndex++)
{
var cf = allFolders. GetElementAt (folderIndex). QueryInterface (Components. interfaces. nsIMsgFolder);
if (cf. name. indexOf (folderName) != -1)
{
res = cf;
break;
}
}
}
}
return res;
}
var filterService = Components. classes ["@mozilla.org/messenger/services/filters;1"].
getService (Components. interfaces. nsIMsgFilterService);
var folder = searchFolder (folderName);
a=fixNum(folder.getTotalMessages(false));
alert(a);
Проблема заключается в том, что переменная a будет содержать то значение, которое мы будем видеть в колонке Total (которая формируется дополнением Extra Folder Columns) -> проблема в том, что это нереальное значение кол-ва писем в папке (потому что за N минут с момента предыдущего просмотра в папку могли нападать другие письма). Чтобы посмотреть реальное количество писем в папке MY_FOLD, надо кликнуть на папку MY_FOLD, тогда количество писем пересчитается. Мне интересно, может бьть можно как то программно вызвать это событие (пересчет писем в виртуальной папке)?? очень не удобно, что они обновляются не в режиме online
Отредактировано mshubin (07-10-2010 15:18:31)
Отсутствует
Тема перенесена из форума «Thunderbird» в форум «Разработка».
Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.
Отсутствует
Ну вот как-то так можно:
function updateVirtualFolder(virtualFolderName) { var virtualFolder = searchFolder(virtualFolderName); var virtualFolderWrapper = VirtualFolderHelper.wrapVirtualFolder(virtualFolder); var numTotalMessages; var numUnreadMessages; var searchListener = { onNewSearch: function() { numTotalMessages = 0; numUnreadMessages = 0; }, onSearchHit: function(dbHdr, folder) { numTotalMessages++; if (!dbHdr.isRead) numUnreadMessages++; }, onSearchDone: function(status) { var db = virtualFolder.msgDatabase; var dbFolderInfo = db.dBFolderInfo; dbFolderInfo.numMessages = numTotalMessages; dbFolderInfo.numUnreadMessages = numUnreadMessages; virtualFolder.updateSummaryTotals(true); } }; var searchSession = Components.classes["@mozilla.org/messenger/searchSession;1"]. createInstance(Components.interfaces.nsIMsgSearchSession); var searchTerms = virtualFolderWrapper.searchTerms; for(i = 0; i < searchTerms.Count(); i++) { searchSession.appendTerm(searchTerms.QueryElementAt(i, Components.interfaces.nsIMsgSearchTerm)); } var searchFolders = virtualFolderWrapper.searchFolders; for (i = 0; i < searchFolders.length; i++) { searchSession.addScopeTerm(Components.interfaces.nsMsgSearchScope.offlineMail, searchFolders[i]); } searchSession.registerListener(searchListener); searchSession.search(null); return numTotalMessages; } alert(updateVirtualFolder('MY_FOLD'));
Отсутствует
Эх, что то не пашет может дело в том, что виртуальная папка MY_FOLD является вложенной в другую папку MY_VIRT_FOLDERS?)
Добавлено 13-10-2010 16:10:59
ругается, что VirtualFolderHelper not defined.
Данная переменная действительно не определена...
Отсутствует
Добавлено 13-10-2010 16:31:37
Кстати, поиск папки по имени можно покороче записать:
function findFirstFolderWithName(folderName) { let allFolders = Components.classes["@mozilla.org/messenger/account-manager;1"] .getService(Components.interfaces.nsIMsgAccountManager).allFolders; for (let i = 0; i < allFolders.length; i++) { let folder = allFolders.queryElementAt(i, Components.interfaces.nsIMsgFolder); if (folder.prettyName == folderName) {return folder;} } }
Отсутствует
Подскажите, пожалуйста, где можно найти описание (структуру) всех свойств и методов используемых в Thunderbird?
Имеются ввиду: queryElementAt, prettyName и прочее.
Отсутствует
Жирнов Максим
В исходниках
Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.
Отсутствует
Страницы: 1