class MPV::Slave

Public Class Methods

new() click to toggle source
# File lib/mpv-slave/mpv.rb, line 8
def initialize
  socket = Dir::Tmpname.make_tmpname "/tmp/mpv-slave", ".socket"

  @pid = Process.spawn(
    "mpv",
    "--idle",
    "--really-quiet",
    "--no-input-terminal",
    "--input-unix-socket", socket,
  )
  puts "waiting for mpv to start up..."
  until File.exists?(socket) or not running?
    sleep 0.1
  end
  raise "failed to start mpv" if not running?

  @socket = Socket.new(socket)
end

Public Instance Methods

add(file) click to toggle source
# File lib/mpv-slave/mpv.rb, line 49
def add file
  play file, mode: "append-play", wait: false
end
close() click to toggle source
# File lib/mpv-slave/mpv.rb, line 99
def close
  Process.kill :SIGTERM, @pid
  Process.wait @pid
  @socket.close
end
command(*args) click to toggle source

generic commands

# File lib/mpv-slave/mpv.rb, line 36
def command *args
  response = @socket.command(*args)
  response
end
disable_event(event) click to toggle source
# File lib/mpv-slave/mpv.rb, line 83
def disable_event event
  command "disable_event", event
end
disable_events() click to toggle source
# File lib/mpv-slave/mpv.rb, line 91
def disable_events
  disable_event "all"
end
enable_event(event) click to toggle source
# File lib/mpv-slave/mpv.rb, line 79
def enable_event event
  command "enable_event", event
end
enable_events() click to toggle source
# File lib/mpv-slave/mpv.rb, line 87
def enable_events
  enable_event "all"
end
get(prop) click to toggle source
# File lib/mpv-slave/mpv.rb, line 57
def get prop
  command "get_property", prop
end
method_missing(cmd, *args, &block) click to toggle source
# File lib/mpv-slave/mpv.rb, line 95
def method_missing cmd, *args, &block
  command cmd.to_s, *args, &block
end
pause() click to toggle source
# File lib/mpv-slave/mpv.rb, line 53
def pause
  toggle "pause"
end
play(file, mode: "replace", wait: true) click to toggle source
# File lib/mpv-slave/mpv.rb, line 41
def play file, mode: "replace", wait: true
  file = File.expand_path file
  raise "no such file: #{file}" unless File.exists? file
  command "loadfile", file, mode

  wait_for "playback-restart" if wait
end
running?() click to toggle source
# File lib/mpv-slave/mpv.rb, line 27
def running?
  begin
    Process.waitpid(@pid, Process::WNOHANG) == nil
  rescue
    false
  end
end
set(prop, value) click to toggle source
# File lib/mpv-slave/mpv.rb, line 61
def set prop, value
  command "set_property", prop, value
end
toggle(prop) click to toggle source
# File lib/mpv-slave/mpv.rb, line 65
def toggle prop
  set(prop, !get(prop))
end
wait_for(event) click to toggle source
# File lib/mpv-slave/mpv.rb, line 69
def wait_for event
  @socket.wait_for event
end
wait_while(prop, val=true) click to toggle source
# File lib/mpv-slave/mpv.rb, line 73
def wait_while prop, val=true
  while get(prop) == val
    sleep 0.01
  end
end