2019年12月8日日曜日

Check and Send 1.1.1

Check and Send 1.1.1を公開しました。
宛名チェックの不具合を2つ修正しています。

  • Fixed: 宛名チェックの確認ウィンドウが正しく動作しないのを修正。
  • Fixed: 「アドレス帳の宛名と異なっていたら修正する」の設定のとき、アドレス帳にないアドレスの宛名が削除されていたのを修正。現在は、そのままキープされます。

ダウンロード:

2つめの修正は、5年以上前からあったものです。修正するのを忘れていました…

2019年10月25日金曜日

Thunderbird 68.2.0とアドオンの対応状況

Thunderbird 68.2.0 がリリースされました。

このバージョンから自動アップデートが有効になっているので、まだバージョンアップしたくない場合は、うっかり更新しないように注意が必要です。

v68系に移行できない大きな理由に、アドオンの対応があると思いますが、以下のサイトで対応状況をまとめてくれています。

ThunderKdB: Extension Developer Resources

10/24現在では、125件が対応できているみたいです。
全部で1340件のうち、v60系対応ですら302件と、v60の時点で1000件以上がドロップアウトしてしまっていたんですね…

ThunderbirdはFirefoxとは違って、WebExtensions/MailExtensionsに移行するも、レガシーアドオンもサポートする方針を打ち出してきました。
実際、v60/v68ではアドオンの修正が必要なものの、レガシーアドオンも動いています。
ですが、方針転換し、次期ESRリリース(Thunderbird 78, 2020年6月リリース予定)からは、レガシーのサポートをやめる話も出てきています。

Intent to de-support: traditional add-ons

アドオン作者としては、WebExtensionsでの作り直しの労力や、レガシーアドオンの自由度の高さから、サポートを継続してほしいですが、
この対応状況を見ると、有名どころの機能を本体に組み込んでしまって、サポートを打ち切ろうという考えも分からなくもないです。

で、最後に、私のアドオンの対応状況ですが、v68.2.0でもう少しベータテストを継続してから、正式版をリリースしようと思います。
これから一気に移行が進んで、バグ連絡がくることも考えられるので。
今のところ、v68.2.0でも問題なさそうです。



2019年10月23日水曜日

Thunderbird 68に未対応アドオンをインストールする方法 (2)

「互換性がありません」と出て、インストールできない場合は、まず上記を参考にアドオンを修正してください。

インストールできたが動作しない場合(ほとんどがそうだと思いますが)、ソースコードの修正が必要になります。
基本的には、以下に記載された内容に対応していく必要があります。

ここでは、実際に私がやったことも踏まえて、修正方法をまとめていきたいと思います。


XUL/Javascriptの知識が必要ですが、HTML/他のプログラミング言語にふれたことがある方であれば、なんとなくわかると思います。

あわせて、エラーコンソール(Ctrl+Shift+Jで開きます)のエラーメッセージも確認しておいてください。どの修正をしたらいいかのヒントになります。

今回は、比較的どのアドオンにも共通するものを4つ書きます。UI回りなど、ほかにもありますが、それはまたの機会に。

0.前提

  • アドオンの解凍、再パッケージのやり方はわかっている方を想定しています。
    わからない方は、Thunderbird 68に未対応アドオンをインストールする方法 を確認してください。(といっても、zipで解凍/圧縮するだけです)
    また、今回の修正対象の*.xul, *.jsファイルは、解凍してできた「content」フォルダの中にあることが多いです。

1.グローバル変数の定義
以下のグローバル変数の定義がなくなりました。
エラーコンソールで、「nsIXXXXXの定義がない」と言われているときは、だいたいこれです。
ここに挙がっていないものもあるかもしれないですが、同様の対応でよいです。
実際、nsMsgViewCommandType は、オフィシャルには説明はありませんでしたが、定義がなくなっていました。

メインウィンドウ:
  • NsMsgFolderFlags
  • nsMsgViewCommandType

