jimmy_jukebox 0.3.6 → 0.3.7

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/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