AppleScript で書いたやつの続き。RubyCocoa から Skype.framework と NSDistributedNotificationCenter を使っている。apple-unstable の RubyCocoa で動きます。
書いたのはちょっと前で、実行すると
% ruby a.rb
/Library/Frameworks/RubyCocoa.framework/Versions/A/Resources/ruby/osx/objc/oc_wrapper.rb:17: [BUG] Bus Error
ruby 1.8.5 (2006-08-25) [powerpc-darwin8.8.0]
zsh: abort ruby a.rb
と、なぜか落ちるので放置していたのだけど、ひ日誌(2006-12-22) で読んだ addRubyMethod_withType を足してみたら落ちなくなった。
require 'osx/cocoa'
OSX.require_framework 'Skype'
class Server < OSX::NSObject
def onPlayerInfo(n)
s = "#{n.userInfo['Name']} / #{n.userInfo['Artist']}"
OSX::SkypeAPI.sendSkypeCommand("SET PROFILE MOOD_TEXT #{s}")
end
def clientApplicationName
'NowPlayingOnSkype'
end
addRubyMethod_withType 'skypeAttachResponse:', 'v@:i'
def skypeAttachResponse(status)
return if status != 1
center = OSX::NSDistributedNotificationCenter.defaultCenter
center.addObserver_selector_name_object_(self,
'onPlayerInfo:',
'com.apple.iTunes.playerInfo',
'com.apple.iTunes.player')
end
end
server = Server.alloc.init
OSX::SkypeAPI.setSkypeDelegate(server)
OSX::SkypeAPI.connect
OSX::NSRunLoop.currentRunLoop.run
