Packages
rockbox_ex
0.1.0
Idiomatic Elixir SDK for Rockbox — pipe-friendly, builder-friendly, with real-time event subscriptions and a plugin system.
Current section
Files
Jump to
Current section
Files
lib/rockbox/system.ex
defmodule Rockbox.System do
@moduledoc "System-level information about the rockboxd instance."
alias Rockbox.{Client, SystemStatus, Transport, Util}
@doc "rockboxd version string."
@spec version(Client.t()) :: {:ok, String.t()} | {:error, Exception.t()}
def version(client) do
case Transport.execute(client, "query Version { rockboxVersion }") do
{:ok, %{"rockboxVersion" => v}} -> {:ok, v}
err -> err
end
end
@spec version!(Client.t()) :: String.t()
def version!(client), do: bang(version(client))
@doc "Aggregate runtime status."
@spec status(Client.t()) :: {:ok, SystemStatus.t()} | {:error, Exception.t()}
def status(client) do
query = ~S"""
query GlobalStatus {
globalStatus {
resumeIndex resumeCrc32 resumeElapsed resumeOffset
runtime topruntime dircacheSize
lastScreen viewerIconCount lastVolumeChange
}
}
"""
with {:ok, %{"globalStatus" => raw}} <- Transport.execute(client, query) do
{:ok, Util.to_struct(SystemStatus, raw)}
end
end
@spec status!(Client.t()) :: SystemStatus.t()
def status!(client), do: bang(status(client))
defp bang({:ok, value}), do: value
defp bang({:error, exception}), do: raise(exception)
end