47 lines
1.1 KiB
Elixir
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
|