class Player
FIXME: There is something wrong…
Constants
- WAIT_TIME
Attributes
ui[RW]
Public Class Methods
new()
click to toggle source
# File lib/mdisc/player.rb, line 10 def initialize self.ui = Ui.new @datatype = 'songs' @mpg123_thread = nil @mpg123_pid = nil @playing_flag = false @pause_flag = false @songs = [] @idx = 0 @carousel = ->(left, right, x){x < left ? right : (x > right ? left : x)} end
Public Instance Methods
next()
click to toggle source
# File lib/mdisc/player.rb, line 89 def next stop sleep WAIT_TIME @idx = @carousel[0, @songs.size - 1, @idx + 1] recall end
pause()
click to toggle source
# File lib/mdisc/player.rb, line 71 def pause @pause_flag = true # send SIGSTOP to pipe Process.kill(:SIGSTOP, @mp3id) item = @songs[@idx] ui.build_playinfo(item['song_name'], item['artist'], true) end
play(datatype, songs, idx, switch_flag = false)
click to toggle source
# File lib/mdisc/player.rb, line 42 def play(datatype, songs, idx, switch_flag = false) @datatype = datatype if !switch_flag @pause_flag ? resume : pause if @playing_flag elsif switch_flag @songs = songs @idx = idx @playing_flag ? switch : recall end end
prev()
click to toggle source
# File lib/mdisc/player.rb, line 97 def prev stop sleep WAIT_TIME @idx = @carousel[0, @songs.size - 1, @idx - 1] recall end
recall()
click to toggle source
# File lib/mdisc/player.rb, line 22 def recall @playing_flag = true @pause_flag = false item = @songs[@idx] ui.build_playinfo(item['song_name'], item['artist']) @thread = Thread.new do # Add input option: --continue, # play a song continuously in case the network becomes offline occasionally. @mp3id, stdin, stdout, stderr = Open4::popen4('mpg123', '--continue', item['mp3_url']) Process::waitpid2 @mp3id if @playing_flag @idx = @carousel[0, @songs.size - 1, @idx + 1] recall end end end
resume()
click to toggle source
# File lib/mdisc/player.rb, line 80 def resume @pause_flag = false # send SIGCONT to pipe Process.kill(:SIGCONT, @mp3id) item = @songs[@idx] ui.build_playinfo(item['song_name'], item['artist']) end
stop()
click to toggle source
# File lib/mdisc/player.rb, line 60 def stop return unless @playing_flag return unless @thread return unless @mp3id @playing_flag = false # kill this process and thread Process.kill(:SIGKILL, @mp3id) Thread.kill @thread end
switch()
click to toggle source
# File lib/mdisc/player.rb, line 54 def switch stop sleep WAIT_TIME recall end