jimmy_jukebox 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
data/bin/jplay_jukebox CHANGED
@@ -1,15 +1,10 @@
1
1
  #!/usr/bin/env jruby
2
2
 
3
- require 'readline'
4
-
5
3
  begin
6
- #Gem::Specification.find_by_name('spoon') # Gem.available?('spoon')
7
- #gem 'spoon'
8
- if (defined?(JRUBY_VERSION) || RUBY_PLATFORM == 'java')
9
- require 'rubygems'
10
- require 'spoon'
11
- end
12
- rescue LoadError
4
+ require 'readline'
5
+ require 'spoon'
6
+ rescue LoadError => e
7
+ raise unless e.message =~ /readline|spoon/
13
8
  puts "*** You must install the 'spoon' gem to use JimmyJukebox on JRuby ***"
14
9
  exit
15
10
  end
data/bin/play_jukebox CHANGED
@@ -1,5 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
- require 'readline'
2
+
3
+ begin
4
+ require 'readline'
5
+ require 'posix/spawn'
6
+ rescue LoadError => e
7
+ raise unless e.message =~ /readline|posix|spawn/
8
+ puts "*** You must install the 'rb-readline' and 'posix_spawn' gems to use JimmyJukebox in Ruby ***"
9
+ exit
10
+ end
3
11
 
4
12
  lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
5
13
  $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
@@ -1,7 +1,7 @@
1
1
  lib = File.expand_path(File.dirname(__FILE__) + '/..')
2
2
  $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
3
3
  require 'jimmy_jukebox/song_loader'
4
- include JimmyJukebox
4
+ include SongLoader
5
5
 
6
6
  require 'jimmy_jukebox/artists'
7
7
  include Artists
@@ -35,14 +35,6 @@ module JimmyJukebox
35
35
  `kill -s CONT #{@playing_pid}` if @playing_pid
36
36
  end
37
37
 
38
- def delete
39
- # without temp var, next song could start playing
40
- # in another thread and wrong file could be deleted
41
- file_to_delete = @music_file
42
- terminate
43
- File.delete(file_to_delete)
44
- end
45
-
46
38
  def terminate
47
39
  @paused = false
48
40
  #`killall #{@player}`
@@ -73,8 +65,9 @@ module JimmyJukebox
73
65
  def play_with_player
74
66
  puts "Press Ctrl-C to stop the music and exit this program"
75
67
  puts "Now playing '#{@music_file}'"
76
- puts "#{@player} \"#{File.expand_path(@music_file)}\""
77
- system_yield_pid(@player, File.expand_path(@music_file)) do |pid|
68
+ command = @player
69
+ arg = File.expand_path(@music_file)
70
+ system_yield_pid(command,arg) do |pid|
78
71
  @playing_pid = pid
79
72
  end
80
73
  end
@@ -82,16 +75,19 @@ module JimmyJukebox
82
75
  end
83
76
 
84
77
  # make system call and get pid so you can terminate process
85
- def system_yield_pid(player, filename)
78
+ def system_yield_pid(command,arg)
86
79
  # would like to use Process.respond_to?(:fork) but JRuby mistakenly returns true
87
80
  if (defined?(JRUBY_VERSION) || RUBY_PLATFORM == 'java')
88
- pid = Spoon.spawnp("#{player}", "#{filename}")
81
+ pid = Spoon.spawnp(command,arg)
82
+ Process.waitpid(pid) # Waits for a child process to exit, returns its process id, and sets $? to a Process::Status object
89
83
  else
90
84
  begin
91
- pid = fork do # creates and runs block in subprocess (which will terminate with status 0), capture subprocess pid
92
- exec(player,filename) # replaces current process with system call
93
- exit! 127 # exit process and return exit status 127; should never be reached
94
- end
85
+ pid = POSIX::Spawn::spawn(command + ' ' + arg)
86
+ stat = Process::waitpid(pid)
87
+ #pid = fork do # creates and runs block in subprocess (which will terminate with status 0), capture subprocess pid
88
+ # exec(command) # replaces current process with system call
89
+ # exit! 127 # exit process and return exit status 127; should never be reached
90
+ #end
95
91
  rescue NotImplementedError
96
92
  raise "*** fork()...exec() not supported ***"
97
93
  end
@@ -104,7 +100,6 @@ module JimmyJukebox
104
100
  # puts "No process id (pid)!"
