1

1)で新しいタブを開きます

document.getElementById("tabmail").openTab("chromeTab", {
    chromePage: “indexWithGloda.html”,
});

2)ファイルindexWithGloda.htmlには、インデックス作成を開始する必要がある場合でも、オンリックのボタンがあります。

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._worker_folderIndex(job);問題は、関数の呼び出しonClickStartIndexingWithGloda()が実際にはインデックス作成を開始しないことです。非同期で呼び出す必要があると思いますが、非同期で起動する方法がわかりません。ここで助けていただければ幸いです。もう1つの質問ですが、フォルダーが既にインデックスに登録されている場合、このメソッドは機能しますか?そうでない場合は、すでにインデックスが作成されているフォルダーのインデックスを再作成するために何をする必要がありますか?

4

1 に答える 1

1

フォルダにインデックスが付けられるかどうかは、以下によって異なります。

  • ユーザーのグローバル設定(mailnews.database.global.indexer.enabled)
  • フォルダを右クリックし、プロパティを押して、[このフォルダをグローバル検索結果に含める]を選択することでアクセスできるフォルダごとの設定。

したがって、Glodaにフォルダのインデックス作成を強制するべきではないと思います。Glodaは、メッセージがフォルダに追加されるたびに自動的に把握し、それに応じてインデックスを作成できます。

あなたが達成しようとしていることについてもう少し教えていただけますか?

編集:あなたが探しているリンクはおそらく

于 2012-10-12T19:26:00.550 に答える