Class: Player

Inherits:
Object
  • Object
show all
Defined in:
lib/mplug163/player.rb

Instance Method Summary collapse

Constructor Details

#initializePlayer

Returns a new instance of Player.



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/mplug163/player.rb', line 4

def initialize
  @ui = Ui.new
  @datatype = 'songs'
  @mpg123_thread = nil
  @mpg123_pid = nil
  @playing_flag = false
  @pause_flag = false
  @songs = []
  @idx = 0
  @wait = 0.5
  @carousel = ->(left, right, x){x < left ? right : (x > right ? left : x)}
end

Instance Method Details

#nextObject



82
83
84
85
86
87
88
# File 'lib/mplug163/player.rb', line 82

def next
  stop
  sleep @wait

  @idx = @carousel[0, @songs.size - 1, @idx + 1]
  recall
end

#pauseObject



64
65
66
67
68
69
70
71
# File 'lib/mplug163/player.rb', line 64

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) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/mplug163/player.rb', line 35

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

#prevObject



90
91
92
93
94
95
96
# File 'lib/mplug163/player.rb', line 90

def prev
  stop
  sleep @wait

  @idx = @carousel[0, @songs.size - 1, @idx - 1]
  recall
end

#recallObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/mplug163/player.rb', line 17

def recall
  @playing_flag = true
  @pause_flag = false

  item = @songs[@idx]
  @ui.build_playinfo(item['song_name'], item['artist'])

  @thread = Thread.new do
    @mp3id, stdin, stdout, stderr = Open4::popen4('mpg123', item['mp3_url'])
    Process::waitpid2 @mp3id

    if @playing_flag
      @idx = @carousel[0, @songs.size - 1, @idx + 1]
      recall
    end
  end
end

#resumeObject



73
74
75
76
77
78
79
80
# File 'lib/mplug163/player.rb', line 73

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

#stopObject



53
54
55
56
57
58
59
60
61
62
# File 'lib/mplug163/player.rb', line 53

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

#switchObject



47
48
49
50
51
# File 'lib/mplug163/player.rb', line 47

def switch
  stop
  sleep @wait
  recall
end