105
101
  # raise "@current_song: #{Jukebox.current_song.inspect}"
106
102
  #end
107
- Process.waitpid(pid) # Waits for a child process to exit, returns its process id, and sets $? to a Process::Status object
108
103
  $? # return Process::Status object with instance methods .stopped?, .exited?, .exitstatus; see: http://www.ruby-doc.org/core/classes/Process/Status.html
109
104
  end
110
105
 
@@ -18,23 +18,23 @@ module JimmyJukebox
18
18
 
19
19
  module SongLoader
20
20
 
21
- @user_config = UserConfig.new
22
21
  SUPPORTED_MUSIC_TYPES = /\.mp3$|\.ogg$/i
23
22
 
24
23
  @last_top_dir = nil # enables returning previous result if @last_top_dir == top_dir
24
+
25
25
  @user_config = UserConfig.new
26
26
 
27
- def self.define_artist(name)
27
+ def self.define_artist(name,user_config)
28
28
  metaclass.instance_eval do
29
29
  define_method(name) do
30
- save_dir = @user_config.default_music_dir + value_to_subdir_name(name)
30
+ save_dir = user_config.default_music_dir + value_to_subdir_name(name)
31
31
  songs = YAML::load_file(File.dirname(__FILE__) + "/songs/#{value_to_yaml_file(name)}")
32
32
  download_songs(songs, save_dir)
33
33
  end
34
34
  end
35
35
  end
36
36
 
37
- JAZZ_ARTISTS.values.each { |v| define_artist v.to_sym }
37
+ JAZZ_ARTISTS.values.each { |v| define_artist v.to_sym, @user_config }
38
38
 
39
39
  def self.sample(num_songs)
40
40
  # create array of all possible songs
@@ -2,6 +2,8 @@ module JimmyJukebox
2
2
 
3
3
  class UserConfig
4
4
 
5
+ require 'fileutils'
6
+
5
7
  require 'jimmy_jukebox/artists'
6
8
  include Artists
7
9
 
@@ -17,15 +19,10 @@ module JimmyJukebox
17
19
  end
18
20
 
19
21
  def initialize
20
- #configure_preferences
21
22
  set_music_players
22
23
  generate_directories_list
23
24
  generate_song_list
24
- end
25
-
26
- #def configure_preferences
27
- # File.exists?(File.join("~",".jimmy_jukebox","configuration"))
28
- #end
25
+ end
29
26
 
30
27
  def default_music_dir
31
28
  File.expand_path(File.join("~","Music"))
@@ -150,9 +147,16 @@ module JimmyJukebox
150
147
  else
151
148
  @music_directories << default_music_dir
152
149
  end
150
+ create_nonexistent_music_directories
153
151
  add_all_subdirectories
154
152
  end
155
153
 
154
+ def create_nonexistent_music_directories
155
+ @music_directories.each do |md|
156
+ FileUtils.mkdir_p(md) unless Dir.exists?(md)
157
+ end
158
+ end
159
+
156
160
  def is_a_txt_file?(whatever)
157
161
  return false unless whatever
158
162
  whatever.match(/.*\.txt/) ? true : false
@@ -192,11 +196,11 @@ module JimmyJukebox
192
196
  files.map! { |f| File.expand_path(music_dir) + '/' + f }
193
197
  @songs = @songs + files
194
198
  end
195
- raise "JimmyJukebox could not find any songs" unless @songs.length > 0
199
+ puts "WARNING: JimmyJukebox could not find any songs" unless @songs.length > 0
196
200
  #songs = ["~/Music/Artie_Shaw/Georgia On My Mind 1941.mp3",
197
201
  # "~/Music/Jelly_Roll_Morton/High Society 1939.mp3"]
198
202
  end
199
203
 
200
204
  end
201
205
 
202
- end
206
+ end
@@ -1,3 +1,5 @@
1
+ require 'readline'
2
+
1
3
  jj = Jukebox
2
4
 
3
5
  play_loop_thread = Thread.new do
@@ -1,3 +1,3 @@
1
1
  module JimmyJukebox
2
- VERSION = '0.3.6'
2
+ VERSION = '0.3.7'
3
3
  end
metadata CHANGED
@@ -1,198 +1,195 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jimmy_jukebox
3
- version: !ruby/object:Gem::Version
4
- hash: 31
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.7
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 3
9
- - 6
10
- version: 0.3.6
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - James Lavin
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-09-02 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-10-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rspec
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
32
22
  type: :development
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rspec-core
36
23
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
38
25
  none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 3
