TwitterFoxのPopupのかわりにSnarlに出力するようにしてみた...そして中途半端に終わる

自宅で夏ライオンGrowlの環境が快適すぎて、Windows環境でも... と思いTwitterFoxを改造してみた。

必要なもの

まず、Firefox以外に以下を用意する必要がある。

TwitterFoxをHack

まずは、TwitterFoxのソースを見つけるところから。
たぶん、以下のようなフォルダに twitterfox.jar が格納されていると思う。

  • C:\Documents and Settings\(ユーザID)\Application Data\Mozilla\Firefox\Profiles\(英数字の羅列).default\extensions\twitternotifier@naan.net\chrome

(ユーザID)のとこや(数字の羅列)のとこは環境によって違うから、適宜よみかえる。

で、twitterfox.jar が見つかったら、そのjarファイルを解凍する。
すると、以下のようにcontentフォルダlocaleフォルダが展開されると思う。

それらのフォルダ/ファイルをtwitterfoxのchromeフォルダの直下になるように配置する。以下のように.. もし、jarファイルを解凍した時点でそうなっているんであれば、特に変更する必要は無い。

で、[twitterfoxインストール先]\chrome.manifest を開いて以下のような箇所を

 content	twitternotifier	jar:chrome/TwitterFox.jar!/content/

このように修正

 content	twitternotifier	chrome/content/

これで、jarファイルじゃなくて展開された素のファイルを参照するようになる。

んで、ここまできたら一旦Firefoxを閉じて(開いてたら)、firefoxを起動してみる。そしてTwitterFoxがちゃんと動いていることを確認する。

ちゃんと動いていることが確認できたら、TwitterFoxのソースに手を入れていく。

まずは、[twitterfoxインストール先]\chrome\content\twitternotifier.js を開いて、以下のような箇所を見つける。

    if (count > 5) {
      this._messageQueue = new Array();
      this.showNotice(this._strings.getFormattedString("MoreThan5Tweets", [unread]));
    }
    else {
      this.showBalloon();
    }

ここは、5件以上のメッセージが溜まっていたら1つ1つのメッセージを表示しないでまとめて"n件のメッセージ"って感じの通知を出すところ。自分の場合10件とかまとまってくるときがあるので、以下のように件数を増やしておいた。

    if (count > 20) {

あと以下のような箇所(showBalloonメソッド)を見つけて、

  showBalloon: function() {
    var elem = this.createMessageBalloon(this._messageQueue.shift(), false);
    elem.setAttribute("type", "balloon");
    this.popupBalloon(elem);
  },

以下のように修正。

  showBalloon: function() {
    var msg = this._messageQueue.shift();
    try {
      var Ci = Components.interfaces;
      var classObj = Components.classes["@mozilla.org/alerts-service;1"];
      var alertService = classObj.getService(Ci.nsIAlertsService);

      var user = msg.user ? msg.user : msg.sender;
      alertService.showAlertNotification('', user.screen_name, msg.text);
      
    } catch (e) {
      this.log("Failed to create message balloon *** for snarl ***: " + e.message);
    }
    
    // For next message
    var interval = this._util.pref().getIntPref("popup-interval");
    if (!interval) {
      interval = 3;
    }
    this._timer = setTimeout("gTwitterNotifier.onTimeoutBalloon()", interval * 1000);
  },

動かしてみる。

まず、TwitterFoxの設定で、「ポップアップの表示」を有効にしておく必要がある。

そうすると、メッセージを受信したら以下のように表示される。

とりあえずは動いたんだけど、いろいろイケテないところがある。

コレのいけてない所

日本語が文字化けする

Snarlで所々日本語が化けるのがどうにもならない。
SourceForgeのフォーラムでも日本語が化ける件が報告されているけど、開発者からは「SnarlUnicodeに対応している」「使っているRubyバインディングがおかしいんじゃ?」というやりとりで終わっていて解消されていない。

最近はSnarl自身のメンテナンスもされていないっぽいので自分でどうにかしたいんだけど、相変わらずビルドができないのでどうしようもない。orz

Firefoxを最小化してるとポップアップが表示されない

これってどうにかできそうなんだけど、どうすればいいかわからない。

Twittererのアイコンが表示されない

なので、だれのつぶやきなのかがパッと見わかりにくい。


と言う感じで中途半端なままだけど、気が向いたら続きのエントリをアップするかもしれない。