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
|
|
|
|
|
2022-07-25 11:04:46 +02:00
|
|
|
def mount(user, thread_id) do
|
2022-07-21 18:42:42 +02:00
|
|
|
DynamicSupervisor.start_child(
|
|
|
|
SomethingErlang.Supervisor.Grovers,
|
2022-07-25 11:04:46 +02:00
|
|
|
{__MODULE__, [self(), user, thread_id]}
|
2022-07-21 18:42:42 +02:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
2022-07-25 11:04:46 +02:00
|
|
|
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
|
|
|
|
|
|
|
|
def start_link([lv_pid, user, thread_id]) do
|
|
|
|
GenServer.start_link(
|
|
|
|
__MODULE__,
|
|
|
|
[lv_pid, user, thread_id],
|
|
|
|
name: via(lv_pid))
|
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
def init([pid, user, thread_id]) do
|
|
|
|
%{bbuserid: userid, bbpassword: userhash} = user
|
|
|
|
initial_state = %{
|
|
|
|
lv_pid: pid,
|
|
|
|
thread_id: thread_id,
|
|
|
|
page_number: 1,
|
|
|
|
user: %{id: userid, hash: userhash}
|
|
|
|
}
|
|
|
|
|
|
|
|
Logger.debug "init #{userid} #{thread_id}"
|
|
|
|
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 | page_number: page_number}}
|
|
|
|
end
|
|
|
|
|
|
|
|
@impl true
|
|
|
|
def handle_info({:DOWN, _ref, :process, _object, reason}, state) do
|
|
|
|
Logger.debug "received :DOWN from: #{inspect(state.lv_pid)} reason: #{inspect(reason)}"
|
|
|
|
case reason do
|
|
|
|
{:shutdown, _} -> {:stop, :normal, state}
|
2022-07-25 11:04:46 +02:00
|
|
|
: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
|