Class: MMPlayer::Player::Wrapper

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

Overview

Wrapper for MPlayer functionality

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Wrapper

Returns a new instance of Wrapper.

Parameters:

  • options (Hash) (defaults to: {})

Options Hash (options):

  • :flags (String)

    MPlayer command-line flags to use on startup



12
13
14
15
16
17
18
# File 'lib/mmplayer/player/wrapper.rb', line 12

def initialize(options = {})
  @invoker = Invoker.new(options)
  @messenger = Messenger.new
  @callback = {}
  @state = State.new
  @threads = []
end

Instance Attribute Details

#playerObject (readonly)

Returns the value of attribute player.



8
9
10
# File 'lib/mmplayer/player/wrapper.rb', line 8

def player
  @player
end

#stateObject (readonly)

Returns the value of attribute state.



8
9
10
# File 'lib/mmplayer/player/wrapper.rb', line 8

def state
  @state
end

Instance Method Details

#active?Boolean

Is MPlayer active?

Returns:

  • (Boolean)


38
39
40
# File 'lib/mmplayer/player/wrapper.rb', line 38

def active?
  !(@player ||= @invoker.player).nil?
end

#add_end_of_file_callback(&block) ⇒ Boolean

Add a callback to be called at the end of playback of a media file

Parameters:

  • block (Proc)

Returns:

  • (Boolean)


74
75
76
77
# File 'lib/mmplayer/player/wrapper.rb', line 74

def add_end_of_file_callback(&block)
  @callback[:end_of_file] = block
  true
end

#add_progress_callback(&block) ⇒ Boolean

Add a callback to be called when progress is updated during playback

Parameters:

  • block (Proc)

Returns:

  • (Boolean)


66
67
68
69
# File 'lib/mmplayer/player/wrapper.rb', line 66

def add_progress_callback(&block)
  @callback[:progress] = block
  true
end

#mplayer_respond_to?(method, include_private = false) ⇒ Boolean

Does the MPlayer respond to the given message?

Returns:

  • (Boolean)


93
94
95
96
# File 'lib/mmplayer/player/wrapper.rb', line 93

def mplayer_respond_to?(method, include_private = false)
  (@player.nil? && MPlayer::Slave.method_defined?(method)) ||
  @player.respond_to?(method)
end

#mplayer_send(method, *args, &block) ⇒ Object

Shortcut to send a message to the MPlayer

Returns:

  • (Object)


81
82
83
84
85
86
87
88
89
# File 'lib/mmplayer/player/wrapper.rb', line 81

def mplayer_send(method, *args, &block)
  if @player.nil? && MPlayer::Slave.method_defined?(method)
    # warn
  else
    @messenger.send_message do
      @player.send(method, *args, &block)
    end
  end
end

#pauseBoolean

Toggles pause

Returns:

  • (Boolean)


44
45
46
47
48
# File 'lib/mmplayer/player/wrapper.rb', line 44

def pause
  @state.toggle_pause
  @player.pause
  @state.pause?
end

#play(file) ⇒ Boolean

Play a media file

Parameters:

  • file (String)

Returns:

  • (Boolean)


23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/mmplayer/player/wrapper.rb', line 23

def play(file)
  @player ||= @invoker.ensure_invoked(file, @state)
  if @player.nil?
    false
  else
    @threads << ::MMPlayer::Thread.new(:timeout => 2) do
      @player.load_file(file)
      handle_start
    end
    true
  end
end

#playback_loopBoolean

Handle events while the player is running

Returns:

  • (Boolean)


52
53
54
55
56
57
58
59
60
61
# File 'lib/mmplayer/player/wrapper.rb', line 52

def playback_loop
  loop do
    if handle_progress?
      @threads << ::MMPlayer::Thread.new { handle_progress }
    end
    handle_eof if handle_eof?
    sleep(0.05)
  end
  true
end

#quitBoolean

Cause MPlayer to exit

Returns:

  • (Boolean)


100
101
102
103
104
105
# File 'lib/mmplayer/player/wrapper.rb', line 100

def quit
  @player.quit
  @threads.each(&:kill)
  @invoker.destroy
  true
end