pinchflat/lib/pinchflat_web/controllers/podcasts/podcast_controller.ex
2024-03-26 08:24:30 -07:00

39 lines
1.2 KiB
Elixir

defmodule PinchflatWeb.Podcasts.PodcastController do
use PinchflatWeb, :controller
alias Pinchflat.Repo
alias Pinchflat.Media
alias Pinchflat.Podcasts.RssFeedBuilder
alias Pinchflat.Podcasts.PodcastHelpers
# TODO: test
def rss_feed(conn, %{"uuid" => uuid}) do
# TODO: change this to UUID
source = Repo.get_by!(Source, id: uuid)
media_items = PodcastHelpers.persisted_media_items_for(source)
xml = RssFeedBuilder.build(source, media_items)
conn
|> put_resp_content_type("application/rss+xml")
|> put_resp_header("content-disposition", "inline")
|> send_resp(200, xml)
end
# TODO: test
def feed_image(conn, %{"uuid" => uuid}) do
source = Repo.get_by!(Source, uuid: uuid)
# This provides a fallback image if the source has none.
# We only need one since we're using the internal metadata image which
# we know exists.
media_items = Media.list_downloaded_media_items_for(source, limit: 1)
filepath = PodcastHelpers.select_cover_image(source, media_items)
if filepath && File.exists?(filepath) do
conn
|> put_resp_content_type(MIME.from_path(filepath))
|> send_file(200, filepath)
else
send_resp(conn, 404, "File not found")
end
end
end