From 32831f371ff426ac0c6f5d6c1381313f5f92af42 Mon Sep 17 00:00:00 2001
From: Ivan Tashkinov <ivantashkinov@gmail.com>
Date: Sat, 12 Sep 2020 10:33:42 +0300
Subject: [PATCH] [#2497] Media preview proxy: redirecting to media proxy url
 in case of preview error or unsupported content type.

---
 .../web/media_proxy/media_proxy_controller.ex      | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex
index ff7fd2409..08d62a51a 100644
--- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex
+++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex
@@ -91,8 +91,8 @@ defp handle_preview("video/" <> _ = _content_type, conn, media_proxy_url) do
     handle_video_preview(conn, media_proxy_url)
   end
 
-  defp handle_preview(content_type, conn, _media_proxy_url) do
-    send_resp(conn, :unprocessable_entity, "Unsupported content type: #{content_type}.")
+  defp handle_preview(_unsupported_content_type, conn, media_proxy_url) do
+    fallback_on_preview_error(conn, media_proxy_url)
   end
 
   defp handle_png_preview(conn, media_proxy_url) do
@@ -114,7 +114,7 @@ defp handle_png_preview(conn, media_proxy_url) do
       |> send_resp(200, thumbnail_binary)
     else
       _ ->
-        send_resp(conn, :failed_dependency, "Can't handle preview.")
+        fallback_on_preview_error(conn, media_proxy_url)
     end
   end
 
@@ -132,7 +132,7 @@ defp handle_jpeg_preview(conn, media_proxy_url) do
       |> send_resp(200, thumbnail_binary)
     else
       _ ->
-        send_resp(conn, :failed_dependency, "Can't handle preview.")
+        fallback_on_preview_error(conn, media_proxy_url)
     end
   end
 
@@ -144,10 +144,14 @@ defp handle_video_preview(conn, media_proxy_url) do
       |> send_resp(200, thumbnail_binary)
     else
       _ ->
-        send_resp(conn, :failed_dependency, "Can't handle preview.")
+        fallback_on_preview_error(conn, media_proxy_url)
     end
   end
 
+  defp fallback_on_preview_error(conn, media_proxy_url) do
+    redirect(conn, external: media_proxy_url)
+  end
+
   defp put_preview_response_headers(
          conn,
          [content_type, filename] = _content_info \\ ["image/jpeg", "preview.jpg"]