Files
something-erlang/lib/something_erlang/grover.ex

77 lines
1.8 KiB
Elixir
Raw Normal View History

2022-07-21 18:42:42 +02:00
defmodule SomethingErlang.Grover do
use GenServer
2022-08-01 15:58:55 +02:00
alias SomethingErlang.AwfulApi
2022-07-21 18:42:42 +02:00
require Logger
def mount(user) do
2024-03-29 15:54:42 +01:00
grover =
DynamicSupervisor.start_child(
SomethingErlang.Supervisor.Grovers,
{__MODULE__, [self(), user]}
)
case grover do
{:ok, pid} -> pid
{:error, {:already_started, pid}} -> pid
{:error, error} -> {:error, error}
end
2022-07-21 18:42:42 +02:00
end
def get_thread!(thread_id, page_number) do
GenServer.call(via(self()), {:show_thread, thread_id, page_number})
2022-07-21 18:42:42 +02:00
end
2022-08-03 16:01:41 +02:00
def get_bookmarks!(page_number) do
GenServer.call(via(self()), {:show_bookmarks, page_number})
end
def start_link([lv_pid, user]) do
2022-07-21 18:42:42 +02:00
GenServer.start_link(
__MODULE__,
[lv_pid, user],
2022-11-07 13:49:31 +01:00
name: via(lv_pid)
)
2022-07-21 18:42:42 +02:00
end
@impl true
def init([pid, user]) do
2022-07-21 18:42:42 +02:00
%{bbuserid: userid, bbpassword: userhash} = user
2022-11-07 13:49:31 +01:00
2022-07-21 18:42:42 +02:00
initial_state = %{
lv_pid: pid,
user: %{id: userid, hash: userhash}
}
2022-11-07 13:49:31 +01:00
Logger.debug("init #{userid} #{inspect(pid)}")
2022-07-21 18:42:42 +02:00
Process.monitor(pid)
{:ok, initial_state}
end
@impl true
def handle_call({:show_thread, thread_id, page_number}, _from, state) do
thread = AwfulApi.parsed_thread(thread_id, page_number, state.user)
{:reply, thread, state}
2022-07-21 18:42:42 +02:00
end
2022-08-03 16:01:41 +02:00
@impl true
def handle_call({:show_bookmarks, _page_number}, _from, state) do
bookmarks = AwfulApi.bookmarks(state.user)
{:reply, bookmarks, state}
end
2022-07-21 18:42:42 +02:00
@impl true
def handle_info({:DOWN, _ref, :process, _object, reason}, state) do
2022-11-07 13:49:31 +01:00
Logger.debug("received :DOWN from: #{inspect(state.lv_pid)} reason: #{inspect(reason)}")
2022-07-21 18:42:42 +02:00
case reason do
{:shutdown, _} -> {:stop, :normal, state}
:killed -> {:stop, :normal, state}
2022-07-21 18:42:42 +02:00
_ -> {:noreply, state}
end
end
defp via(lv_pid),
do: {:via, Registry, {SomethingErlang.Registry.Grovers, lv_pid}}
end