defmodule ElphWeb.MediaView do
@moduledoc """
This module contains views and helper functions for rendering of media content types.
"""
use ElphWeb, :view
defp url_upload_dir do
Application.get_env(:elph, :url_upload_dir)
end
def render_base(%{} = media) do
%{
mime: media.mime,
filesize: media.filesize,
url: build_url(media.hash, default_filename(media.extension)),
filename: media.filename,
extension: media.extension,
alt: media.alt,
subtext: media.subtext,
copyright: media.copyright
}
end
def render("image.json", %{media: media}) do
Map.merge(
render_base(media),
%{
thumbnail: build_url(media.hash, media.thumbnail)
}
)
end
def render("video.json", %{media: media}) do
Map.merge(
render_base(media),
%{
thumbnail: build_url(media.hash, media.thumbnail),
poster: build_url(media.hash, media.poster),
mp4: build_url(media.hash, media.mp4),
mp4_conversion: media.mp4_conversion
}
)
end
def render("audio.json", %{media: media, action: :index}) do
Map.merge(
render_base(media),
%{
mp3: build_url(media.hash, media.mp3),
mp3_conversion: media.mp3_conversion,
transcript_id: media.transcript_id
}
)
end
def render("audio.json", %{media: media, action: :show}) do
Map.merge(
render("audio.json", %{media: media, action: :index}),
%{
transcript:
render_one(media.transcript, ElphWeb.ContentView, "content_with_children.json")
}
)
end
def default_filename(extension) do
"original" <> extension
end
def build_url(_hash, nil) do
nil
end
def build_url(hash, filename) do
Path.join([url_upload_dir(), hash, filename])
end
end