defmodule ExSni.IconRegistration do
use GenServer
def start_link(opts, gen_opts \\ []) do
GenServer.start_link(__MODULE__, opts, gen_opts)
end
def init(opts) do
service_name = Keyword.get(opts, :service_name, nil)
case Process.whereis(:dbus_icon_service) do
service when is_pid(service) -> register_icon(service, service_name)
nil -> {:stop, ":icon_service is not running"}
end
end
defp register_icon(service, service_name) do
service
|> GenServer.call({
:call_method,
"org.kde.StatusNotifierWatcher",
"/StatusNotifierWatcher",
"org.kde.StatusNotifierWatcher",
"RegisterStatusNotifierItem",
{"s", [:string], [service_name]}
})
|> case do
{:ok, pid} -> {:ok, pid}
{:error, error} -> {:stop, error}
_ -> {:stop, "RegisterStatusNotifierItem failed for \"#{service_name}\" "}
end
end
end