defmodule BdfrBrowser.RenderUtils do def selftext(txt) when is_binary(txt) do Earmark.as_html!(txt) end def comment(cmt) when is_binary(cmt) do Earmark.as_html!(cmt) end def message(msg) when is_binary(msg) do img_replacement = "
" msg |> maybe_insert_image(img_replacement) |> String.replace(~r/https:\/\/i\.redd\.it\/(.+)/, img_replacement) |> Earmark.as_html!() end def link_to_user(name) when is_binary(name) and name in ~w([deleted] DELETED), do: name def link_to_user(name) when is_binary(name), do: "#{name}" def format_date(date, :long) do Calendar.strftime(date, "%d-%m-%Y, %H:%MZ") end def format_date(date, :short) do Calendar.strftime(date, "%d-%m, %H:%MZ") end def post_type_icon(url) do cond do String.contains?(url, ["i.redd.it", "i.imgur.com", "i.postimg.cc", "twimg.com"]) -> "" String.contains?(url, ["reddit.com/gallery", "imgur.com/a"]) -> "" String.contains?(url, ["v.redd.it", "redgifs.com", "gfycat.com"]) -> "" true -> "" end end # Helper defp maybe_insert_image(<<"mxc://reddit.com/", filename::binary>> = msg, replacement) when is_binary(msg) do chat_directory = Application.fetch_env!(:bdfr_browser, :chat_directory) img_directory = Path.join([chat_directory, "images"]) imgs = Path.wildcard("#{img_directory}/#{filename}.*") if Enum.empty?(imgs) do msg else img = hd(imgs) String.replace(replacement, "\\1", Path.basename(img)) end end defp maybe_insert_image(msg, _replacement) when is_binary(msg), do: msg end