Полезная информация

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№107-10-2010 15:17:29

mshubin
Участник
 
Группа: Members
Зарегистрирован: 08-09-2009
Сообщений: 47
UA: Firefox 3.6

Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

Друзья, необходимо решить следующую задачу. Есть некоторая виртуальная папка 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)

Отсутствует

 

№208-10-2010 03:12:46

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771

Re: Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

Тема перенесена из форума «Thunderbird» в форум «Разработка».


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

№311-10-2010 14:01:58

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 4.0

Re: Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

Ну вот как-то так можно:

Выделить код

Код:

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'));

Отсутствует

 

№413-10-2010 15:43:21

mshubin
Участник
 
Группа: Members
Зарегистрирован: 08-09-2009
Сообщений: 47
UA: Firefox 3.6

Re: Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

Эх, что то не пашет :( может дело в том, что виртуальная папка MY_FOLD является вложенной в другую папку MY_VIRT_FOLDERS?)

Добавлено 13-10-2010 16:10:59
ругается, что VirtualFolderHelper not defined.

Данная переменная действительно не определена...

Отсутствует

 

№513-10-2010 16:23:44

luitzen
Участник
 
Группа: Members
Зарегистрирован: 19-07-2008
Сообщений: 791
UA: Firefox 4.0

Re: Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

Выделить код

Код:

Components.utils.import("resource:///modules/virtualFolderWrapper.js");

Добавлено 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;}
    }
}

Отсутствует

 

№613-10-2010 16:32:16

mshubin
Участник
 
Группа: Members
Зарегистрирован: 08-09-2009
Сообщений: 47
UA: Firefox 3.6

Re: Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

GOOD!!!))))) спасибо)

Отсутствует

 

№717-04-2013 10:02:15

Жирнов Максим
Участник
 
Группа: Members
Зарегистрирован: 27-11-2009
Сообщений: 12
UA: Firefox 18.0

Re: Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

Подскажите, пожалуйста, где можно найти описание (структуру) всех свойств и методов используемых в Thunderbird?
Имеются ввиду: queryElementAt, prettyName и прочее.

Отсутствует

 

№801-05-2013 22:24:15

Unghost
Призрак-админ
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 08-10-2004
Сообщений: 11771
UA: Firefox 23.0

Re: Extra Folder Columns + помощь с кодом + узнать количество писем в вирт

Жирнов Максим
В исходниках


Do not meddle in the affairs of Wizards, for they are subtle and quick to anger.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]