Merge branch 'feature/ingest-blurhash' into 'develop'

Ingest blurhash for attachments if they were federated

Closes #2294

See merge request pleroma/pleroma!3133
This commit is contained in:
feld 2020-11-11 22:37:16 +00:00
commit ccec59047b
7 changed files with 14 additions and 4 deletions

View File

@ -15,6 +15,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do
field(:type, :string) field(:type, :string)
field(:mediaType, :string, default: "application/octet-stream") field(:mediaType, :string, default: "application/octet-stream")
field(:name, :string) field(:name, :string)
field(:blurhash, :string)
embeds_many :url, UrlObjectValidator, primary_key: false do embeds_many :url, UrlObjectValidator, primary_key: false do
field(:type, :string) field(:type, :string)
@ -41,7 +42,7 @@ def changeset(struct, data) do
|> fix_url() |> fix_url()
struct struct
|> cast(data, [:type, :mediaType, :name]) |> cast(data, [:type, :mediaType, :name, :blurhash])
|> cast_embed(:url, with: &url_changeset/2) |> cast_embed(:url, with: &url_changeset/2)
|> validate_inclusion(:type, ~w[Link Document Audio Image Video]) |> validate_inclusion(:type, ~w[Link Document Audio Image Video])
|> validate_required([:type, :mediaType, :url]) |> validate_required([:type, :mediaType, :url])

View File

@ -252,6 +252,7 @@ def fix_attachments(%{"attachment" => attachment} = object) when is_list(attachm
} }
|> Maps.put_if_present("mediaType", media_type) |> Maps.put_if_present("mediaType", media_type)
|> Maps.put_if_present("name", data["name"]) |> Maps.put_if_present("name", data["name"])
|> Maps.put_if_present("blurhash", data["blurhash"])
else else
nil nil
end end

View File

@ -435,7 +435,8 @@ def render("attachment.json", %{attachment: attachment}) do
text_url: href, text_url: href,
type: type, type: type,
description: attachment["name"], description: attachment["name"],
pleroma: %{mime_type: media_type} pleroma: %{mime_type: media_type},
blurhash: attachment["blurhash"]
} }
end end

View File

@ -33,7 +33,8 @@ test "it turns mastodon attachments into our attachments" do
"http://mastodon.example.org/system/media_attachments/files/000/000/002/original/334ce029e7bfb920.jpg", "http://mastodon.example.org/system/media_attachments/files/000/000/002/original/334ce029e7bfb920.jpg",
"type" => "Document", "type" => "Document",
"name" => nil, "name" => nil,
"mediaType" => "image/jpeg" "mediaType" => "image/jpeg",
"blurhash" => "UD9jJz~VSbR#xT$~%KtQX9R,WAs9RjWBs:of"
} }
{:ok, attachment} = {:ok, attachment} =
@ -50,6 +51,7 @@ test "it turns mastodon attachments into our attachments" do
] = attachment.url ] = attachment.url
assert attachment.mediaType == "image/jpeg" assert attachment.mediaType == "image/jpeg"
assert attachment.blurhash == "UD9jJz~VSbR#xT$~%KtQX9R,WAs9RjWBs:of"
end end
test "it handles our own uploads" do test "it handles our own uploads" do

View File

@ -69,6 +69,7 @@ test "Funkwhale Audio object" do
"mediaType" => "audio/ogg", "mediaType" => "audio/ogg",
"type" => "Link", "type" => "Link",
"name" => nil, "name" => nil,
"blurhash" => nil,
"url" => [ "url" => [
%{ %{
"href" => "href" =>

View File

@ -54,6 +54,7 @@ test "it remaps video URLs as attachments if necessary" do
"type" => "Link", "type" => "Link",
"mediaType" => "video/mp4", "mediaType" => "video/mp4",
"name" => nil, "name" => nil,
"blurhash" => nil,
"url" => [ "url" => [
%{ %{
"href" => "href" =>
@ -76,6 +77,7 @@ test "it remaps video URLs as attachments if necessary" do
"type" => "Link", "type" => "Link",
"mediaType" => "video/mp4", "mediaType" => "video/mp4",
"name" => nil, "name" => nil,
"blurhash" => nil,
"url" => [ "url" => [
%{ %{
"href" => "href" =>

View File

@ -420,6 +420,7 @@ test "attachments" do
"href" => "someurl" "href" => "someurl"
} }
], ],
"blurhash" => "UJJ8X[xYW,%Jtq%NNFbXB5j]IVM|9GV=WHRn",
"uuid" => 6 "uuid" => 6
} }
@ -431,7 +432,8 @@ test "attachments" do
preview_url: "someurl", preview_url: "someurl",
text_url: "someurl", text_url: "someurl",
description: nil, description: nil,
pleroma: %{mime_type: "image/png"} pleroma: %{mime_type: "image/png"},
blurhash: "UJJ8X[xYW,%Jtq%NNFbXB5j]IVM|9GV=WHRn"
} }
api_spec = Pleroma.Web.ApiSpec.spec() api_spec = Pleroma.Web.ApiSpec.spec()