>Форум 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=46639 |
Nakaz > 25-10-2010 20:34:15 |
Был в форуме вопрос: В Бате есть очень удобная функция - поиск ответа на письмо: Много думал и придумал: Попробовал со стандартным поиском - работает - ищет исправно! Идем дальше: есть установленный плагин KeyConfig, который позволяет на горячие клавиши повесить последовательности команд встроенного языка. Теперь вопрос: какими командами можно выдрать из письма на котором установлен фокус содержимое хидера "Message-ID", и как его передать следующей команде - найти письмо, в котором, например, хидер "In-Reply-To" содержит этот идентификатор? Был на него ответ : У меня вопрос - есть ли сейчас похожий функционал в Тандерберде? |
luitzen > 27-10-2010 21:28:48 |
В Thunderbird есть возможность «открыть в разговоре». Это такой пункт в меню «другие действия». Если чем-то не устраивает, можно создать виртуальную папку, объединяющую несколько. Или настроить сохранение ответов в папке оригинала. Разумеется, во всех случаях нужно использовать группировку по обсуждениям. Если же в том виде, в котором хотите вы… Message-ID текущего письма получить просто: Дальше сложнее. Есть три варианта. Первый — использовать общие механизмы поиска Thunderbird. Второй — как-то паразитировать на средствах получения того способа отображения списков писем, который мы имеем в режиме «Открыть в разговоре». Третий — реализовать свой собственный поиск в надежде, что в данном конкретном случае он будет быстрее, чем универсальный поиск Thunderbird. Второго я не умею. Для третьего, видимо, придётся хранить значение «In-Reply-To» в файле с индексом папки, а переиндексировать неохота . Код ниже открывает сообщения, у которых в In-Reply-To стоит Message-ID текущего. Он производит поиск в тех папках учётной записи, в которой хранится сообщение, названия которых указаны в первой строке. Выделить код Код:let foldersToSearch = ['Входящие', 'Отправленные']; let Ci = Components.interfaces; let Cc = Components.classes; function yieldFolders() { let allFolders = Cc["@mozilla.org/supports-array;1"].createInstance(Ci.nsISupportsArray); gFolderDisplay.displayedFolder.rootFolder.ListDescendents(allFolders); for (let i = 0; i < allFolders.Count(); i++) { let folder = allFolders.GetElementAt(i).QueryInterface(Ci.nsIMsgFolder); if (foldersToSearch.indexOf(folder.prettyName) != -1) yield folder; } } let searchListener = { onNewSearch: function() {}, onSearchHit: function(dbHdr, folder) {MailUtils.displayMessage(dbHdr)}, onSearchDone: function() {} }; let searchSession = Cc["@mozilla.org/messenger/searchSession;1"].createInstance(Ci.nsIMsgSearchSession); let term = searchSession.createTerm(); let value = term.value value.str = '<' + gFolderDisplay.selectedMessage.messageId + '>'; term.value = value; term.attrib = Ci.nsMsgSearchAttrib.OtherHeader; term.op = Ci.nsMsgSearchOp.Is; term.arbitraryHeader = 'In-Reply-To'; term.booleanAnd = true; searchSession.appendTerm(term); for each (let folder in yieldFolders()) searchSession.addScopeTerm(Ci.nsMsgSearchScope.offlineMail, folder); searchSession.registerListener(searchListener); searchSession.search(null); С кастомной кнопки работает исправно. |
Shura > 28-10-2010 12:40:29 |
Спасибо, работает просто замечательно! |