Sha256: f879e8b3e25fe21b5b994d8c80eb329f5b592022338ab122dd591eece23f430d

Contents?: true

Size: 1.03 KB

Versions: 1

Compression:

Stored size: 1.03 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)
      @attributes[key]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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