fix: issue #2 auto-translate only on manual save now

This commit is contained in:
2026-07-05 19:22:44 +02:00
parent d85654d4b2
commit c735c1afa7
6 changed files with 125 additions and 44 deletions

View File

@@ -503,7 +503,9 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
active_language = socket.assigns.active_language
draft = component_current_draft(socket, post, metadata, active_language)
case persist(post, draft, active_language, metadata, :save) do
action = if keep_draft?, do: :auto_save, else: :save
case persist(post, draft, active_language, metadata, action) do
{:ok, record} ->
refreshed_post = Posts.get_post!(post.id)
_refreshed_form = persisted_form(refreshed_post, metadata, active_language)

View File

@@ -17,7 +17,7 @@ defmodule BDS.Desktop.ShellLive.PostEditor.Persistence do
canonical_language
) do
post
|> save_canonical_draft(draft)
|> save_canonical_draft(draft, action)
|> maybe_publish_post(post.id, action)
else
post.id
@@ -65,18 +65,22 @@ defmodule BDS.Desktop.ShellLive.PostEditor.Persistence do
else: dgettext("ui", "Delete this unpublished draft")
end
defp save_canonical_draft(%Post{id: post_id}, draft) do
Posts.update_post(post_id, %{
title: blank_to_nil(Map.get(draft, "title")),
excerpt: blank_to_nil(Map.get(draft, "excerpt")),
content: blank_to_nil(Map.get(draft, "content")),
tags: csv_to_list(Map.get(draft, "tags")),
categories: csv_to_list(Map.get(draft, "categories")),
author: blank_to_nil(Map.get(draft, "author")),
language: blank_to_nil(Map.get(draft, "language")),
do_not_translate: Map.get(draft, "do_not_translate", false),
template_slug: blank_to_nil(Map.get(draft, "template_slug"))
})
defp save_canonical_draft(%Post{id: post_id}, draft, action) do
Posts.update_post(
post_id,
%{
title: blank_to_nil(Map.get(draft, "title")),
excerpt: blank_to_nil(Map.get(draft, "excerpt")),
content: blank_to_nil(Map.get(draft, "content")),
tags: csv_to_list(Map.get(draft, "tags")),
categories: csv_to_list(Map.get(draft, "categories")),
author: blank_to_nil(Map.get(draft, "author")),
language: blank_to_nil(Map.get(draft, "language")),
do_not_translate: Map.get(draft, "do_not_translate", false),
template_slug: blank_to_nil(Map.get(draft, "template_slug"))
},
auto_translate: action != :auto_save
)
end
defp save_translation_draft(post_id, language, draft) do

View File

@@ -106,7 +106,6 @@ defmodule BDS.Posts do
{:ok, post} ->
:ok = Embeddings.sync_post(post)
:ok = Search.sync_post(post)
:ok = AutoTranslation.maybe_schedule(post)
{:ok, post}
error ->
@@ -114,9 +113,9 @@ defmodule BDS.Posts do
end
end
@spec update_post(String.t(), attrs()) ::
@spec update_post(String.t(), attrs(), keyword()) ::
{:ok, Post.t()} | {:error, :not_found | Ecto.Changeset.t()}
def update_post(post_id, attrs) do
def update_post(post_id, attrs, opts \\ []) do
case Repo.get(Post, post_id) do
nil ->
{:error, :not_found}
@@ -145,7 +144,13 @@ defmodule BDS.Posts do
:ok = Embeddings.sync_post(updated_post)
:ok = PostLinks.sync_post_links(updated_post)
:ok = Search.sync_post(updated_post)
:ok = AutoTranslation.maybe_schedule(updated_post)
# Auto-translation only runs on an explicit manual save from the
# editor, never on post creation or autosave.
if Keyword.get(opts, :auto_translate, false) do
:ok = AutoTranslation.maybe_schedule(updated_post)
end
{:ok, updated_post}
error ->