youpy-itunes-observer 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +4 -0
- data/README.rdoc +32 -0
- data/Rakefile +110 -0
- data/lib/itunes_observer.rb +45 -0
- data/spec/itunes_observer_spec.rb +31 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +10 -0
- metadata +72 -0
data/ChangeLog
ADDED
data/README.rdoc
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
|
|
2
|
+
= itunes-observer
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
== Description
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
== Installation
|
|
9
|
+
|
|
10
|
+
=== Archive Installation
|
|
11
|
+
|
|
12
|
+
rake install
|
|
13
|
+
|
|
14
|
+
=== Gem Installation
|
|
15
|
+
|
|
16
|
+
gem sources -a http://gems.github.com/
|
|
17
|
+
gem install youpy-itunes-observer
|
|
18
|
+
|
|
19
|
+
== Features/Problems
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
== Synopsis
|
|
23
|
+
|
|
24
|
+
ITunesObserver.new {|result|
|
|
25
|
+
puts '%s - %s' % [result['Artist'], result['Name']]
|
|
26
|
+
}.run
|
|
27
|
+
|
|
28
|
+
== Copyright
|
|
29
|
+
|
|
30
|
+
Author:: youpy <youpy@buycheapviagraonlinenow.com>
|
|
31
|
+
Copyright:: Copyright (c) 2009 youpy
|
|
32
|
+
License:: MIT
|
data/Rakefile
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rake'
|
|
3
|
+
require 'rake/clean'
|
|
4
|
+
require 'rake/testtask'
|
|
5
|
+
require 'rake/packagetask'
|
|
6
|
+
require 'rake/gempackagetask'
|
|
7
|
+
require 'rake/rdoctask'
|
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
|
9
|
+
require 'rake/contrib/sshpublisher'
|
|
10
|
+
require 'spec/rake/spectask'
|
|
11
|
+
require 'fileutils'
|
|
12
|
+
include FileUtils
|
|
13
|
+
|
|
14
|
+
$LOAD_PATH.unshift "lib"
|
|
15
|
+
require "itunes_observer"
|
|
16
|
+
|
|
17
|
+
NAME = "itunes-observer"
|
|
18
|
+
AUTHOR = "youpy"
|
|
19
|
+
EMAIL = "youpy@buycheapviagraonlinenow.com"
|
|
20
|
+
DESCRIPTION = ""
|
|
21
|
+
RUBYFORGE_PROJECT = "itunes-observer"
|
|
22
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
|
23
|
+
BIN_FILES = %w( )
|
|
24
|
+
VERS = ITunesObserver::VERSION
|
|
25
|
+
|
|
26
|
+
REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
|
27
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config']
|
|
28
|
+
RDOC_OPTS = [
|
|
29
|
+
'--title', "#{NAME} documentation",
|
|
30
|
+
"--charset", "utf-8",
|
|
31
|
+
"--opname", "index.html",
|
|
32
|
+
"--line-numbers",
|
|
33
|
+
"--main", "README.rdoc",
|
|
34
|
+
"--inline-source",
|
|
35
|
+
]
|
|
36
|
+
|
|
37
|
+
task :default => [:spec]
|
|
38
|
+
task :package => [:clean]
|
|
39
|
+
|
|
40
|
+
Spec::Rake::SpecTask.new do |t|
|
|
41
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
|
42
|
+
t.spec_files = FileList['spec/*_spec.rb']
|
|
43
|
+
t.rcov = true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
spec = Gem::Specification.new do |s|
|
|
47
|
+
s.name = NAME
|
|
48
|
+
s.version = VERS
|
|
49
|
+
s.platform = Gem::Platform::RUBY
|
|
50
|
+
s.has_rdoc = true
|
|
51
|
+
s.extra_rdoc_files = ["README.rdoc", "ChangeLog"]
|
|
52
|
+
s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
|
|
53
|
+
s.summary = DESCRIPTION
|
|
54
|
+
s.description = DESCRIPTION
|
|
55
|
+
s.author = AUTHOR
|
|
56
|
+
s.email = EMAIL
|
|
57
|
+
s.homepage = HOMEPATH
|
|
58
|
+
s.executables = BIN_FILES
|
|
59
|
+
s.rubyforge_project = RUBYFORGE_PROJECT
|
|
60
|
+
s.bindir = "bin"
|
|
61
|
+
s.require_path = "lib"
|
|
62
|
+
s.autorequire = ""
|
|
63
|
+
s.test_files = Dir["test/test_*.rb"]
|
|
64
|
+
|
|
65
|
+
#s.add_dependency('')
|
|
66
|
+
#s.required_ruby_version = '>= 1.8.2'
|
|
67
|
+
|
|
68
|
+
s.files = %w(README.rdoc ChangeLog Rakefile) +
|
|
69
|
+
Dir.glob("{bin,doc,spec,test,lib,templates,generator,extras,website,script}/**/*") +
|
|
70
|
+
Dir.glob("ext/**/*.{h,c,rb}") +
|
|
71
|
+
Dir.glob("examples/**/*.rb") +
|
|
72
|
+
Dir.glob("tools/*.rb")
|
|
73
|
+
|
|
74
|
+
s.extensions = FileList["ext/**/extconf.rb"].to_a
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
Rake::GemPackageTask.new(spec) do |p|
|
|
78
|
+
p.need_tar = true
|
|
79
|
+
p.gem_spec = spec
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
task :install do
|
|
83
|
+
name = "#{NAME}-#{VERS}.gem"
|
|
84
|
+
sh %{rake package}
|
|
85
|
+
sh %{sudo gem install pkg/#{name}}
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
task :uninstall => [:clean] do
|
|
89
|
+
sh %{sudo gem uninstall #{NAME}}
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
Rake::RDocTask.new do |rdoc|
|
|
94
|
+
rdoc.rdoc_dir = 'html'
|
|
95
|
+
rdoc.options += RDOC_OPTS
|
|
96
|
+
rdoc.template = "resh"
|
|
97
|
+
#rdoc.template = "#{ENV['template']}.rb" if ENV['template']
|
|
98
|
+
if ENV['DOC_FILES']
|
|
99
|
+
rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
|
|
100
|
+
else
|
|
101
|
+
rdoc.rdoc_files.include('README.rdoc', 'ChangeLog')
|
|
102
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
|
103
|
+
rdoc.rdoc_files.include('ext/**/*.c')
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
desc "Show information about the gem"
|
|
108
|
+
task :debug_gem do
|
|
109
|
+
puts spec.to_ruby
|
|
110
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'osx/cocoa'
|
|
2
|
+
|
|
3
|
+
class ITunesObserver
|
|
4
|
+
VERSION = '0.0.1'
|
|
5
|
+
|
|
6
|
+
def initialize(&callback)
|
|
7
|
+
observer = Observer.alloc.init
|
|
8
|
+
observer.observe(&callback)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run(stop_after = nil)
|
|
12
|
+
if stop_after
|
|
13
|
+
OSX::NSRunLoop.currentRunLoop.runUntilDate(Time.now + stop_after)
|
|
14
|
+
else
|
|
15
|
+
OSX::NSRunLoop.currentRunLoop.run
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# based on http://blog.8-p.info/articles/2006/12/24/rubycocoa-skype-itunes
|
|
20
|
+
class Observer < OSX::NSObject
|
|
21
|
+
def onPlayerInfo(info)
|
|
22
|
+
result = Result.new(info.userInfo)
|
|
23
|
+
@callback.call(result)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def observe(&callback)
|
|
27
|
+
@callback = callback
|
|
28
|
+
center = OSX::NSDistributedNotificationCenter.defaultCenter
|
|
29
|
+
center.addObserver_selector_name_object_(self,
|
|
30
|
+
'onPlayerInfo:',
|
|
31
|
+
'com.apple.iTunes.playerInfo',
|
|
32
|
+
'com.apple.iTunes.player')
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Result
|
|
37
|
+
def initialize(attributes)
|
|
38
|
+
@attributes = attributes
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def [](key)
|
|
42
|
+
@attributes[key]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'osx/cocoa'
|
|
5
|
+
|
|
6
|
+
include OSX
|
|
7
|
+
OSX.require_framework 'ScriptingBridge'
|
|
8
|
+
|
|
9
|
+
describe ITunesObserver do
|
|
10
|
+
before do
|
|
11
|
+
@itunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
|
|
12
|
+
raise 'iTunes should be running' unless @itunes.isRunning
|
|
13
|
+
@result = nil
|
|
14
|
+
@observer = ITunesObserver.new do |result|
|
|
15
|
+
@result = result
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
@itunes.stop
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
after do
|
|
22
|
+
@itunes.stop
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it "should observe playing" do
|
|
26
|
+
@itunes.playpause
|
|
27
|
+
@observer.run(1)
|
|
28
|
+
@result.should_not be_nil
|
|
29
|
+
@result['Name'].should_not be_nil
|
|
30
|
+
end
|
|
31
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
metadata
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: youpy-itunes-observer
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.1
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- youpy
|
|
8
|
+
autorequire: ""
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
|
|
12
|
+
date: 2009-09-07 00:00:00 -07:00
|
|
13
|
+
default_executable:
|
|
14
|
+
dependencies: []
|
|
15
|
+
|
|
16
|
+
description: ""
|
|
17
|
+
email: youpy@buycheapviagraonlinenow.com
|
|
18
|
+
executables: []
|
|
19
|
+
|
|
20
|
+
extensions: []
|
|
21
|
+
|
|
22
|
+
extra_rdoc_files:
|
|
23
|
+
- README.rdoc
|
|
24
|
+
- ChangeLog
|
|
25
|
+
files:
|
|
26
|
+
- README.rdoc
|
|
27
|
+
- ChangeLog
|
|
28
|
+
- Rakefile
|
|
29
|
+
- spec/itunes_observer_spec.rb
|
|
30
|
+
- spec/spec.opts
|
|
31
|
+
- spec/spec_helper.rb
|
|
32
|
+
- lib/itunes_observer.rb
|
|
33
|
+
has_rdoc: true
|
|
34
|
+
homepage: http://itunes-observer.rubyforge.org
|
|
35
|
+
licenses:
|
|
36
|
+
post_install_message:
|
|
37
|
+
rdoc_options:
|
|
38
|
+
- --title
|
|
39
|
+
- itunes-observer documentation
|
|
40
|
+
- --charset
|
|
41
|
+
- utf-8
|
|
42
|
+
- --opname
|
|
43
|
+
- index.html
|
|
44
|
+
- --line-numbers
|
|
45
|
+
- --main
|
|
46
|
+
- README.rdoc
|
|
47
|
+
- --inline-source
|
|
48
|
+
- --exclude
|
|
49
|
+
- ^(examples|extras)/
|
|
50
|
+
require_paths:
|
|
51
|
+
- lib
|
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
53
|
+
requirements:
|
|
54
|
+
- - ">="
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: "0"
|
|
57
|
+
version:
|
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ">="
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: "0"
|
|
63
|
+
version:
|
|
64
|
+
requirements: []
|
|
65
|
+
|
|
66
|
+
rubyforge_project: itunes-observer
|
|
67
|
+
rubygems_version: 1.3.5
|
|
68
|
+
signing_key:
|
|
69
|
+
specification_version: 2
|
|
70
|
+
summary: ""
|
|
71
|
+
test_files: []
|
|
72
|
+
|