43
- segments:
44
- - 0
45
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec-core
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
46
38
  type: :development
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: rspec-mocks
50
39
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
52
41
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- hash: 3
57
- segments:
58
- - 0
59
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-mocks
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
60
54
  type: :development
61
- version_requirements: *id003
62
- - !ruby/object:Gem::Dependency
63
- name: rspec-expectations
64
55
  prerelease: false
65
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: rspec-expectations
64
+ requirement: !ruby/object:Gem::Requirement
66
65
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- hash: 3
71
- segments:
72
- - 0
73
- version: "0"
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
74
70
  type: :development
75
- version_requirements: *id004
76
- - !ruby/object:Gem::Dependency
77
- name: fakefs
78
71
  prerelease: false
79
- requirement: &id005 !ruby/object:Gem::Requirement
72
+ version_requirements: !ruby/object:Gem::Requirement
80
73
  none: false
81
- requirements:
82
- - - ">="
83
- - !ruby/object:Gem::Version
84
- hash: 3
85
- segments:
86
- - 0
87
- version: "0"
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: fakefs
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
88
86
  type: :development
89
- version_requirements: *id005
90
- - !ruby/object:Gem::Dependency
91
- name: fakeweb
92
87
  prerelease: false
93
- requirement: &id006 !ruby/object:Gem::Requirement
88
+ version_requirements: !ruby/object:Gem::Requirement
94
89
  none: false
95
- requirements:
96
- - - ">="
97
- - !ruby/object:Gem::Version
98
- hash: 3
99
- segments:
100
- - 0
101
- version: "0"
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: fakeweb
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
102
  type: :development
103
- version_requirements: *id006
104
- description: jimmy_jukebox plays random MP3 & OGG songs under a directory (or set of directories) and can download music
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description: jimmy_jukebox plays random MP3 & OGG songs under a directory (or set
111
+ of directories) and can download music
105
112
  email: james@jameslavin.com
106
- executables:
113
+ executables:
107
114
  - play_jukebox
108
115
  - load_jukebox
109
116
  - jplay_jukebox
110
117
  - jload_jukebox
111
118
  extensions: []
112
-
113
119
  extra_rdoc_files: []
114
-
115
- files:
120
+ files:
116
121
  - roadmap.txt
117
122
  - LICENSE.txt
118
- - lib/jimmy_jukebox/load_jukebox_code.rb
119
- - lib/jimmy_jukebox/jukebox.rb
120
- - lib/jimmy_jukebox/song_loader.rb
121
- - lib/jimmy_jukebox/user_config.rb
123
+ - lib/jimmy_jukebox.rb
122
124
  - lib/jimmy_jukebox/version.rb
123
- - lib/jimmy_jukebox/song.rb
124
125
  - lib/jimmy_jukebox/artists.rb
126
+ - lib/jimmy_jukebox/song.rb
127
+ - lib/jimmy_jukebox/jukebox.rb
128
+ - lib/jimmy_jukebox/user_config.rb
125
129
  - lib/jimmy_jukebox/user_interface.rb
126
- - lib/jimmy_jukebox.rb
127
- - lib/jimmy_jukebox/songs/BennieMoten.yml
128
- - lib/jimmy_jukebox/songs/MilesDavis.yml
129
- - lib/jimmy_jukebox/songs/BixBeiderbecke.yml
130
- - lib/jimmy_jukebox/songs/LionelHampton.yml
131
- - lib/jimmy_jukebox/songs/CountBasie.yml
132
- - lib/jimmy_jukebox/songs/DizzyGillespie.yml
133
- - lib/jimmy_jukebox/songs/DjangoReinhardt.yml
134
- - lib/jimmy_jukebox/songs/LouisArmstrong.yml
135
- - lib/jimmy_jukebox/songs/JellyRollMorton.yml
136
- - lib/jimmy_jukebox/songs/CharlieChristian.yml
130
+ - lib/jimmy_jukebox/song_loader.rb
131
+ - lib/jimmy_jukebox/load_jukebox_code.rb
137
132
  - lib/jimmy_jukebox/songs/BillieHoliday.yml
138
- - lib/jimmy_jukebox/songs/ArtTatum.yml
139
133
  - lib/jimmy_jukebox/songs/CharlieParker.yml