メール編集ウィンドウ:
  • nsIMsgCompDeliverMode
  • nsIMsgCompSendFormat
  • nsIMsgCompConvertible
  • nsIMsgCompType
  • nsIMsgCompFormat
  • nsIAbPreferMailFormat
  • nsIPlaintextEditorMail
  • nsISupportsString
  • mozISpellCheckingEngine

「Components.interfaces.」を頭につけたものに全部置き換えるか、
Components.interfaces.NsMsgFolderFlags

自分で定義しなおします。
const NsMsgFolderFlags = Components.interfaces.NsMsgFolderFlags;


2.Importの変更
Javascriptモジュールのインポートの仕方が変わっています。
インポートでエラーになるか、「XXX is not a function」のようなエラーの場合は、この修正でなおる可能性があります。

import文によって、修正の仕方が変わります。
まずは、*.jsファイルのimport文を確認してください。

Case 0:
まず、
  • MailUtils.js
  • mailServices.js
をインポートしている場合、ファイル名が変わっているので、それぞれ
  • MailUtils.jsm
  • mailServices.jsm
に変更して、以下のCase 1/Case 2の対応をしてください。
(拡張子がjsmにかわっている)

また、MailUtils.js の MailUtils.getFolderForUri 関数は、MailUtils.getExistingFolder に変わっているので、使っている場合は修正してください。

Case 1:
以下の場合、
Components.utils.import("resource://foo/modules/Foo.jsm");
// または
ChromeUtils.import("resource://foo/modules/Foo.jsm");

以下のように修正します。
var {Foo, Bar} = ChromeUtils.import("resource://foo/modules/Foo.jsm");

「Foo」「Bar」は、使用する関数名を書きます。
よくわからない場合は、インポートファイルに定義してある全てを書いてしまえばOKです。

で、何が定義されているかはインポートファイルを確認します。
インポートファイルの確認の仕方は、以下の通り。
  1. Thunderbirdのインストールフォルダにある「omni.jar」をzipで解凍
  2. 解凍してできた「modules」フォルダの中から、ファイルを探す
  3. 見つけたファイルの冒頭にある「EXPORTED_SYMBOLS」を確認する

iteratorUtils.jsmを例にすると、EXPORTED_SYMBOLSは以下のようになっています。
this.EXPORTED_SYMBOLS = ["fixIterator", "toXPCOMArray", "toArray"];

