use Ecto.Schema
alias Pleroma.EctoType.ActivityPub.ObjectValidators
+ alias Pleroma.Object.Fetcher
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes
alias Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations
alias Pleroma.Web.ActivityPub.Transmogrifier
- alias Pleroma.Object.Fetcher
import Ecto.Changeset
end
field(:replies, {:array, ObjectValidators.ObjectID}, default: [])
+ field(:source, :map)
end
def cast_and_apply(data) do
Fetcher.fetch_and_contain_remote_object_from_id(first) do
Map.put(data, "replies", replies)
else
- {:error, e} ->
+ {:error, _} ->
Logger.error("Could not fetch replies for #{first}")
- IO.inspect(e)
Map.put(data, "replies", [])
end
end
defp fix_replies(data), do: data
+ # https://github.com/misskey-dev/misskey/pull/8787
+ defp fix_misskey_content(%{"source" => %{"mediaType" => "text/x.misskeymarkdown"}} = object),
+ do: object
+
+ defp fix_misskey_content(%{"_misskey_content" => content} = object) do
+ object
+ |> Map.put("source", %{"content" => content, "mediaType" => "text/x.misskeymarkdown"})
+ |> Map.delete("_misskey_content")
+ end
+
+ defp fix_misskey_content(data), do: data
+
+ defp fix_source(%{"source" => source} = object) when is_binary(source) do
+ object
+ |> Map.put("source", %{"content" => source})
+ end
+
+ defp fix_source(object), do: object
+
defp fix(data) do
data
|> CommonFixes.fix_actor()
|> fix_url()
|> fix_tag()
|> fix_replies()
+ |> fix_source()
+ |> fix_misskey_content()
|> Transmogrifier.fix_emoji()
|> Transmogrifier.fix_content_map()
end