defmodule PardallMarkdown.RepositoryWatcher do @moduledoc """ """ use GenServer require Logger alias PardallMarkdown.RepositoryProviders.{Git} alias PardallMarkdown.RepositoryProvider, as: Repository @recheck_interval Application.get_env(:pardall_markdown, PardallMarkdown.Content)[ :recheck_pending_remote_events_interval ] def start_link(args) do GenServer.start_link(__MODULE__, provider: args[:repo]) end @impl true def init(provider) do repo = Git.repository() state = %Repository{repo: repo, provider: provider} send_next_recheck() {:ok, state} end @impl true def handle_info(:check_pending_remote_events, %{repo: repo} = state) do # Fetch any potential changes from remote. Git.fetch(repo) send_next_recheck() {:noreply, state} end # In eithe case of :no_updates or :updates we don't care about what happened. # keep passing state. FileWatcher and FileParser will handle any changes at # the local_path. @impl true def handle_info({_, :no_updates}, state), do: {:noreply, state} @impl true def handle_info({_, {:updates, _}}, state), do: {:noreply, state} defp send_next_recheck, do: Process.send_after(self(), :check_pending_remote_events, @recheck_interval) end