>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Thunderbird http://forum.mozilla-russia.org/viewforum.php?id=7 >Как создать папку с «безЯрлычными» письмами»? http://forum.mozilla-russia.org/viewtopic.php?id=45902 |
uzi1 > 05-09-2010 06:13:28 |
На Gmail есть несколько ярлыков, которые соответственно появились в ТБ. |
luitzen > 08-09-2010 12:54:01 |
Вопрос очень хороший . Я придумал решение (довольно варварское), но столкнулся с проблемами при реализации. Идея решения такая. Нужно установить Filtaquilla (вообще полезная вещь) и в её настройках задать возможность использовать собственный JavaScript при поиске. Затем создать виртуальную папку, отображающую такие сообщения из «All Mail», для которых в папках ярлыков нет сообщений с идентичным Message-ID. В первом приближении код выглядит так: Выделить код Код:let messageID = message.messageId; let subfolders = Cc["@mozilla.org/supports-array;1"] .createInstance(Ci.nsISupportsArray); Cc["@mozilla.org/messenger/account-manager;1"] .getService(Ci.nsIMsgAccountManager) .FindServer('mylogin@gmail.com', 'imap.googlemail.com', 'imap') .rootFolder .ListDescendents(subfolders); ( ( function() { for each (let subfolder in fixIterator(subfolders, Ci.nsIMsgFolder)) { if (!subfolder.getFlag(0x40405720)) { let messages = subfolder.messages; while(messages.hasMoreElements()) { let _message = messages.getNext(); if (_message.messageId == messageID) {return false;} } } } return true; } )() ) Проблема в том, что _message.messageId чаще всего undefined. Не всегда, конечно. Если письмо с ярлыком было только что просмотрено, то соответствующий nsiMsgDBHdr всё-таки имеет правильный messageId. Значение mailnews.customDBHeaders установлено в message-id, папки переиндексированы. Что ему ещё нужно, кто знает? |
luitzen > 08-09-2010 17:41:34 |
luitzen пишет
А не хватает ему сказанного в нужном месте следующего: uzi1, считаю вопрос решённым, если нужно что-то дополнительно разъяснить, спрашивайте. |
uzi1 > 08-09-2010 17:45:41 |
далек я от JavaScript |
luitzen > 08-09-2010 19:23:50 |
ОК, последовательность действий такая.
В настройках этого дополнения на вкладке «Search Terms» выставляете флаг «JavaScript». В аbout:config находите параметр mailnews.customDBHeaders, выставляете его в "message-id" (без кавычек, в нижнем регистре). Если в значении параметра что-то есть, дописываете в него указанную строку через пробел. Наверное, нужно перезапустить Thunderbird. Переиндексируете папки с ярлыками и папку «All Mail» (я просто поудалял msf-файлы в профиле). Нажимаете Ctrl+Shift+F, выбираете папку «All Mail», в условиях поиска выбираете «JavaScript» «подходит под» <код ниже>. Выделить код Код:let messageID = message.messageId; let subfolders = Cc["@mozilla.org/supports-array;1"] .createInstance(Ci.nsISupportsArray); Cc["@mozilla.org/messenger/account-manager;1"] .getService(Ci.nsIMsgAccountManager) .FindServer('mylogin@gmail.com', 'imap.googlemail.com', 'imap') .rootFolder .ListDescendents(subfolders); ( ( function() { for each (let subfolder in fixIterator(subfolders, Ci.nsIMsgFolder)) { if (!subfolder.getFlag(0x40405720)) { let messages = subfolder.messages; while(messages.hasMoreElements()) { let _message = messages.getNext() .QueryInterface(Ci.nsIMsgDBHdr); if (_message.messageId == messageID) {return false;} } } } return true; } )() ) В восьмой строке нужно указать свой логин. Поиск дубликатов производится во всех папках, кроме стандартных и виртуальных. |