Sha256: 4954085d9d8a88bb2a669ea338b98cdbd06f2a86eb0553de93427f0c92c105a1

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

require 'osx/cocoa'

class ITunesObserver
  VERSION = '0.0.2'

  def initialize(&callback)
    observer = Observer.alloc.init
    observer.observe(&callback)
  end

  def run(stop_after = nil)
    if stop_after
      OSX::NSRunLoop.currentRunLoop.runUntilDate(Time.now + stop_after)
    else
      OSX::NSRunLoop.currentRunLoop.run
    end
  end

  # based on http://blog.8-p.info/articles/2006/12/24/rubycocoa-skype-itunes
  class Observer < OSX::NSObject
    def onPlayerInfo(info)
      if info.userInfo['Player State'] == 'Playing'
        result = Result.new(info.userInfo)
        @callback.call(result)
      end
    end

    def observe(&callback)
      @callback = callback
      center = OSX::NSDistributedNotificationCenter.defaultCenter
      center.addObserver_selector_name_object_(self,
        'onPlayerInfo:',
        'com.apple.iTunes.playerInfo',
        'com.apple.iTunes.player')
    end
  end

  class Result
    def initialize(attributes)
      @attributes = attributes
    end

    def [](key)
      case value = @attributes[key]
      when OSX::NSCFString
        value.to_s
      else
        value
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
itunes-observer-0.0.2 lib/itunes_observer.rb