なので、そのインポートは以下のようになります。(「"」は削除してください)
var {fixIterator, toXPCOMArray, toArray} = ChromeUtils.import("resource:///modules/iteratorUtils.jsm");

Case 2:
以下の場合、
ChromeUtils.import("resource://foo/modules/Foo.jsm", scope);

以下のように修正します。
var scope = ChromeUtils.import("resource://foo/modules/Foo.jsm");

単に2番目の引数に書いているものを、import関数の戻り値にもってくるだけです。


3.Stringbundleの修正
<stringbundleset> と <stringbundle> の削除対応です。
多言語化されているアドオンの場合は、対応が必要です。
ワークアラウンドが準備されているので、修正は簡単です。

<stringbundle>が定義されているxulファイルに、以下の定義を追加するだけです。

<script type="application/x-javascript" src="chrome://global/content/elements/stringbundle.js"/>


4.Dialogのondialogaccept/ondialogcancelイベントハンドラの修正

オプション画面などのダイアログが閉じれない/変更が反映されない場合は、この修正が必要かもしれません。

以下のように、ダイアログのOK/Cancelを押したときに呼び出す処理をXULファイルで指定している場合、
<dialog buttons="accept,cancel"
    ondialogaccept="return onAccept();"
    ondialogcancel="return onCancel();>

</dialog>

Javascriptでのイベントハンドラ登録に変更します。
document.addEventListener("dialogaccept", function(event) {
    let ret = onAccept();
    if (ret == -1) { //onAccept()がエラーを返したときに、ダイアログを閉じない場合
        event.preventDefault();
    }
});

document.addEventListener("dialogcancel", function(event) {
    let ret = onCancel();
    if (ret == -1) { //onCancel()がエラーを返したときに、ダイアログを閉じない場合
        event.preventDefault();
    }
});

2019年9月8日日曜日

noreply@~ のチェックをCheck and Sendに追加しました

Check and Send 1.1.00b5 を公開しました。
機能追加は考えていなかったのですが、要望の多かった「noreply」のチェックを一つだけいれました。

宛先チェックが有効の状態で、noreply/no-replyがアカウント名に入っている場合、
デフォルトでチェックを外すようにしています。

このままOKを押せば、これらのアドレスには送信されません。


上から3つめのように、アカウントの一部にnoreply/no-replyが含まれる場合も対象になります。

もっと自由に設定できるようにとも考えたのですが、修正の規模と分かりやすさの点からこの仕様にしました。

Thunderbird 68.x用になりますが、よかったら使ってみてください。

ダウンロード:




2019年9月3日火曜日

Thunderbird 68に未対応アドオンをインストールする方法

Thunderbird 68.0にバージョンアップすると、ほぼすべてのアドオンが無効化されてしまいます。対応版がリリースされない場合などの時に、自力でインストールできるようにする方法を紹介します。

単純な機能のアドオンなど、運がよければこれで動くようになります。たいていは、インストールができても正しく動かないことが多いと思いますが、その場合は、ソースコードを直していく必要があります。

少し難易度が高いかもしれませんが、テキストエディタと、ZIPの圧縮/解凍ツールがあればできるので、試してみてください。

また、この投稿のコメントの中で、以下のアドオンをThunderbird 68対応させています。非公式版ですが、こちらも自由にお使いください。
  • Address Move Button
  • Auto Address Cleaner
  • Ruler Bar
  • PrintingTools
  • StartupMaster
  • Display Mail User Agent
  • 宅配便の配達状況 
ダウンロードはこちらから。
https://hogi.sakura.ne.jp/hiki/?ExperimentalExtensions


では、アドオンの修正方法の説明です。

①xpiファイルをダウンロード、解凍する
まずは、アドオン(xpi)を作者のサイト等から、ダウンロードしてきます。
ダウンロードしてきたファイルの拡張子をzipに変更して、解凍します。

解凍すると、以下のようなファイル/フォルダができると思います。

chrome/
defaults/
chrome.manifest
install.rdf
この構成でない場合もあるかもしれませんが、気にしないでください。
解凍できて、chrome.manifestとinstall.rdfがでてこればOKです。


②manifest.jsonファイルを作成する
以下のコードをコピーして、chrome.manifest等と同じフォルダ階層(トップ)に、
「manifest.json」という名前で保存してください。

■manifest.json
{
  "manifest_version": 2,
  "name": "XXX",
  "description": "XXX",
  "version": "XXX",
  "author": "XXX",
  "homepage_url": "XXX",
  "legacy": {
    "type": "xul",
    "options" : {
      "page" : "XXX",
      "open_in_tab" : XXX
    }
  },
  "applications": {
    "gecko": {
      "id": "XXX",
      "strict_min_version": "XXX"
    }
  },
  "icons": {
    "32": "XXX",
    "24": "XXX"
  }
}

次に、このmanifest.jsonの XXX の部分を、install.rdfを見ながら設定します。
install.rdfはテキストエディタで開けます。
manifest.jsonができたら、install.rdfは不要なので削除してください。

manifest.jsonとinstall.rdfの値の対応は以下になります。
対応するものがinstall.rdfにない場合は、その設定は不要です。(行ごと削除してOK)
文字列は、""で囲うのを忘れないでください。

manifest.json
install.rdf
必須
補足
name
em:name
〇

description
em:description


version
em:version
〇
好きなバージョンに変更してもOK。
author
em:creator


homepage_url
em:homepageURL


page
em:optionsURL
〇
アドオンの設定ダイアログがある場合のみ。
open_in_tab
em:optionsType
〇
アドオンの設定ダイアログがある場合のみ。
em:optionsType が3の場合は true、 それ以外の値、または、em:optionsType がない場合は false に設定する。
この値は、""で囲まないので注意。
id
em:id
〇
em:targetApplicationの中のem:idではないので注意。
 {3550f703-e582-4d05-9a08-453d09bdfdc6}は、ThunderbirdのIDなので、これではないほうのIDを指定してください。
strict_min_version
-
〇
Thunderbirdのバージョン。これ以前のバージョンにはインストールできない。今回は "68.0" に設定する。
icons
em:iconURL

アドオンのアイコンをサイズごとに指定。
install.rdfとは違い、manifest.jsonを置いたディレクトリからの相対パスで指定する。

 以下、私のアドオン Maximize Message Paneの場合のサンプルです。

■サンプル:Maximize Message Pane の install.rdf
<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
  <em:id>{CC1FC7EB-79F7-4A28-B12C-731304F16E53}</em:id>
  <em:name>Maximize Message Pane</em:name>
  <em:version>1.2.31</em:version>
  <em:description>Maximize message pane by collapsing thread pane and folder pane.</em:description>
  <em:creator>H.Ogi</em:creator>
  <em:optionsURL>chrome://maxmsgpane/content/settings.xul</em:optionsURL>
  <em:iconURL>chrome://maxmsgpane/skin/max32.png</em:iconURL>
  <em:homepageURL>http://hogi.sakura.ne.jp/en/</em:homepageURL>
  <em:targetApplication>
   <Description>
    <em:id>{3550f703-e582-4d05-9a08-453d09bdfdc6}</em:id>
    <em:minVersion>60.0</em:minVersion>
    <em:maxVersion>60.*</em:maxVersion>
   </Description>
  </em:targetApplication>
</Description>
</RDF>


■サンプル:作成したmanifest.json
{
  "manifest_version": 2,
  "name": "Maximize Message Pane",
  "description": "Maximize message pane by collapsing thread pane and folder pane.",
  "version": "1.3.00b3",
  "author": "H.Ogi",
  "homepage_url": "http://hogi.sakura.ne.jp/en/",
  "legacy": {
      "type": "xul",
    "options" : {
      "page" : "chrome://maxmsgpane/content/settings.xul",
      "open_in_tab" : false
    }
  },
  "applications": {
    "gecko": {
      "id": "{CC1FC7EB-79F7-4A28-B12C-731304F16E53}",
      "strict_min_version": "68.0"
    }
  },
  "icons": {
    "32": "max32.png"
  }
}


③chrome.manifestを修正する
次は、chrome.manifestを変更します。これも、テキストエディタで開きます。
ここでも、Maximize Message Paneを例にします。

chrome.manifestは、以下のようになっていると思います。

■サンプル:Maximize Message Paneのchrome.manifest(修正前)
content maxmsgpane jar:chrome/maxmsgpane.jar!/content/maxmsgpane/

overlay    chrome://messenger/content/messenger.xul    chrome://maxmsgpane/content/maxmsgpane.xul
overlay    chrome://messenger/content/msgHdrViewOverlay.xul chrome://maxmsgpane/content/maxmsgpane_hdr.xul

locale maxmsgpane en-US jar:chrome/maxmsgpane.jar!/locale/en-US/maxmsgpane/
locale maxmsgpane ja-JP jar:chrome/maxmsgpane.jar!/locale/ja-JP/maxmsgpane/

skin    maxmsgpane    classic/1.0    jar:chrome/maxmsgpane.jar!/skin/classic/maxmsgpane/

style chrome://messenger/content/customizeToolbar.xul chrome://maxmsgpane/skin/maxmsgpane.css
style chrome://messenger/content/messenger.xul chrome://maxmsgpane/skin/maxmsgpane.css
style chrome://messenger/content/msgHdrViewOverlay.xul chrome://maxmsgpane/skin/maxmsgpane.css

これの、"overlay"、"style"の部分を修正します。
overlay XXXXX YYYYY
style XXXXX YYYYY
の形式になっていますが、このXXXXXの部分が"~Overlay.xul"になっている場合、以下を参考に置き換えます。
なっていない場合は、たぶん、そのままで大丈夫です。
上の例だと、ハイライトした部分が、修正が必要な箇所です。

~Overlay.xul
置き換え
mailWindowOverlay.xul
msgHdrViewOverlay.xul
messenger.xul
customizeToolbarOverlay.xul
customizeToolbar.xul


Maximize Message Paneでは、こんな感じ。

■サンプル:Maximize Message Paneのchrome.manifest(修正後)
content maxmsgpane jar:chrome/maxmsgpane.jar!/content/maxmsgpane/


overlay    chrome://messenger/content/messenger.xul    chrome://maxmsgpane/content/maxmsgpane.xul
overlay    chrome://messenger/content/messenger.xul chrome://maxmsgpane/content/maxmsgpane_hdr.xul


locale maxmsgpane en-US jar:chrome/maxmsgpane.jar!/locale/en-US/maxmsgpane/
locale maxmsgpane ja-JP jar:chrome/maxmsgpane.jar!/locale/ja-JP/maxmsgpane/



skin    maxmsgpane    classic/1.0    jar:chrome/maxmsgpane.jar!/skin/classic/maxmsgpane/


style chrome://messenger/content/customizeToolbar.xul chrome://maxmsgpane/skin/maxmsgpane.css
style chrome://messenger/content/messenger.xul chrome://maxmsgpane/skin/maxmsgpane.css
#style chrome://messenger/content/msgHdrViewOverlay.xul chrome://maxmsgpane/skin/maxmsgpane.css

ハイライト下部分が、変更箇所です。一番最後の行は、msgHdrViewOverlay.xul -> messenger.xul に置き換えると、
一つ上の行と同じになるので、#でコメントアウトしています。

④zipで圧縮する
新しく作成したmanifest.jsonも含めて、すべてのファイル/フォルダをzipで圧縮します。このとき、もとの階層構造と同じになるように注意してください。

通常は、以下のように、トップ階層のファイルを全選択して、zipで圧縮することになると思います。


最後に、拡張子をzipからxpiに変更して終わりです。

作成したxpiファイルを、Thunderbirdのアドオンマネージャーにドラッグ&ドロップすれば、インストールができるはずです。

インストールがうまくいかないときは
「Thunderbird 68.3.1と互換性がないため、このアドオンをインストールできませんでした。」のようなメッセージがでて、インストールできない場合は、manifest.jsonに問題があることが多いです。

エラーコンソールのエラーが参考になることがあるので、確認してみてください。
エラーコンソールは、
・「Ctrl+Shift+J」を押すか、
・アプリメニュー(3本線のメニュー)から、「ツール→開発ツール→エラーコンソール」
で開けます。
「Invalid XPI: SyntaxError: JSON.parse:」のようなメッセージを探してください。

■間違った設定の例
"icons": {
"32": "icon.png",
}

■エラーメッセージの例
1577695480223 addons.xpi WARN Invalid XPI: SyntaxError: JSON.parse: expected double-quoted property name at line 23 column 5 of the JSON data(resource://gre/modules/Extension.jsm:525:26) JS Stack trace: readJSON/</<@Extension.jsm:525:26
onStopRequest@NetUtil.jsm:128:9

「"icon.png",」と、「,」で終わっているので、次のプロパティがこないといけないところ、次の行が「}」なので、エラーになってしまっています。この場合は、「,」を消せばOKです。


[2019/10/07]
Maximize Message Paneの例に合わせて、内容を一部修正しました。
間違いの多い、最後のzip圧縮のところに、イメージ画像を追加しました。

[2019/10/23]
ソースコードの修正についてもまとめました。難易度は高めと思いますが、ご参考までに。
Thunderbird 68に未対応アドオンをインストールする方法 (2)

[2019/12/30]
エラーコンソールの確認方法を追記しました。 


人気の投稿(過去7日間)