dhun 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- data/FIX.md +3 -1
- data/README.md +38 -7
- data/dhun.gemspec +2 -2
- data/lib/dhun.rb +1 -1
- data/lib/dhun/controller.rb +27 -11
- data/lib/dhun/handler.rb +15 -6
- data/lib/dhun/player.rb +26 -7
- data/lib/dhun/runner.rb +1 -1
- metadata +2 -2
data/FIX.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
## Fixes/Improvements required
|
2
2
|
|
3
3
|
* Refactor multiple calls to result.to_json
|
4
|
-
* Refactor handler calls by converting it from module to subclass of EventMachine::Connection object
|
4
|
+
* Refactor handler calls by converting it from module to subclass of EventMachine::Connection object
|
5
|
+
* Put querying code in play and enqueue methods inside the player
|
6
|
+
* Clean up parser to avoid any SQL-injection style errors in args
|
data/README.md
CHANGED
@@ -76,6 +76,13 @@ your queue. To append files to queue, use `enqueue`.
|
|
76
76
|
/Users/deepak/Music/iTunes/iTunes Media/Music/Edward Sharpe & The Magnetic Zeros/Here Comes/01 40 Day Dream.mp3
|
77
77
|
/Users/deepak/Music/iTunes/iTunes Media/Music/Edward Sharpe & The Magnetic Zeros/Here Comes/02 Janglin.mp3
|
78
78
|
/Users/deepak/Music/iTunes/iTunes Media/Music/Edward Sharpe & The Magnetic Zeros/Here Comes/03 Carries On.mp3
|
79
|
+
|
80
|
+
Enqueuing more files.
|
81
|
+
|
82
|
+
$ dhun enqueue chup
|
83
|
+
1 files queued for playing.
|
84
|
+
/Users/deepak/Dropbox/shared/music/Coke Studio/Chup.mp3
|
85
|
+
|
79
86
|
|
80
87
|
### Controlling Playback
|
81
88
|
|
@@ -94,6 +101,27 @@ Skipping to next file
|
|
94
101
|
$ dhun next
|
95
102
|
Dhun is playing /Users/deepak/Music/iTunes/iTunes Media/Music/Edward Sharpe & The Magnetic Zeros/Here Comes/03 Carries On.mp3
|
96
103
|
|
104
|
+
You can use a numeric argument to specify the number of tracks to skip ahead,
|
105
|
+
like `dhun next 2`.
|
106
|
+
|
107
|
+
Skipping to previous file in history.
|
108
|
+
|
109
|
+
$ dhun prev
|
110
|
+
Dhun is playing /Users/deepak/Music/iTunes/iTunes Media/Music/Edward Sharpe & The Magnetic Zeros/Here Comes/02 Janglin.mp3
|
111
|
+
|
112
|
+
You can use a numeric argument to specify the number of tracks to skip ahead,
|
113
|
+
like `dhun prev 2`.
|
114
|
+
|
115
|
+
Shuffling the queue
|
116
|
+
|
117
|
+
$ dhun shuffle
|
118
|
+
Queue is shuffled
|
119
|
+
/Users/deepak/Dropbox/shared/music/3 idiots/35634_Give Me Some Sunshine.mp3
|
120
|
+
/Users/deepak/Dropbox/shared/music/Aao Wish Karen/35612_Kuch Aisa.mp3
|
121
|
+
/Users/deepak/Dropbox/shared/music/Coke Studio/Jo-Meray.mp3
|
122
|
+
|
123
|
+
### Other commands
|
124
|
+
|
97
125
|
Status
|
98
126
|
|
99
127
|
$ dhun status
|
@@ -108,11 +136,13 @@ Status
|
|
108
136
|
/Users/deepak/Dropbox/shared/music/Here Comes/01 - 40 Day Dream.mp3
|
109
137
|
/Users/deepak/Dropbox/shared/music/Here Comes/03 - Carries On.mp3
|
110
138
|
|
111
|
-
|
139
|
+
History
|
112
140
|
|
113
|
-
$ dhun
|
114
|
-
|
115
|
-
/Users/deepak/Dropbox/shared/music/Coke Studio/
|
141
|
+
$ dhun history
|
142
|
+
3 files in history
|
143
|
+
/Users/deepak/Dropbox/shared/music/Coke Studio/Bari-Barsi.mp3
|
144
|
+
/Users/deepak/Dropbox/shared/music/Coke Studio/Aankhon-Kay-Sagar.mp3
|
145
|
+
/Users/deepak/Dropbox/shared/music/Coke Studio/Paimona.mp3
|
116
146
|
|
117
147
|
### Stopping Dhun
|
118
148
|
|
@@ -122,10 +152,11 @@ This will exit the process.
|
|
122
152
|
|
123
153
|
## Coming Soon
|
124
154
|
|
125
|
-
|
155
|
+
There are some features planned in the short run. Please file an issue with a
|
156
|
+
feature request, if you have one.
|
126
157
|
|
127
|
-
*
|
128
|
-
*
|
158
|
+
* Saving/Loading playlists
|
159
|
+
* Growl Notifications using `growlnotify`
|
129
160
|
|
130
161
|
And someday..
|
131
162
|
|
data/dhun.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'dhun'
|
3
|
-
s.version = '0.5.
|
3
|
+
s.version = '0.5.6'
|
4
4
|
s.summary = "Minimalist music player for OS X"
|
5
|
-
s.date = '2009-12-
|
5
|
+
s.date = '2009-12-18'
|
6
6
|
s.email = 'deepak.jois@gmail.com'
|
7
7
|
s.homepage = 'http://github.com/deepakjois/dhun'
|
8
8
|
s.has_rdoc = false
|
data/lib/dhun.rb
CHANGED
data/lib/dhun/controller.rb
CHANGED
@@ -3,7 +3,7 @@ module Dhun
|
|
3
3
|
class Controller
|
4
4
|
|
5
5
|
attr_accessor :options,:logger
|
6
|
-
|
6
|
+
|
7
7
|
def initialize(options)
|
8
8
|
@options = options
|
9
9
|
@logger = Logger.instance
|
@@ -17,11 +17,11 @@ module Dhun
|
|
17
17
|
server.start
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def stop
|
22
22
|
send_command("stop")
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def query(*args)
|
26
26
|
abort_if_empty_args(args)
|
27
27
|
q = Query.new(args)
|
@@ -71,9 +71,9 @@ module Dhun
|
|
71
71
|
now_playing = resp[:now_playing]
|
72
72
|
queue = resp[:queue]
|
73
73
|
puts "Now playing #{now_playing}" if now_playing
|
74
|
-
if queue.empty?
|
75
|
-
puts "Queue is empty"
|
76
|
-
else
|
74
|
+
if queue.empty?
|
75
|
+
puts "Queue is empty"
|
76
|
+
else
|
77
77
|
print_list(queue)
|
78
78
|
end
|
79
79
|
end
|
@@ -86,11 +86,27 @@ module Dhun
|
|
86
86
|
print_list(resp[:history]) unless resp[:history].empty?
|
87
87
|
end
|
88
88
|
|
89
|
-
def next(
|
90
|
-
|
89
|
+
def next(skip_length=1)
|
90
|
+
begin
|
91
|
+
skip_length = Integer(skip_length)
|
92
|
+
rescue ArgumentError => ex # Not a valid integer
|
93
|
+
abort ex.message
|
94
|
+
end
|
95
|
+
resp = get_json_response("next",[skip_length])
|
91
96
|
puts resp[:message] if resp
|
92
97
|
end
|
93
98
|
|
99
|
+
def prev(skip_length=1)
|
100
|
+
begin
|
101
|
+
skip_length = Integer(skip_length)
|
102
|
+
rescue ArgumentError => ex # Not a valid integer
|
103
|
+
abort ex.message
|
104
|
+
end
|
105
|
+
resp = get_json_response("prev",[skip_length])
|
106
|
+
puts resp[:message] if resp
|
107
|
+
end
|
108
|
+
|
109
|
+
|
94
110
|
def pause
|
95
111
|
resp = get_json_response("pause")
|
96
112
|
puts resp[:message] if resp
|
@@ -123,10 +139,10 @@ module Dhun
|
|
123
139
|
end
|
124
140
|
|
125
141
|
def get_json_response(command,args=[])
|
126
|
-
begin
|
142
|
+
begin
|
127
143
|
resp = send_command(command,args)
|
128
144
|
return Result.from_json_str(resp)
|
129
|
-
rescue
|
145
|
+
rescue
|
130
146
|
puts "Invalid Response From Server"
|
131
147
|
logger.debug $!
|
132
148
|
return nil
|
@@ -134,7 +150,7 @@ module Dhun
|
|
134
150
|
end
|
135
151
|
|
136
152
|
def abort_if_empty_args(args)
|
137
|
-
abort "You must pass in atleast one argument" if args.empty?
|
153
|
+
abort "You must pass in atleast one argument" if args.empty?
|
138
154
|
end
|
139
155
|
|
140
156
|
def print_list(list)
|
data/lib/dhun/handler.rb
CHANGED
@@ -50,7 +50,7 @@ module Dhun
|
|
50
50
|
status_msg = case @player.status
|
51
51
|
when :playing then "Dhun is running"
|
52
52
|
when :paused then "Dhun is paused"
|
53
|
-
when :stopped then "Dhun
|
53
|
+
when :stopped then "Dhun has stopped"
|
54
54
|
end
|
55
55
|
now_playing = @player.current
|
56
56
|
queue = @player.queue
|
@@ -65,10 +65,19 @@ module Dhun
|
|
65
65
|
result.to_json
|
66
66
|
end
|
67
67
|
|
68
|
-
def next(
|
68
|
+
def next(skip_length=1)
|
69
69
|
@player = Player.instance
|
70
|
-
next_track = @player.next
|
71
|
-
|
70
|
+
next_track = @player.next skip_length
|
71
|
+
msg = next_track ? "Dhun is playing #{next_track}" : "Not enough tracks in queue"
|
72
|
+
result = Result.new :success, msg
|
73
|
+
return result.to_json
|
74
|
+
end
|
75
|
+
|
76
|
+
def prev(skip_length=1)
|
77
|
+
@player = Player.instance
|
78
|
+
prev_track = @player.prev skip_length
|
79
|
+
msg = prev_track ? "Dhun is playing #{prev_track}" : "Not enough tracks in history"
|
80
|
+
result = Result.new :success, msg
|
72
81
|
return result.to_json
|
73
82
|
end
|
74
83
|
|
@@ -79,7 +88,7 @@ module Dhun
|
|
79
88
|
when :paused
|
80
89
|
result = Result.new :success, "Dhun is paused at #{@player.current}"
|
81
90
|
when :stopped
|
82
|
-
result = Result.new :error, "Dhun
|
91
|
+
result = Result.new :error, "Dhun has already stopped"
|
83
92
|
end
|
84
93
|
return result.to_json
|
85
94
|
end
|
@@ -91,7 +100,7 @@ module Dhun
|
|
91
100
|
when :playing
|
92
101
|
result = Result.new :success, "Dhun is playing #{@player.current}"
|
93
102
|
when :stopped
|
94
|
-
result = Result.new :error, "Dhun
|
103
|
+
result = Result.new :error, "Dhun has already stopped"
|
95
104
|
end
|
96
105
|
return result.to_json
|
97
106
|
end
|
data/lib/dhun/player.rb
CHANGED
@@ -23,7 +23,7 @@ module Dhun
|
|
23
23
|
@queue.clear
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
|
27
27
|
def play_files(files)
|
28
28
|
if files.empty?
|
29
29
|
logger.log "Empty Queue"
|
@@ -44,14 +44,13 @@ module Dhun
|
|
44
44
|
return unless self.status == :stopped
|
45
45
|
@status = :playing
|
46
46
|
@player_thread = Thread.new do
|
47
|
-
while @status == :playing and !queue.empty?
|
47
|
+
while @status == :playing and !queue.empty?
|
48
48
|
@current = @queue.shift
|
49
49
|
logger.log "Playing #{@current}"
|
50
50
|
DhunExt.play_file @current
|
51
51
|
@history.unshift @current
|
52
52
|
end
|
53
53
|
@status = :stopped
|
54
|
-
logger.log "Finished playing #{@current}"
|
55
54
|
@current = nil
|
56
55
|
end
|
57
56
|
end
|
@@ -78,14 +77,34 @@ module Dhun
|
|
78
77
|
logger.debug "Stopped"
|
79
78
|
end
|
80
79
|
|
81
|
-
def next
|
80
|
+
def next(skip_length = 1)
|
82
81
|
logger.debug "Switching to next"
|
83
|
-
|
84
|
-
|
85
|
-
|
82
|
+
unless @queue.size < skip_length
|
83
|
+
stop # stops current track
|
84
|
+
@queue.shift skip_length-1 # Remove skip_length-1 tracks
|
85
|
+
next_track = @queue.first
|
86
|
+
play # start playing with the next track
|
87
|
+
end
|
86
88
|
return next_track
|
87
89
|
end
|
88
90
|
|
91
|
+
def prev(skip_length = 1)
|
92
|
+
logger.debug "Switching to prev"
|
93
|
+
unless @history.size < skip_length
|
94
|
+
unless @status == :stopped
|
95
|
+
stop
|
96
|
+
# history has increased by one
|
97
|
+
skip_length = skip_length + 1
|
98
|
+
end
|
99
|
+
tracks = @history.shift skip_length
|
100
|
+
logger.debug tracks
|
101
|
+
tracks.each { |t| @queue.unshift t }
|
102
|
+
prev_track = @queue.first
|
103
|
+
play # start playing with the next track
|
104
|
+
end
|
105
|
+
return prev_track
|
106
|
+
end
|
107
|
+
|
89
108
|
def shuffle
|
90
109
|
return if @queue.empty?
|
91
110
|
s = @queue.size
|
data/lib/dhun/runner.rb
CHANGED
@@ -5,7 +5,7 @@ module Dhun
|
|
5
5
|
# Heavily lifted from Thin codebase
|
6
6
|
class Runner
|
7
7
|
COMMANDS = %w(start query)
|
8
|
-
CLIENT_COMMANDS = %w(stop play pause resume next enqueue status shuffle history)
|
8
|
+
CLIENT_COMMANDS = %w(stop play pause resume next prev enqueue status shuffle history)
|
9
9
|
# Parsed options
|
10
10
|
attr_accessor :options
|
11
11
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dhun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Deepak Jois
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-18 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|