[WIP] more expanding on RSS

This commit is contained in:
Kieran Eglin 2024-03-24 08:59:43 -07:00
parent 1413aa153a
commit e365f264ef
No known key found for this signature in database
GPG key ID: 193984967FCF432D
3 changed files with 38 additions and 3 deletions

View file

@ -33,17 +33,17 @@ defmodule Pinchflat.Podcasts.RssFeedBuilder do
<lastBuildDate>#{Calendar.strftime(DateTime.utc_now(), @datetime_format)}</lastBuildDate> <lastBuildDate>#{Calendar.strftime(DateTime.utc_now(), @datetime_format)}</lastBuildDate>
<pubDate>#{Calendar.strftime(source.inserted_at, @datetime_format)}</pubDate> <pubDate>#{Calendar.strftime(source.inserted_at, @datetime_format)}</pubDate>
<atom:link href="#{generate_self_link(source)}" rel="self" type="application/rss+xml" /> <atom:link href="#{generate_self_link(source)}" rel="self" type="application/rss+xml" />
<podcast:locked>false</podcast:locked> <podcast:locked>yes</podcast:locked>
<podcast:guid>#{source.uuid}</podcast:guid> <podcast:guid>#{source.uuid}</podcast:guid>
<image> <image>
<url>https://raw.githubusercontent.com/kieraneglin/pinchflat/master/priv/static/images/originals/logo.png</url> <url>#{generate_source_image_path(source)}</url>
<title>#{source.custom_name}</title> <title>#{source.custom_name}</title>
<link>#{source.original_url}</link> <link>#{source.original_url}</link>
</image> </image>
<itunes:author>#{source.custom_name}</itunes:author> <itunes:author>#{source.custom_name}</itunes:author>
<itunes:subtitle>#{source.custom_name}</itunes:subtitle> <itunes:subtitle>#{source.custom_name}</itunes:subtitle>
<itunes:block>yes</itunes:block> <itunes:block>yes</itunes:block>
<itunes:image href="https://raw.githubusercontent.com/kieraneglin/pinchflat/master/priv/static/images/originals/logo.png"></itunes:image> <itunes:image href="#{generate_source_image_path(source)}"></itunes:image>
<itunes:explicit>false</itunes:explicit> <itunes:explicit>false</itunes:explicit>
<itunes:category text="TV &amp; Film"></itunes:category> <itunes:category text="TV &amp; Film"></itunes:category>
@ -85,6 +85,11 @@ defmodule Pinchflat.Podcasts.RssFeedBuilder do
"#{url_base()}/media/#{media_item.uuid}/stream#{extension}" "#{url_base()}/media/#{media_item.uuid}/stream#{extension}"
end end
# TODO: add extension maybe. maybe refactor controller to handle this
defp generate_source_image_path(source) do
"#{url_base()}/sources/#{source.uuid}/feed_image"
end
defp generate_upload_date(media_item) do defp generate_upload_date(media_item) do
media_item.upload_date media_item.upload_date
|> Date.to_gregorian_days() |> Date.to_gregorian_days()

View file

@ -59,6 +59,8 @@ defmodule PinchflatWeb.Sources.SourceController do
) )
end end
# TODO: test
# TODO: maybe move both of these to a separate controller
def feed(conn, %{"id" => uuid}) do def feed(conn, %{"id" => uuid}) do
# TODO: change this to UUID # TODO: change this to UUID
source = Repo.get_by!(Source, id: uuid) source = Repo.get_by!(Source, id: uuid)
@ -72,6 +74,32 @@ defmodule PinchflatWeb.Sources.SourceController do
|> send_resp(200, xml) |> send_resp(200, xml)
end end
# TODO: test
# TODO: look into media_items having a thumbnail path when the image is embedded but not on disk
# TODO: pull these images from the internal metadata instead. this implies I'll have to hook up
# metadata images for sources
def feed_image(conn, %{"id" => uuid}) do
source = Repo.get_by!(Source, uuid: uuid)
media_item = Media.list_downloaded_media_items_for(source, limit: 1)
filepath =
case {source.poster_filepath, media_item} do
{poster, _} when poster != nil -> poster
{nil, [media_item]} -> media_item.thumbnail_filepath
_ -> nil
end
IO.inspect(filepath)
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
def edit(conn, %{"id" => id}) do def edit(conn, %{"id" => id}) do
source = Sources.get_source!(id) source = Sources.get_source!(id)
changeset = Sources.change_source(source) changeset = Sources.change_source(source)

View file

@ -37,6 +37,8 @@ defmodule PinchflatWeb.Router do
# so people that want RSS feeds to work can enable it. # so people that want RSS feeds to work can enable it.
scope "/", PinchflatWeb do scope "/", PinchflatWeb do
get "/sources/:id/feed", Sources.SourceController, :feed get "/sources/:id/feed", Sources.SourceController, :feed
get "/sources/:id/feed_image", Sources.SourceController, :feed_image
get "/media/:id/stream", MediaItems.MediaItemController, :stream get "/media/:id/stream", MediaItems.MediaItemController, :stream
end end