diff --git a/lib/something_erlang_web/controllers/page_controller.ex b/lib/something_erlang_web/controllers/page_controller.ex index 8a93aee..a22dac5 100644 --- a/lib/something_erlang_web/controllers/page_controller.ex +++ b/lib/something_erlang_web/controllers/page_controller.ex @@ -1,9 +1,46 @@ defmodule SomethingErlangWeb.PageController do use SomethingErlangWeb, :controller - def home(conn, _params) do + def home(conn, params) do # The home page is often custom made, # so skip the default app layout. - render(conn, :home, layout: false) + 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 diff --git a/lib/something_erlang_web/controllers/page_html/home.html.heex b/lib/something_erlang_web/controllers/page_html/home.html.heex index e67d593..19ced7f 100644 --- a/lib/something_erlang_web/controllers/page_html/home.html.heex +++ b/lib/something_erlang_web/controllers/page_html/home.html.heex @@ -1,8 +1,11 @@ <.flash_group flash={@flash} /> -<.form :let={f} for={@conn} action={~p"/"}> - - - + +<.simple_form for={@conn.params} action={~p"/"} phx-submit="save"> + <.input field={@conn.params[:forum_path]} name="forum_path" value="" label="SA Url" /> + <:actions> + <.button class="btn btn-sm">Redirect + +
<%= inspect(@current_user) %>