Thunderbird 自定义工具栏按钮

作者:Mitch Frazier

如果您看过视频并想知道我在 Thunderbird 中“移动垃圾邮件”按钮的 JavaScript 代码是什么,请继续阅读。 如果您还没有看过视频,本文将介绍如何使用 Custom Buttons 插件将自定义工具栏按钮添加到 Thunderbird。

Thunderbird 的 Custom Buttons 插件允许您将按钮添加到 Thunderbird 的工具栏。 该插件使用简单:安装完成后,右键单击工具栏并选择“添加新按钮...”,给按钮命名,选择要使用的图像,然后为按钮提供一些 JavaScript 代码。 嗯,好吧,最后一步没那么容易。 因为您需要知道如何编写 JavaScript,并且需要了解 Thunderbird API。 这里是我使用的几个按钮。

第一个按钮清空回收站文件夹。 我的图像是

empty-trash.png

代码很简单

MsgEmptyTrash();

在“代码”选项卡下输入该代码,您应该有一个用于清空回收站的按钮。

第二个按钮将当前文件夹中的所有垃圾邮件移动到垃圾邮件文件夹。 Thunderbird 可以在下载电子邮件并将其分类为垃圾邮件时自动执行此操作,但我喜欢事先查看哪些内容进入垃圾邮件文件夹,以便有机会审查 Thunderbird 的决定。 我用于此按钮的图像是

move-junk.png

这里的代码要复杂得多,我不是从头开始开发的,我使用了在 Thunderbird 源代码中找到的现有函数,该函数删除了当前文件夹中的垃圾邮件。 我所做的只是更改它,以便它移动而不是删除。

//=====================================================================
// Modification of deleteJunkInFolder().
//
function junkJunkInFolder()
{
  MsgJunkMailInfo(true);
  var view = GetDBView();

  // Get junk mail folder.
  var msgURI = view.getURIForViewIndex(0);
  var msgHdr = messenger.msgHdrFromURI(msgURI);
  var server = msgHdr.folder.server;
  var spamSettings = server.spamSettings;
  var spamFolderURI = spamSettings.spamFolderURI;
  var currentFolderURI = msgHdr.folder.folderURL
  if ( !spamFolderURI ) {
    dump('no spam folder!');
    return;
  }
  //alert("Current folder is: " + currentFolderURI + "\nJunk folder is: " + spamFolderURI);

  if ( currentFolderURI == spamFolderURI ) {
     //alert("Current folder is the Junk folder");
     return;
  }

  var junkTargetFolder = GetMsgFolderFromUri(spamFolderURI);

  // Select junk messages.
  // Need to expand all threads, so we find everything
  view.doCommand(nsMsgViewCommandType.expandAll);

  var treeView = view.QueryInterface(Components.interfaces.nsITreeView);
  var count = treeView.rowCount;
  if ( !count ) return;

  var treeSelection = treeView.selection;
  var clearedSelection = false;

  for ( var i = 0; i < count; ++i ) {
    var messageUri = view.getURIForViewIndex(i);
    var msgHdr = messenger.msgHdrFromURI(messageUri);
    var junkScore = msgHdr.getStringProperty("junkscore");
    var isJunk = ((junkScore != "") && (junkScore != "0"));
    // if the message is junk, select it.
    if ( isJunk ) {
      // only do this once
      if ( !clearedSelection ) {
        // clear the current selection
        // since we will be deleting all selected messages
        treeSelection.clearSelection();
        clearedSelection = true;
        treeSelection.selectEventsSuppressed = true;
      }
      treeSelection.rangedSelect(i, i, true /* augment */);
    }
  }

  // If we didn't clear the selection there was no junk, so bail.
  if ( !clearedSelection ) return;

  treeSelection.selectEventsSuppressed = false;
  // delete the selected messages
  SetNextMessageAfterDelete();
  view.doCommandWithFolder(nsMsgViewCommandType.moveMessages, junkTargetFolder);
  treeSelection.clearSelection();
}

//=====================================================================
junkJunkInFolder();

我不会详细解释代码,特别是考虑到我没有编写大部分代码,但操作非常简单:获取对当前文件夹和垃圾邮件文件夹的引用,然后循环遍历当前文件夹中的所有消息并选择垃圾邮件。 循环之后,如果选择了任何消息,则将它们移动到垃圾邮件文件夹。

Mitch Frazier 是 Emerson Electric Co. 的嵌入式系统程序员。自 2000 年代初以来,Mitch 一直是 Linux Journal 的贡献者和朋友。

加载 Disqus 评论