hearken 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.rdoc +11 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +2 -0
- data/hearken.gemspec +2 -1
- data/lib/hearken.rb +3 -1
- data/lib/hearken/cli.rb +13 -15
- data/lib/hearken/command/search.rb +0 -1
- data/lib/hearken/notification/growl_notifier.rb +13 -0
- data/lib/hearken/player.rb +19 -9
- data/lib/hearken/scrobbler.rb +10 -6
- data/lib/hearken/track.rb +4 -3
- data/media/ice_cream.png +0 -0
- metadata +21 -7
- data/lib/hearken/version.rb +0 -3
data/HISTORY.rdoc
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Mark Ryall
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
CHANGED
@@ -20,6 +20,8 @@ Tags are currently extracted using ffmpeg. On mac os x, this can be installed e
|
|
20
20
|
|
21
21
|
brew install ffmpeg
|
22
22
|
|
23
|
+
Growl notification (as new tracks are played) will work but only if 'growlnotify' is detected on the path.
|
24
|
+
|
23
25
|
== Indexing tracks
|
24
26
|
|
25
27
|
hearken index DIRECTORY
|
data/hearken.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require
|
3
|
+
require 'hearken'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "hearken"
|
@@ -29,6 +29,7 @@ EOF
|
|
29
29
|
s.add_dependency 'shell_shock', '~>0'
|
30
30
|
s.add_dependency 'simple_scrobbler', '~> 0'
|
31
31
|
s.add_dependency 'rainbow', '~> 1'
|
32
|
+
s.add_dependency 'ruby-growl', '~> 3.0'
|
32
33
|
|
33
34
|
s.add_development_dependency 'rake', '~>0'
|
34
35
|
s.add_development_dependency 'rspec', '~>2'
|
data/lib/hearken.rb
CHANGED
data/lib/hearken/cli.rb
CHANGED
@@ -1,24 +1,22 @@
|
|
1
1
|
require 'thor'
|
2
2
|
|
3
|
-
require 'hearken
|
3
|
+
require 'hearken'
|
4
4
|
require 'hearken/indexing'
|
5
5
|
require 'hearken/console'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
end
|
7
|
+
class Hearken::Cli < Thor
|
8
|
+
desc 'version', 'Prints the current version'
|
9
|
+
def version
|
10
|
+
puts "Current version is "+Hearken::VERSION
|
11
|
+
end
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
desc 'index DIRECTORY', 'Reindexes a music collection'
|
14
|
+
def index directory
|
15
|
+
Hearken::Indexing::Indexer.new(directory).execute
|
16
|
+
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
end
|
18
|
+
desc 'console', 'Enters console for queuing and playing tracks'
|
19
|
+
def console
|
20
|
+
Hearken::Console.new.push
|
23
21
|
end
|
24
22
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Hearken::Notification
|
2
|
+
end
|
3
|
+
|
4
|
+
class Hearken::Notification::GrowlNotifier
|
5
|
+
def initialize preferences
|
6
|
+
@growlnotify = !`which growlnotify`.chomp.empty?
|
7
|
+
@image_path = File.expand_path File.dirname(__FILE__)+'/../../../media/ice_cream.png'
|
8
|
+
end
|
9
|
+
|
10
|
+
def started track
|
11
|
+
`growlnotify -t "Hearken" --image #{@image_path} -m '#{track.to_short_s}'` if @growlnotify
|
12
|
+
end
|
13
|
+
end
|
data/lib/hearken/player.rb
CHANGED
@@ -2,17 +2,19 @@ require 'splat'
|
|
2
2
|
|
3
3
|
require 'hearken/queue'
|
4
4
|
require 'hearken/scrobbler'
|
5
|
+
require 'hearken/notification/growl_notifier'
|
5
6
|
require 'hearken/library'
|
6
7
|
|
7
8
|
module Hearken
|
8
9
|
class Player
|
9
10
|
include Queue
|
10
11
|
attr_reader :library, :scrobbler
|
11
|
-
attr_accessor :scrobbling, :matches
|
12
12
|
|
13
13
|
def initialize preferences
|
14
14
|
@scrobbler = Scrobbler.new preferences
|
15
|
-
@
|
15
|
+
@scrobbler.enabled = true
|
16
|
+
@growl = Hearken::Notification::GrowlNotifier.new preferences
|
17
|
+
@notifiers = [@scrobbler, @growl]
|
16
18
|
@library = Library.new preferences
|
17
19
|
@library.reload
|
18
20
|
end
|
@@ -41,11 +43,20 @@ module Hearken
|
|
41
43
|
File.open('current_song', 'w') {|f| f.print track.to_yaml }
|
42
44
|
end
|
43
45
|
|
46
|
+
def notify_started track
|
47
|
+
@notifiers.each {|notifier| notifier.started track if notifier.respond_to? :started}
|
48
|
+
end
|
49
|
+
|
50
|
+
def notify_finished track
|
51
|
+
@notifiers.each {|notifier| notifier.finished track if notifier.respond_to? :finished}
|
52
|
+
end
|
53
|
+
|
54
|
+
def scrobbling tf
|
55
|
+
@scrobbler.enabled = tf
|
56
|
+
end
|
57
|
+
|
44
58
|
def start
|
45
|
-
if @pid
|
46
|
-
puts "Already started (pid #{@pid})"
|
47
|
-
return
|
48
|
-
end
|
59
|
+
return if @pid
|
49
60
|
@pid = fork do
|
50
61
|
player_pid = nil
|
51
62
|
Signal.trap('TERM') do
|
@@ -66,15 +77,14 @@ module Hearken
|
|
66
77
|
next
|
67
78
|
end
|
68
79
|
@library.with_track(id) do |track|
|
69
|
-
|
80
|
+
notify_started track
|
70
81
|
register track
|
71
82
|
player_pid = path.to_player
|
72
83
|
Process.wait player_pid
|
73
|
-
|
84
|
+
notify_finished track
|
74
85
|
end
|
75
86
|
end
|
76
87
|
end
|
77
|
-
puts "Started (pid #{@pid})"
|
78
88
|
end
|
79
89
|
|
80
90
|
def stop
|
data/lib/hearken/scrobbler.rb
CHANGED
@@ -8,19 +8,23 @@ module Hearken
|
|
8
8
|
|
9
9
|
def initialize preferences
|
10
10
|
@preferences = preferences
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
end
|
12
|
+
|
13
|
+
def enabled= tf
|
14
|
+
@scrobbler = nil
|
15
|
+
if @preferences['lastfm'] and tf
|
16
|
+
debug "Configuring scrobbler with #{@preferences['lastfm'].inspect}"
|
17
|
+
@scrobbler = SimpleScrobbler.new *%w{api_key secret user session_key}.map{|k| @preferences['lastfm'][k]}
|
14
18
|
end
|
15
19
|
end
|
16
20
|
|
17
|
-
def
|
21
|
+
def finished track
|
18
22
|
return unless @scrobbler
|
19
23
|
debug "Scrobbling to last fm: #{track}"
|
20
24
|
send_to_scrobbler :submit, track
|
21
25
|
end
|
22
26
|
|
23
|
-
def
|
27
|
+
def started track
|
24
28
|
return unless @scrobbler
|
25
29
|
debug "Updating now listening with last fm: #{track}"
|
26
30
|
send_to_scrobbler :now_playing, track
|
@@ -28,7 +32,7 @@ module Hearken
|
|
28
32
|
|
29
33
|
def ask question
|
30
34
|
print question
|
31
|
-
gets.chomp
|
35
|
+
$stdin.gets.chomp
|
32
36
|
end
|
33
37
|
|
34
38
|
def setup
|
data/lib/hearken/track.rb
CHANGED
@@ -21,9 +21,6 @@ class Hearken::Track
|
|
21
21
|
id.to_s 36
|
22
22
|
end
|
23
23
|
|
24
|
-
def duration
|
25
|
-
end
|
26
|
-
|
27
24
|
def search_string
|
28
25
|
"#{self.artist.to_s.downcase}#{self.album.to_s.downcase}#{self.title.to_s.downcase}"
|
29
26
|
end
|
@@ -32,6 +29,10 @@ class Hearken::Track
|
|
32
29
|
"#{my(:search_id,:white)}: #{my(:artist, :yellow)} - #{my(:album,:cyan)} - #{my(:track,:magenta)} #{my(:title,:green)} (#{my(:time,:white)})"
|
33
30
|
end
|
34
31
|
|
32
|
+
def to_short_s
|
33
|
+
"#{track} #{title}\n#{artist}\n#{album}"
|
34
|
+
end
|
35
|
+
|
35
36
|
def my field, colour
|
36
37
|
self.send(field).to_s.foreground(colour)
|
37
38
|
end
|
data/media/ice_cream.png
ADDED
Binary file
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: hearken
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.3
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mark Ryall
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-07-
|
13
|
+
date: 2011-07-06 00:00:00 +10:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -69,27 +69,38 @@ dependencies:
|
|
69
69
|
type: :runtime
|
70
70
|
version_requirements: *id005
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: ruby-growl
|
73
73
|
prerelease: false
|
74
74
|
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "3.0"
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rake
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
75
86
|
none: false
|
76
87
|
requirements:
|
77
88
|
- - ~>
|
78
89
|
- !ruby/object:Gem::Version
|
79
90
|
version: "0"
|
80
91
|
type: :development
|
81
|
-
version_requirements: *
|
92
|
+
version_requirements: *id007
|
82
93
|
- !ruby/object:Gem::Dependency
|
83
94
|
name: rspec
|
84
95
|
prerelease: false
|
85
|
-
requirement: &
|
96
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
86
97
|
none: false
|
87
98
|
requirements:
|
88
99
|
- - ~>
|
89
100
|
- !ruby/object:Gem::Version
|
90
101
|
version: "2"
|
91
102
|
type: :development
|
92
|
-
version_requirements: *
|
103
|
+
version_requirements: *id008
|
93
104
|
description: |
|
94
105
|
A command line tool to enqueue and play music tracks.
|
95
106
|
|
@@ -109,6 +120,8 @@ files:
|
|
109
120
|
- .gitignore
|
110
121
|
- .rvmrc
|
111
122
|
- Gemfile
|
123
|
+
- HISTORY.rdoc
|
124
|
+
- MIT-LICENSE
|
112
125
|
- README.rdoc
|
113
126
|
- Rakefile
|
114
127
|
- bin/hearken
|
@@ -142,6 +155,7 @@ files:
|
|
142
155
|
- lib/hearken/indexing/persistant_traverser.rb
|
143
156
|
- lib/hearken/indexing/persisted_traverser.rb
|
144
157
|
- lib/hearken/library.rb
|
158
|
+
- lib/hearken/notification/growl_notifier.rb
|
145
159
|
- lib/hearken/player.rb
|
146
160
|
- lib/hearken/preferences.rb
|
147
161
|
- lib/hearken/queue.rb
|
@@ -149,8 +163,8 @@ files:
|
|
149
163
|
- lib/hearken/scrobbler.rb
|
150
164
|
- lib/hearken/tagged.rb
|
151
165
|
- lib/hearken/track.rb
|
152
|
-
- lib/hearken/version.rb
|
153
166
|
- media/applause.mp3
|
167
|
+
- media/ice_cream.png
|
154
168
|
- spec/hearken/command/enqueue_spec.rb
|
155
169
|
- spec/hearken/command/list_spec.rb
|
156
170
|
- spec/hearken/command/reload_spec.rb
|
data/lib/hearken/version.rb
DELETED