以前に Ruby で Growl に通知するサンプル という投稿をしたが、実際のアプリで Macbook Pro から Windows への通知をしようと思ったら上手く動かなかった。
localhost では OK でネットワーク経由では NG という状況で、Growl for Windows の設定をあれこれ弄ってもダメ。でもコマンドラインツールからはちゃんと通知できる、ということでプログラムを見なおしたところ register メソッドを発行しないとダメなことに気づいた。
で、notify の前に register メソッドを発行すれば良いかと思ったが、毎回 register されて Growl for Windows に通知が出てしまって煩わしいため、以下の様なコードで対処した。
growl.rb
require 'ruby-growl'
class Growl
def initialize(ip, name = 'ruby-growl')
@g = ::Growl::GNTP.new ip, name
@g.password = 'PASSWORD'
@g.add_notification "notification", "#{name}"
end
def notify(title, message, url)
begin
@g.notify "notification", title, message, 0, true, nil, url
rescue Growl::GNTP::UnknownApplication
@g.register
retry
end
end
end
今更 growl 使う人は少ないのかもしれないけど、何かの参考になれば。