feat: switch to phoenix liveview
Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
59
lib/bds/desktop/media_controller.ex
Normal file
59
lib/bds/desktop/media_controller.ex
Normal file
@@ -0,0 +1,59 @@
|
||||
defmodule BDS.Desktop.MediaController do
|
||||
@moduledoc false
|
||||
|
||||
use Phoenix.Controller, formats: [:html]
|
||||
|
||||
alias BDS.Media
|
||||
alias BDS.Media.Media, as: MediaRecord
|
||||
alias BDS.Projects
|
||||
alias BDS.Repo
|
||||
|
||||
def thumbnail(conn, %{"media_id" => media_id} = params) do
|
||||
case active_media_thumbnail(media_id, Map.get(params, "size")) do
|
||||
{:ok, content_type, path} ->
|
||||
conn
|
||||
|> Plug.Conn.put_resp_content_type(content_type)
|
||||
|> Plug.Conn.send_file(200, path)
|
||||
|
||||
:error ->
|
||||
send_resp(conn, 404, "not found")
|
||||
end
|
||||
end
|
||||
|
||||
defp active_media_thumbnail(media_id, size) do
|
||||
with %{} = project <- Projects.get_active_project(),
|
||||
%MediaRecord{} = media <- Repo.get(MediaRecord, media_id),
|
||||
true <- media.project_id == project.id,
|
||||
relative_path when is_binary(relative_path) <- Media.thumbnail_paths(media)[thumbnail_size(size)],
|
||||
absolute_path = Path.join(Projects.project_data_dir(project), relative_path),
|
||||
true <- File.exists?(absolute_path) do
|
||||
{:ok, thumbnail_content_type(relative_path), absolute_path}
|
||||
else
|
||||
_other -> :error
|
||||
end
|
||||
rescue
|
||||
error in [Exqlite.Error, DBConnection.OwnershipError] ->
|
||||
if match?(%Exqlite.Error{}, error) and not String.contains?(Exception.message(error), "no such table") do
|
||||
reraise error, __STACKTRACE__
|
||||
end
|
||||
|
||||
:error
|
||||
end
|
||||
|
||||
defp thumbnail_size(size) do
|
||||
case to_string(size || "small") do
|
||||
"medium" -> :medium
|
||||
"large" -> :large
|
||||
"ai" -> :ai
|
||||
_other -> :small
|
||||
end
|
||||
end
|
||||
|
||||
defp thumbnail_content_type(path) do
|
||||
case Path.extname(path) do
|
||||
".jpg" -> "image/jpeg"
|
||||
".jpeg" -> "image/jpeg"
|
||||
_other -> "image/webp"
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user