Class: JimmyJukebox::UserConfig
- Inherits:
-
Object
- Object
- JimmyJukebox::UserConfig
show all
- Extended by:
- Forwardable
- Defined in:
- lib/jimmy_jukebox/user_config.rb
Defined Under Namespace
Classes: FileHoldingDirectoriesNotFoundException
Constant Summary
collapse
- DEFAULT_PLAYLIST_DIR =
File.expand_path(File.join("~",".jimmy_jukebox"))
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of UserConfig.
48
49
50
51
52
53
54
|
# File 'lib/jimmy_jukebox/user_config.rb', line 48
def initialize
self.song_paths = []
self.argv0 = ARGV[0]
set_music_players
generate_directories_list
generate_song_list
end
|
Instance Attribute Details
Returns the value of attribute argv0.
36
37
38
|
# File 'lib/jimmy_jukebox/user_config.rb', line 36
def argv0
@argv0
end
|
#music_directories ⇒ Object
130
131
132
|
# File 'lib/jimmy_jukebox/user_config.rb', line 130
def music_directories
@music_directories ||= []
end
|
#music_player_detector ⇒ Object
Returns the value of attribute music_player_detector.
36
37
38
|
# File 'lib/jimmy_jukebox/user_config.rb', line 36
def music_player_detector
@music_player_detector
end
|
#song_paths ⇒ Object
Returns the value of attribute song_paths.
36
37
38
|
# File 'lib/jimmy_jukebox/user_config.rb', line 36
def song_paths
@song_paths
end
|
Class Method Details
.top_music_dir(save_dir) ⇒ Object
41
42
43
44
45
46
|
# File 'lib/jimmy_jukebox/user_config.rb', line 41
def self.top_music_dir(save_dir)
full_path_name = File.expand_path(save_dir)
home_regexp = /^(\/home\/[^\/]*\/[^\/]*)(\/.*)*$/
full_path_name = full_path_name.match(home_regexp)[1] if full_path_name =~ home_regexp
full_path_name
end
|
Instance Method Details
#add_all_subdirectories ⇒ Object
197
198
199
200
201
202
203
|
# File 'lib/jimmy_jukebox/user_config.rb', line 197
def add_all_subdirectories
new_dirs = []
music_directories.each do |dir|
new_dirs = new_dirs + all_subdirectories(dir)
end
self.music_directories = music_directories + new_dirs
end
|
#all_subdirectories(dir) ⇒ Object
191
192
193
194
195
|
# File 'lib/jimmy_jukebox/user_config.rb', line 191
def all_subdirectories(dir)
Dir.glob(File.join(dir,"**/","*/"))
.delete_if {|dir_name| !File.directory?(dir_name)}
.map { |dir_name| File.expand_path(dir_name) }
end
|
#banjo_dir ⇒ Object
78
79
80
|
# File 'lib/jimmy_jukebox/user_config.rb', line 78
def banjo_dir
root_music_dir + '/BANJO'
end
|
#bluegrass_dir ⇒ Object
82
83
84
|
# File 'lib/jimmy_jukebox/user_config.rb', line 82
def bluegrass_dir
root_music_dir + '/BLUEGRASS'
end
|
#classical_dir ⇒ Object
86
87
88
|
# File 'lib/jimmy_jukebox/user_config.rb', line 86
def classical_dir
root_music_dir + '/CLASSICAL'
end
|
#create_nonexistent_music_directories ⇒ Object
166
167
168
169
170
|
# File 'lib/jimmy_jukebox/user_config.rb', line 166
def create_nonexistent_music_directories
music_directories.each do |md|
FileUtils.mkdir_p(md) unless Dir.exists?(md)
end
end
|
#default_music_dir ⇒ Object
74
75
76
|
# File 'lib/jimmy_jukebox/user_config.rb', line 74
def default_music_dir
File.expand_path(File.join("~","Music"))
end
|
#display_num_songs_message ⇒ Object
220
221
222
223
224
225
226
|
# File 'lib/jimmy_jukebox/user_config.rb', line 220
def display_num_songs_message
if song_paths.length != 1
puts "You currently have #{song_paths.length} matching songs"
else
puts "You currently have 1 matching song"
end
end
|
90
91
92
|
# File 'lib/jimmy_jukebox/user_config.rb', line 90
def folk_dir
root_music_dir + '/FOLK'
end
|
#generate_directories_list ⇒ Object
160
161
162
163
164
|
# File 'lib/jimmy_jukebox/user_config.rb', line 160
def generate_directories_list
set_top_music_directories
create_nonexistent_music_directories
add_all_subdirectories
end
|
#generate_song_list ⇒ Object
205
206
207
208
209
210
211
212
213
214
215
216
217
218
|
# File 'lib/jimmy_jukebox/user_config.rb', line 205
def generate_song_list
music_directories.each do |music_dir|
files = Dir.entries(File.expand_path(music_dir))
if "".respond_to?(:force_encoding) files.delete_if { |f| !f.force_encoding("UTF-8").valid_encoding? } end
files.delete_if { |f| AUDIO_FORMATS.keys.all? { |re| !f.match(re) } }
files.map! { |f| File.expand_path(music_dir) + '/' + f }
files.each { |f| song_paths << f }
end
display_num_songs_message
end
|
#is_a_directory?(whatever) ⇒ Boolean
177
178
179
180
|
# File 'lib/jimmy_jukebox/user_config.rb', line 177
def is_a_directory?(whatever)
return false unless whatever
File.directory?(File.expand_path(whatever))
end
|
#is_a_txt_file?(whatever) ⇒ Boolean
172
173
174
175
|
# File 'lib/jimmy_jukebox/user_config.rb', line 172
def is_a_txt_file?(whatever)
return false unless whatever
whatever.match(/.*\.txt/) ? true : false
end
|
94
95
96
|
# File 'lib/jimmy_jukebox/user_config.rb', line 94
def jazz_dir
root_music_dir + '/JAZZ'
end
|
#load_top_level_directories_from_file ⇒ Object
182
183
184
185
186
187
188
189
|
# File 'lib/jimmy_jukebox/user_config.rb', line 182
def load_top_level_directories_from_file
File.open(@music_directories_file, "r") do |inf|
while (line = inf.gets)
line.strip!
music_directories << File.expand_path(line)
end
end
end
|
108
109
110
111
|
# File 'lib/jimmy_jukebox/user_config.rb', line 108
def no_player_configured
puts "*** YOU CANNOT PLAY MP3S OR OGG FILES -- YOU'LL PROBABLY NEED TO INSTALL AN OGG PLAYER (like ogg123) AND AN MP3 PLAYER (like mpg123) BEFORE USING JIMMYJUKEBOX ***"
exit
end
|
98
99
100
|
# File 'lib/jimmy_jukebox/user_config.rb', line 98
def rock_dir
root_music_dir + '/ROCK'
end
|
#root_music_dir ⇒ Object
70
71
72
|
# File 'lib/jimmy_jukebox/user_config.rb', line 70
def root_music_dir
@root_music_dir || default_music_dir
end
|
#set_music_directories_from_file ⇒ Object
119
120
121
122
123
124
125
126
127
128
|
# File 'lib/jimmy_jukebox/user_config.rb', line 119
def set_music_directories_from_file
if File.exists?(File.expand_path(argv0))
@music_directories_file = File.expand_path(argv0)
elsif File.exists?( File.expand_path( File.join(DEFAULT_PLAYLIST_DIR, argv0) ) )
@music_directories_file = File.expand_path(File.join(DEFAULT_PLAYLIST_DIR, argv0))
else
raise FileHoldingDirectoriesNotFoundException, "Can't find the file #{argv0}"
end
load_top_level_directories_from_file
end
|
#set_music_players ⇒ Object
102
103
104
105
106
|
# File 'lib/jimmy_jukebox/user_config.rb', line 102
def set_music_players
self.music_player_detector = MusicPlayerDetector.new
no_player_configured unless ogg_player || mp3_player
warn_about_partial_functionality if !ogg_player || !mp3_player
end
|
#set_top_music_directories ⇒ Object
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
# File 'lib/jimmy_jukebox/user_config.rb', line 139
def set_top_music_directories
if argv0.nil?
music_directories << root_music_dir
elsif dir = shortcut_to_dir(argv0)
music_directories << dir
elsif ARTISTS.keys.include?(argv0.to_sym)
music_directories << root_music_dir + artist_key_to_subdir_name(argv0.to_sym)
elsif is_a_txt_file?(argv0)
set_music_directories_from_file
elsif is_a_directory?(argv0)
music_directories << File.expand_path(argv0)
else
music_directories << root_music_dir
end
end
|
#shortcut_to_dir(user_input) ⇒ Object
134
135
136
137
|
# File 'lib/jimmy_jukebox/user_config.rb', line 134
def shortcut_to_dir(user_input)
reg_ex = shortcuts.keys.detect { |re| re =~ user_input }
reg_ex ? shortcuts[reg_ex] : nil
end
|
#shortcuts ⇒ Object
56
57
58
59
60
61
62
63
64
65
66
67
68
|
# File 'lib/jimmy_jukebox/user_config.rb', line 56
def shortcuts
{ /^banjo$/i => banjo_dir,
/^b$/i => bluegrass_dir,
/^bluegrass$/i => bluegrass_dir,
/^c$/i => classical_dir,
/^classical$/i => classical_dir,
/^f$/i => folk_dir,
/^folk$/i => folk_dir,
/^j$/i => jazz_dir,
/^jazz$/i => jazz_dir,
/^r$/i => rock_dir,
/^rock$/i => rock_dir }
end
|
#undownloaded_songs ⇒ Object
228
229
230
231
232
233
234
235
236
|
# File 'lib/jimmy_jukebox/user_config.rb', line 228
def undownloaded_songs
result = {}
JimmyJukebox::SongLoader.new(self).all_downloadable_songs.each do |url, artist|
save_path = root_music_dir + artist_name_to_subdir_name(artist[:name]) + '/' + File.basename(url)
next if song_paths.include?(save_path)
result[url] = artist
end
result
end
|
#warn_about_partial_functionality ⇒ Object
113
114
115
116
117
|
# File 'lib/jimmy_jukebox/user_config.rb', line 113
def warn_about_partial_functionality
puts "*** YOU CANNOT PLAY MP3S -- YOU MIGHT WANT TO INSTALL AN MP3 PLAYER (like mpg123 OR mpg321) ***" if !mp3_player
puts "*** YOU CANNOT PLAY OGG FILES -- YOU MIGHT WANT TO INSTALL AN OGG PLAYER (like ogg123) ***" if !ogg_player
puts "*** YOU CANNOT PLAY WAV FILES -- YOU MIGHT WANT TO INSTALL A WAV PLAYER (like vlc) ***" if !wav_player
end
|