134
+ - lib/jimmy_jukebox/songs/CharlieChristian.yml
135
+ - lib/jimmy_jukebox/songs/BennieMoten.yml
136
+ - lib/jimmy_jukebox/songs/FletcherHenderson.yml
137
+ - lib/jimmy_jukebox/songs/ColemanHawkins.yml
140
138
  - lib/jimmy_jukebox/songs/KingOliver.yml
141
139
  - lib/jimmy_jukebox/songs/OriginalDixielandJazzBand.yml
142
- - lib/jimmy_jukebox/songs/EarlHines.yml
143
- - lib/jimmy_jukebox/songs/BennyGoodman.yml
144
- - lib/jimmy_jukebox/songs/ArtieShaw.yml
145
- - lib/jimmy_jukebox/songs/ColemanHawkins.yml
146
- - lib/jimmy_jukebox/songs/JamesPJohnson.yml
140
+ - lib/jimmy_jukebox/songs/LouisArmstrong.yml
141
+ - lib/jimmy_jukebox/songs/DjangoReinhardt.yml
147
142
  - lib/jimmy_jukebox/songs/RedNorvo.yml
143
+ - lib/jimmy_jukebox/songs/LionelHampton.yml
144
+ - lib/jimmy_jukebox/songs/ArtTatum.yml
145
+ - lib/jimmy_jukebox/songs/BixBeiderbecke.yml
146
+ - lib/jimmy_jukebox/songs/ArtieShaw.yml
147
+ - lib/jimmy_jukebox/songs/MilesDavis.yml
148
+ - lib/jimmy_jukebox/songs/DizzyGillespie.yml
148
149
  - lib/jimmy_jukebox/songs/DukeEllington.yml
149
- - lib/jimmy_jukebox/songs/FletcherHenderson.yml
150
+ - lib/jimmy_jukebox/songs/BennyGoodman.yml
151
+ - lib/jimmy_jukebox/songs/CountBasie.yml
150
152
  - lib/jimmy_jukebox/songs/SidneyBechet.yml
151
- - spec/spec_helper.rb
152
- - spec/user_config_spec.rb
153
+ - lib/jimmy_jukebox/songs/JamesPJohnson.yml
154
+ - lib/jimmy_jukebox/songs/JellyRollMorton.yml
155
+ - lib/jimmy_jukebox/songs/EarlHines.yml
153
156
  - spec/jimmy_jukebox_spec.rb
154
157
  - spec/song_loader_spec.rb
158
+ - spec/user_config_spec.rb
155
159
  - spec/song_spec.rb
160
+ - spec/spec_helper.rb
156
161
  - bin/play_jukebox
157
162
  - bin/load_jukebox
158
163
  - bin/jplay_jukebox
159
164
  - bin/jload_jukebox
160
165
  homepage: https://github.com/JamesLavin/jimmy_jukebox
161
166
  licenses: []
162
-
163
- post_install_message:
167
+ post_install_message: I really hope you enjoy the great jazz downloadable using this
168
+ gem!
164
169
  rdoc_options: []
165
-
166
- require_paths:
170
+ require_paths:
167
171
  - lib
168
- required_ruby_version: !ruby/object:Gem::Requirement
172
+ required_ruby_version: !ruby/object:Gem::Requirement
169
173
  none: false
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- hash: 3
174
- segments:
175
- - 0
176
- version: "0"
177
- required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ! '>='
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
178
179
  none: false
179
- requirements:
180
- - - ">="
181
- - !ruby/object:Gem::Version
182
- hash: 3
183
- segments:
184
- - 0
185
- version: "0"
186
- requirements:
187
- - spoon gem (JRuby only)
180
+ requirements:
181
+ - - ! '>='
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
188
185
  rubyforge_project: jimmy_jukebox
189
- rubygems_version: 1.8.7
186
+ rubygems_version: 1.8.23
190
187
  signing_key:
191
188
  specification_version: 3
192
189
  summary: plays your MP3 & OGG files and lets you easily download music
193
- test_files:
194
- - spec/spec_helper.rb
195
- - spec/user_config_spec.rb
190
+ test_files:
196
191
  - spec/jimmy_jukebox_spec.rb
197
192
  - spec/song_loader_spec.rb
193
+ - spec/user_config_spec.rb
198
194
  - spec/song_spec.rb
195
+ - spec/spec_helper.rb