class MikePlayer::Playlist
Attributes
songs[R]
Public Class Methods
new(filename)
click to toggle source
# File lib/mikeplayer/playlist.rb, line 5 def initialize(filename) @filename = filename @songs = [] @length = 0 load_songs @loaded_song_count = self.size end
Public Instance Methods
<<(song)
click to toggle source
# File lib/mikeplayer/playlist.rb, line 15 def <<(song) if ((true == File.file?(song)) && (false == @songs.any? { |s| s.filename == song })) @songs << Song.new(song) @length += @songs.last.length end return self end
add_random(n, directory)
click to toggle source
# File lib/mikeplayer/playlist.rb, line 24 def add_random(n, directory) files = Dir.glob(File.join(directory, "**", "*.mp3"), File::FNM_CASEFOLD) - @songs files.sample(n).each do |file| self << file end return self end
find_song(file, directory)
click to toggle source
# File lib/mikeplayer/playlist.rb, line 34 def find_song(file, directory) if (true == File.file?(file)) self << file else Dir.glob(File.join(directory, "**", "*#{file}*"), File::FNM_CASEFOLD).each do |f| self << f end end return self end
get(i)
click to toggle source
# File lib/mikeplayer/playlist.rb, line 46 def get(i) return @songs[i] end
info()
click to toggle source
# File lib/mikeplayer/playlist.rb, line 66 def info return "#{self.name} loaded #{@loaded_song_count} and added #{self.size - @loaded_song_count} songs with length #{Song.as_duration_str(@length)}" end
name()
click to toggle source
# File lib/mikeplayer/playlist.rb, line 62 def name return File.basename(@filename, Settings::PL_FILE_ENDING) end
save()
click to toggle source
# File lib/mikeplayer/playlist.rb, line 56 def save File.open(@filename, 'w') do |f| f.puts(JSON.pretty_generate(@songs.map {|s| s.to_json })) end end
shuffle!()
click to toggle source
# File lib/mikeplayer/playlist.rb, line 50 def shuffle! @songs.shuffle! return self end
size()
click to toggle source
# File lib/mikeplayer/playlist.rb, line 76 def size return @songs.size end
song_info(i)
click to toggle source
# File lib/mikeplayer/playlist.rb, line 70 def song_info(i) song_i_str = "#{i + 1}".rjust(self.size.to_s.size) return "Playing (#{song_i_str}/#{self.size}): #{get(i).info}".freeze end
Private Instance Methods
load_songs()
click to toggle source
# File lib/mikeplayer/playlist.rb, line 82 def load_songs if File.file?(@filename) JSON.parse(File.read(@filename)).each {|song| self << song} end end