defmodule ExshomePlayer.Services.Playback do
@moduledoc """
Store playback state.
"""
alias ExshomePlayer.Services.MpvSocket
@spec load_url(url :: String.t()) :: MpvSocket.command_response()
def load_url(url) when is_binary(url) do
send_command(["playlist-clear"])
send_command(["loadfile", url])
play()
end
@spec play() :: MpvSocket.command_response()
def play do
set_property("pause", false)
end
@spec pause() :: MpvSocket.command_response()
def pause do
set_property("pause", true)
end
@spec stop() :: MpvSocket.command_response()
def stop do
send_command(["stop"])
end
@spec set_volume(level :: integer()) :: MpvSocket.command_response()
def set_volume(level) when is_number(level) do
set_property("volume", level)
end
@spec seek(duration :: integer()) :: MpvSocket.command_response()
def seek(time_pos) when is_number(time_pos) do
send_command(["seek", time_pos, "absolute"])
end
@spec set_property(property :: String.t(), value :: term()) :: MpvSocket.command_response()
def set_property(property, value) do
send_command(["set_property", property, value])
end
defdelegate send_command(payload), to: MpvSocket
end