grover without dynamicsupervisor?
This commit is contained in:
@ -4,48 +4,30 @@ defmodule SomethingErlang.Grover do
|
|||||||
alias SomethingErlang.AwfulApi
|
alias SomethingErlang.AwfulApi
|
||||||
require Logger
|
require Logger
|
||||||
|
|
||||||
def mount(user) do
|
|
||||||
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
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_thread!(thread_id, page_number) do
|
def get_thread!(thread_id, page_number) do
|
||||||
GenServer.call(via(self()), {:show_thread, thread_id, page_number})
|
GenServer.call(__MODULE__, {:show_thread, thread_id, page_number})
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_bookmarks!(page_number) do
|
def get_bookmarks!(pid, page_number) do
|
||||||
GenServer.call(via(self()), {:show_bookmarks, page_number})
|
GenServer.call(pid, {:show_bookmarks, page_number})
|
||||||
end
|
end
|
||||||
|
|
||||||
def start_link([lv_pid, user]) do
|
def start_link(user) do
|
||||||
GenServer.start_link(
|
GenServer.start_link(
|
||||||
__MODULE__,
|
__MODULE__,
|
||||||
[lv_pid, user],
|
[user]
|
||||||
name: via(lv_pid)
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def init([pid, user]) do
|
def init([user]) do
|
||||||
%{bbuserid: userid, bbpassword: userhash} = user
|
%{bbuserid: userid, bbpassword: userhash} = user
|
||||||
|
|
||||||
initial_state = %{
|
initial_state = %{
|
||||||
lv_pid: pid,
|
|
||||||
user: %{id: userid, hash: userhash}
|
user: %{id: userid, hash: userhash}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger.debug("init #{userid} #{inspect(pid)}")
|
{:ok, initial_state} |> dbg()
|
||||||
Process.monitor(pid)
|
|
||||||
{:ok, initial_state}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@ -57,20 +39,6 @@ defmodule SomethingErlang.Grover do
|
|||||||
@impl true
|
@impl true
|
||||||
def handle_call({:show_bookmarks, page_number}, _from, state) do
|
def handle_call({:show_bookmarks, page_number}, _from, state) do
|
||||||
bookmarks = AwfulApi.bookmarks(page_number, state.user)
|
bookmarks = AwfulApi.bookmarks(page_number, state.user)
|
||||||
{:reply, bookmarks, state}
|
{:reply, bookmarks, state} |> dbg()
|
||||||
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}
|
|
||||||
:killed -> {:stop, :normal, state}
|
|
||||||
_ -> {:noreply, state}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp via(lv_pid),
|
|
||||||
do: {:via, Registry, {SomethingErlang.Registry.Grovers, lv_pid}}
|
|
||||||
end
|
|
||||||
|
@ -4,10 +4,12 @@ defmodule SomethingErlangWeb.BookmarksLive do
|
|||||||
alias SomethingErlang.Grover
|
alias SomethingErlang.Grover
|
||||||
|
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
|
assigns.bookmarks |> dbg()
|
||||||
|
|
||||||
~H"""
|
~H"""
|
||||||
<div :if={@bookmarks}>
|
<div :if={bookmarks = @bookmarks.ok? && @bookmarks.result}>
|
||||||
<.bookmark
|
<.bookmark
|
||||||
:for={thread <- @bookmarks}
|
:for={thread <- bookmarks}
|
||||||
id={thread.id}
|
id={thread.id}
|
||||||
title={thread.title.thread_title}
|
title={thread.title.thread_title}
|
||||||
post_count={thread.replies}
|
post_count={thread.replies}
|
||||||
@ -32,11 +34,21 @@ defmodule SomethingErlangWeb.BookmarksLive do
|
|||||||
socket.assigns.current_user
|
socket.assigns.current_user
|
||||||
|> Map.put(:bbpassword, session["bbpassword"])
|
|> Map.put(:bbpassword, session["bbpassword"])
|
||||||
|
|
||||||
Grover.mount(user)
|
{:ok, pid} = Grover.start_link(user) |> dbg()
|
||||||
|
|
||||||
{:ok,
|
{:ok,
|
||||||
socket
|
socket
|
||||||
|> assign(:page_title, "Bookmarks")
|
|> assign(:page_title, "Bookmarks")
|
||||||
|> assign(:bookmarks, Grover.get_bookmarks!(1) |> dbg())}
|
|> assign_async(:bookmarks, fn ->
|
||||||
|
{:ok, bookmarks} = get_bookmarks(pid)
|
||||||
|
{:ok, %{bookmarks: bookmarks}}
|
||||||
|
end)}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_bookmarks(pid) do
|
||||||
|
case Grover.get_bookmarks!(pid, 1) do
|
||||||
|
bookmarks when is_list(bookmarks) -> {:ok, bookmarks}
|
||||||
|
_ -> {:error, "Failed getting bookmarks"}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user