class XiamiRadio::Player

There is a player as you saw

Attributes

next_track[R]
radio[R]
track[R]

Public Class Methods

new(radio:, _playlist: nil) click to toggle source
# File lib/xiami_radio/player.rb, line 9
def initialize(radio:, _playlist: nil)
  @radio = radio
  @player = Audite.new
  @view = View::Player.new

  @player.events.on :position_change, &method(:position_change)
  @player.events.on :complete, &method(:complete)
  @view.listen_on self

  trap(:SIGUSR1) { self.next }
  trap(:SIGUSR2) do
    File.open(XiamiRadio.track_info_swap, 'w') do |f|
      f.puts "#{self.track.title} - #{self.track.artist} - #{self.track.album_name}"
    end
  end
end

Private Class Methods

play(radio) click to toggle source
# File lib/xiami_radio/player.rb, line 81
def self.play(radio)
  player = new radio: radio
  player.play
  player
end

Public Instance Methods

forward() click to toggle source
# File lib/xiami_radio/player.rb, line 49
def forward
  @player.forward
end
next() click to toggle source
# File lib/xiami_radio/player.rb, line 34
def next
  @track.downloader.stop
  if preloading?
    @track, @next_track = @next_track, nil
  else
    @track = @radio.next_track
    @player.queue @track.file_path
  end
  @player.request_next_song
end
play() click to toggle source
# File lib/xiami_radio/player.rb, line 26
def play
  @track = @radio.next_track
  @player.queue @track.file_path
  @player.set_current_song
  @player.start_stream
  @player.thread.join
end
rewind() click to toggle source
# File lib/xiami_radio/player.rb, line 45
def rewind
  @player.rewind
end
toggle() click to toggle source
# File lib/xiami_radio/player.rb, line 53
def toggle
  @player.toggle
end

Private Instance Methods

complete() click to toggle source
# File lib/xiami_radio/player.rb, line 72
def complete
  @track.record
  @track, @next_track = @next_track, nil
end
position_change(position) click to toggle source
# File lib/xiami_radio/player.rb, line 59
def position_change(position)
  @view.refresh @track, position

  @track.record position.to_i if (120.0..123.0).include? position

  if !preloading? && position / @track.duration > 0.8
    @preloader = Thread.start do
      @next_track = @radio.next_track
      @player.queue @next_track.file_path
    end
  end
end
preloading?() click to toggle source
# File lib/xiami_radio/player.rb, line 77
def preloading?
  !@next_track.nil? || @preloader&.alive?
end