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