defmodule FileWatch do
@shortdoc FileWatch.MixProject.description()
@moduledoc """
#{@shortdoc}
### How to run
$ ./fwatch
### How to get config template
$ ./fwatch --config-template
"""
def main(args) do
case OptionParser.parse(args, strict: [config_template: :boolean]) do
{[], [], []} -> run(self())
{[config_template: true], [], []} -> FileWatch.Config.create_template()
_ -> help()
end
end
def run(pid) do
case FileWatch.Config.read() do
{:ok, config} ->
FileWatch.Logger.configure(config)
FileWatch.Assets.create_wrapper_file()
Application.put_env(:file_watch, :main_pid, pid)
start_link(config: config)
receive do
:exit -> :ok
end
_ ->
:ok
end
end
def exit!() do
Application.fetch_env!(:file_watch, :main_pid) |> send(:exit)
end
defp help(), do: IO.puts(@moduledoc)
use Supervisor
def start_link(args) when is_list(args) do
Supervisor.start_link(__MODULE__, args, name: __MODULE__)
end
@impl Supervisor
def init(args) when is_list(args) do
children = [{FileWatch.FsSubscriber, args}]
Supervisor.init(children, strategy: :one_for_one)
end
end