Current section
Files
Jump to
Current section
Files
lib/scenic_live_reload.ex
defmodule ScenicLiveReload do
@moduledoc """
A simple, generic code reloader for Scenic Scenes
"""
use GenServer
require Logger
defmodule State do
@moduledoc false
defstruct []
end
def start_link(state, name \\ __MODULE__) do
GenServer.start_link(__MODULE__, state, name: name)
end
@impl GenServer
def init(_opts) do
Logger.debug("SceneReloader running #{inspect(self())}")
state = %State{}
{:ok, state}
end
def reload_current_scene, do: reload_current_scenes()
def reload_current_scenes do
GenServer.call(__MODULE__, :reload_current_scenes)
end
@impl GenServer
def handle_call(:reload_current_scenes, _, state) do
Logger.info("ScenicLiveReload reloading current scenes!")
do_reload_current_scenes()
{:reply, nil, state}
end
def do_reload_current_scenes do
ScenicLiveReload.Private.FetchScenicInfo.view_port_pids()
|> Enum.each(fn pid ->
{:ok, view_port} = Scenic.ViewPort.info(pid)
{scene, params} = ScenicLiveReload.Private.FetchScenicInfo.get_current_scene(view_port)
Scenic.ViewPort.set_root(view_port, scene, params)
end)
end
end