Javascript 使用Gloda GlodaIndexer手动或显式索引Thunderbird中的文件夹

Javascript 使用Gloda GlodaIndexer手动或显式索引Thunderbird中的文件夹,javascript,html,indexing,thunderbird-addon,Javascript,Html,Indexing,Thunderbird Addon,1) 使用打开一个新选项卡 document.getElementById("tabmail").openTab("chromeTab", { chromePage: “indexWithGloda.html”, }); 2) 文件indexWithGloda.html有一个带有onlick的按钮,甚至可以启动索引 function onClickStartIndexingWithGloda() { var inboxFolder = getInboxFolder(); //

1) 使用打开一个新选项卡

document.getElementById("tabmail").openTab("chromeTab", {
    chromePage: “indexWithGloda.html”,
});
2) 文件
indexWithGloda.html
有一个带有onlick的按钮,甚至可以启动索引

function onClickStartIndexingWithGloda()
{
    var inboxFolder = getInboxFolder(); // Find the inbox folder
    GlodaMsgIndexer.indexFolder(inboxFolder, ["force"]);
    var job = GlodaIndexer._indexQueue.pop();
    GlodaMsgIndexer._worker_folderIndex(job);
}

// Adding a messenger lazy getter to the MailServices even though it's not a service
XPCOMUtils.defineLazyGetter(MailServices, "messenger", function () {
    return Cc["@mozilla.org/messenger;1"].createInstance(Ci.nsIMessenger);
});

function getInboxFolder() {
    var inbox = null;
    var accounts = [x for each (x in fixIterator(MailServices.accounts.accounts, Ci.nsIMsgAccount))].filter(function (x) x.incomingServer);

    var server = accounts[0].incomingServer;
    var folder = server.rootFolder;

    var searchForInbox = function(folder) {
        var isInbox = folder.getFlag(Ci.nsMsgFolderFlags.Inbox);
        if (isInbox) {
            inbox = folder;
        }
        else if (folder.hasSubFolders) {
            for each (var subFolder in fixIterator(folder.subFolders, Ci.nsIMsgFolder))
                searchForInbox(subFolder);
        }
    }
    searchForInbox(folder);
    return inbox;
}

问题是调用
GlodaMsgIndexer.\u worker\u folderIndex(作业)onClickStartIndexingWithGloda()
中的code>不会真正启动索引。我想应该以某种异步方式调用它,但我不知道如何异步启动它。我将非常感谢这里的任何帮助。还有一个问题,如果文件夹已经被索引,这个方法是否有效?如果没有,则需要执行什么操作来重新索引已编制索引的文件夹?

文件夹是否编制索引取决于:

  • 用户的全局首选项(mailnews.database.global.indexer.enabled)
  • 右键单击文件夹,然后点击属性,然后选择“在全局搜索结果中包含此文件夹”,即可访问每个文件夹的首选项
所以我认为你不应该强迫Gloda为一个文件夹编制索引:Gloda能够在邮件添加到文件夹时自动计算,并相应地为它们编制索引

你能多告诉我一点你想要达到的目标吗

编辑:你正在寻找的链接可能是


文件夹是否编制索引取决于:

  • 用户的全局首选项(mailnews.database.global.indexer.enabled)
  • 右键单击文件夹,然后点击属性,然后选择“在全局搜索结果中包含此文件夹”,即可访问每个文件夹的首选项
所以我认为你不应该强迫Gloda为一个文件夹编制索引:Gloda能够在邮件添加到文件夹时自动计算,并相应地为它们编制索引

你能多告诉我一点你想要达到的目标吗

编辑:你正在寻找的链接可能是


我正在准备一个演示/实验,需要有一种方法在特定的时刻(当我按下按钮时)使Gloda index成为一个特定的文件夹。我需要手动控制索引,以便显示索引的进度。在这种情况下,您完全希望缩短gloda索引逻辑。我建议您看看我们在树中的测试框架,看看如何将gloda切换到“测试模式”,在这种模式下,gloda不会试图变得聪明并自行解决问题。然后,您应该能够手动告诉它运行“文件夹索引扫描”(这是您需要在源代码中搜索的内容)。我已经添加了链接,作为我先前答案的一部分。嗨,Jonathan,谢谢您的指点。我其实是在看这两个文件,你给我的链接。我的示例代码是从test_index_sweep_floder.js派生的,但我没有成功地让它工作——只是调用GlodaMsgIndexer.\u worker_folderIndex(作业);无法工作,因为其中有asyn调用。这可能是因为gloda在测试模式下不可用。我将检查如何将gloda切换到测试模式。是的,gloda测试在使用ECMAScript 6迭代器/生成器执行异步调用的测试框架内运行。但是为什么调用
indexFolder
还不够?我正在准备一个演示/实验,需要有一种方法在特定的时刻——当我按下一个按钮时,使Gloda索引成为一个特定的文件夹。我需要手动控制索引,以便显示索引的进度。在这种情况下,您完全希望缩短gloda索引逻辑。我建议您看看我们在树中的测试框架,看看如何将gloda切换到“测试模式”,在这种模式下,gloda不会试图变得聪明并自行解决问题。然后,您应该能够手动告诉它运行“文件夹索引扫描”(这是您需要在源代码中搜索的内容)。我已经添加了链接,作为我先前答案的一部分。嗨,Jonathan,谢谢您的指点。我其实是在看这两个文件,你给我的链接。我的示例代码是从test_index_sweep_floder.js派生的,但我没有成功地让它工作——只是调用GlodaMsgIndexer.\u worker_folderIndex(作业);无法工作,因为其中有asyn调用。这可能是因为gloda在测试模式下不可用。我将检查如何将gloda切换到测试模式。是的,gloda测试在使用ECMAScript 6迭代器/生成器执行异步调用的测试框架内运行。但是为什么调用
indexFolder
还不够?