タグ関連のバグ(?)というか拡張を作る上での注意点

先日作ったTag Dialogという拡張。テストのためにタグを作ったり削除したりしてたわけだが、特定のメール記事で必ずエラーで落ちる*1という現象に陥った。
エラーコンソールに値を出力して少しずつデバッグしていたのだが、削除したタグが完全に消えていない事が分かった。

具体的には以下の手順で再現する

  1. タグを付加する
  2. オプション->表示->タグ から付加したタグを削除する(表示上は消える)

これをすると、メールの実データ(プロファイルディレクトリ下のMail下にある)のX-Mozilla-Keysヘッダに付加したタグのキー値が付いたままになる。

タグの削除はpref.js((またはabout:config))のデータを削除するだけのようだ。反対にタグの付加は実データのメールヘッダのX-Mozilla-Keysキー値を空白区切りで追加しているみたい。また、メール記事に付いたタグを取り外すと実データ上のキー値も取り除かれる。

Thunderbird上のインターフェースからこの付加されたままのキー値を取得できないならば特に問題も起こらないのだが、実は取得できてしまう。

var gdbview = GetDBView();
var tagKeys = gdbview.hdrForFirstSelectedMessage.getStringProperty('keywords');
// tagKeys に X-Mozilla-Keys の値が入る

オイラの作った拡張はこの値を利用してダイアログ表示時のテキストボックスの初期値にタグ名を入れている。Thunderbird自身もこの値を利用しているが、きちんと存在を確認している事が改めて調べてみて分かった。*2

ということでThunderbird自身には問題は起こらないが、拡張を作る上では注意が必要。。仕様上タグの追加や削除を繰り返すとゴミが溜まっていくのでバグとして取り上げたいくらいだ。

*1:Thunderbird自体ではなく作ったDialogだけだが

*2:参照:mailnews/mail/base/content/mailWindowOverlay.jsの682行目