Files
something-erlang/lib/something_erlang_web/controllers/page_controller.ex
2024-06-02 15:23:32 +02:00

47 lines
1.1 KiB
Elixir

defmodule SomethingErlangWeb.PageController do
use SomethingErlangWeb, :controller
def home(conn, params) do
# The home page is often custom made,
# so skip the default app layout.
conn = assign(conn, :params, params)
render(conn, :home)
end
def to_forum_path(conn, %{"forum_path" => path} = _params) do
with {:ok, thread, page} <- resolve_url(path) do
redirect(conn, to: ~p"/thread/#{thread}?page=#{page}")
else
_ ->
put_flash(conn, :error, "Could not resolve URL")
render(conn, :home)
end
end
def to_forum_path(conn, _params) do
render(conn, :home)
end
defp resolve_url(url) do
threadid =
case Regex.run(~r{threadid=(\d+)}, url) do
[_, threadid] -> {:ok, threadid}
nil -> {:error, :nothreadid}
end
page =
case Regex.run(~r{pagenumber=(\d+)}, url) do
[_, page] -> {:ok, page}
nil -> {:ok, 1}
end
with {:ok, threadid} <- threadid,
{:ok, page} <- page do
{:ok, threadid, page}
else
_ ->
{:error, :cantparseurl}
end
end
end