mirror of
https://akkoma.dev/AkkomaGang/akkoma.git
synced 2024-11-14 21:24:41 +00:00
38 lines
978 B
Elixir
38 lines
978 B
Elixir
|
defmodule Pleroma.Repo.Migrations.AutolinkerToLinkify do
|
||
|
use Ecto.Migration
|
||
|
|
||
|
alias Pleroma.Repo
|
||
|
alias Pleroma.ConfigDB
|
||
|
|
||
|
@autolinker_path %{group: :auto_linker, key: :opts}
|
||
|
@linkify_path %{group: :pleroma, key: Pleroma.Formatter}
|
||
|
|
||
|
@compat_opts [:class, :rel, :new_window, :truncate, :strip_prefix, :extra]
|
||
|
|
||
|
def change do
|
||
|
with {:ok, {old, new}} <- maybe_get_params() do
|
||
|
move_config(old, new)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp move_config(%{} = old, %{} = new) do
|
||
|
{:ok, _} = ConfigDB.update_or_create(new)
|
||
|
{:ok, _} = ConfigDB.delete(old)
|
||
|
:ok
|
||
|
end
|
||
|
|
||
|
defp maybe_get_params() do
|
||
|
with %ConfigDB{value: opts} <- ConfigDB.get_by_params(@autolinker_path),
|
||
|
%{} = opts <- transform_opts(opts),
|
||
|
%{} = linkify_params <- Map.put(@linkify_path, :value, opts) do
|
||
|
{:ok, {@autolinker_path, linkify_params}}
|
||
|
end
|
||
|
end
|
||
|
|
||
|
defp transform_opts(opts) when is_list(opts) do
|
||
|
opts
|
||
|
|> Enum.into(%{})
|
||
|
|> Map.take(@compat_opts)
|
||
|
end
|
||
|
end
|