[Enhancement] Misc fixes 2024-03-29 (#150)
* Removes header to allow embedding in frame * Escaped links in podcast RSS builder * Turned homepage sections into clickable links * Enabled live dashboard in all ENVs * Ensured download worker always returns a 2-member tuple
This commit is contained in:
@@ -57,7 +57,9 @@ defmodule Pinchflat.Downloading.MediaDownloadWorker do
|
||||
{:ok, updated_media_item}
|
||||
|
||||
err ->
|
||||
err
|
||||
Logger.error("Failed to download media for media item #{media_item.id}: #{inspect(err)}")
|
||||
|
||||
{:error, :download_failed}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -43,25 +43,25 @@ defmodule Pinchflat.Podcasts.RssFeedBuilder do
|
||||
xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>#{safe(source.custom_name)}</title>
|
||||
<link>#{source.original_url}</link>
|
||||
<link>#{safe(source.original_url)}</link>
|
||||
<description>#{safe(source.description)}</description>
|
||||
<category>TV & Film</category>
|
||||
<generator>Generated by Pinchflat</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>#{Calendar.strftime(source.updated_at, @datetime_format)}</lastBuildDate>
|
||||
<pubDate>#{Calendar.strftime(source.inserted_at, @datetime_format)}</pubDate>
|
||||
<atom:link href="#{generate_self_link(url_base, source)}" rel="self" type="application/rss+xml" />
|
||||
<atom:link href="#{safe(generate_self_link(url_base, source))}" rel="self" type="application/rss+xml" />
|
||||
<podcast:locked>yes</podcast:locked>
|
||||
<podcast:guid>#{source.uuid}</podcast:guid>
|
||||
<image>
|
||||
<url>#{feed_image_path}</url>
|
||||
<url>#{safe(feed_image_path)}</url>
|
||||
<title>#{safe(source.custom_name)}</title>
|
||||
<link>#{source.original_url}</link>
|
||||
<link>#{safe(source.original_url)}</link>
|
||||
</image>
|
||||
<itunes:author>#{safe(source.custom_name)}</itunes:author>
|
||||
<itunes:subtitle>#{safe(source.custom_name)}</itunes:subtitle>
|
||||
<itunes:block>yes</itunes:block>
|
||||
<itunes:image href="#{feed_image_path}"></itunes:image>
|
||||
<itunes:image href="#{safe(feed_image_path)}"></itunes:image>
|
||||
<itunes:explicit>false</itunes:explicit>
|
||||
<itunes:category text="TV & Film"></itunes:category>
|
||||
|
||||
@@ -77,7 +77,7 @@ defmodule Pinchflat.Podcasts.RssFeedBuilder do
|
||||
<item>
|
||||
<guid isPermaLink="false">#{media_item.uuid}</guid>
|
||||
<title>#{safe(media_item.title)}</title>
|
||||
<link>#{media_item.original_url}</link>
|
||||
<link>#{safe(media_item.original_url)}</link>
|
||||
<description>#{safe(media_item.description)}</description>
|
||||
<pubDate>#{generate_upload_date(media_item)}</pubDate>
|
||||
<itunes:duration>#{media_item.duration_seconds}</itunes:duration>
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
<div class="grid grid-cols-1 gap-4 md:grid-cols-3">
|
||||
<div class="rounded-sm border px-7.5 py-6 shadow-default border-strokedark bg-boxdark">
|
||||
<div class="mt-4 flex flex-col items-center justify-center">
|
||||
<a href={~p"/media_profiles"} class="mt-4 flex flex-col items-center justify-center">
|
||||
<span class="text-md font-medium">Media Profile(s)</span>
|
||||
<h4 class="text-title-md font-bold text-white">
|
||||
<%= @media_profile_count %>
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="rounded-sm border px-7.5 py-6 shadow-default border-strokedark bg-boxdark">
|
||||
<div class="mt-4 flex flex-col items-center justify-center">
|
||||
<a href={~p"/sources"} class="mt-4 flex flex-col items-center justify-center">
|
||||
<span class="text-md font-medium">Source(s)</span>
|
||||
<h4 class="text-title-md font-bold text-white">
|
||||
<%= @source_count %>
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<div class="rounded-sm border px-7.5 py-6 shadow-default border-strokedark bg-boxdark">
|
||||
<div class="mt-4 flex flex-col items-center justify-center">
|
||||
<a href="#" class="mt-4 flex flex-col items-center justify-center">
|
||||
<span class="text-md font-medium">Media Item(s)</span>
|
||||
<h4 class="text-title-md font-bold text-white">
|
||||
<%= @media_item_count %>
|
||||
</h4>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
<span class="text-strokedark">I know this page isn't super useful yet, but give it time :)</span>
|
||||
</div>
|
||||
|
||||
+11
-14
@@ -1,5 +1,6 @@
|
||||
defmodule PinchflatWeb.Router do
|
||||
use PinchflatWeb, :router
|
||||
import Phoenix.LiveDashboard.Router
|
||||
|
||||
# IMPORTANT: `strip_trailing_extension` in endpoint.ex removes
|
||||
# the extension from the path
|
||||
@@ -11,6 +12,7 @@ defmodule PinchflatWeb.Router do
|
||||
plug :put_root_layout, html: {PinchflatWeb.Layouts, :root}
|
||||
plug :protect_from_forgery
|
||||
plug :put_secure_browser_headers
|
||||
plug :allow_iframe_embed
|
||||
end
|
||||
|
||||
pipeline :api do
|
||||
@@ -45,21 +47,12 @@ defmodule PinchflatWeb.Router do
|
||||
get "/media/:uuid/stream", MediaItems.MediaItemController, :stream
|
||||
end
|
||||
|
||||
# Enable LiveDashboard and Swoosh mailbox preview in development
|
||||
if Application.compile_env(:pinchflat, :dev_routes) do
|
||||
# If you want to use the LiveDashboard in production, you should put
|
||||
# it behind authentication and allow only admins to access it.
|
||||
# If your application does not have an admins-only section yet,
|
||||
# you can use Plug.BasicAuth to set up some basic authentication
|
||||
# as long as you are also using SSL (which you should anyway).
|
||||
import Phoenix.LiveDashboard.Router
|
||||
scope "/dev" do
|
||||
pipe_through :browser
|
||||
|
||||
scope "/dev" do
|
||||
pipe_through :browser
|
||||
|
||||
live_dashboard "/dashboard", metrics: PinchflatWeb.Telemetry
|
||||
forward "/mailbox", Plug.Swoosh.MailboxPreview
|
||||
end
|
||||
live_dashboard "/dashboard",
|
||||
metrics: PinchflatWeb.Telemetry,
|
||||
ecto_repos: [Pinchflat.Repo]
|
||||
end
|
||||
|
||||
defp maybe_basic_auth(conn, opts) do
|
||||
@@ -84,4 +77,8 @@ defmodule PinchflatWeb.Router do
|
||||
defp credential_set?(credential) do
|
||||
credential && credential != ""
|
||||
end
|
||||
|
||||
defp allow_iframe_embed(conn, _opts) do
|
||||
delete_resp_header(conn, "x-frame-options")
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user