Merge pull request 'Restore preview cards tests and update their OpenAPI description' (#7444) from gitlab-mr-iid-4067 into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/7444
This commit is contained in:
commit
b9ef1e2182
8 changed files with 275 additions and 98 deletions
|
|
@ -356,34 +356,6 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do
|
|||
}
|
||||
end
|
||||
|
||||
def card_operation do
|
||||
%Operation{
|
||||
tags: ["Retrieve status information"],
|
||||
deprecated: true,
|
||||
summary: "Preview card",
|
||||
description: "Deprecated in favor of card property inlined on Status entity",
|
||||
operationId: "StatusController.card",
|
||||
parameters: [id_param()],
|
||||
security: [%{"oAuth" => ["read:statuses"]}],
|
||||
responses: %{
|
||||
200 =>
|
||||
Operation.response("Card", "application/json", %Schema{
|
||||
type: :object,
|
||||
nullable: true,
|
||||
properties: %{
|
||||
type: %Schema{type: :string, enum: ["link", "photo", "video", "rich"]},
|
||||
provider_name: %Schema{type: :string, nullable: true},
|
||||
provider_url: %Schema{type: :string, format: :uri},
|
||||
url: %Schema{type: :string, format: :uri},
|
||||
image: %Schema{type: :string, nullable: true, format: :uri},
|
||||
title: %Schema{type: :string},
|
||||
description: %Schema{type: :string}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def favourited_by_operation do
|
||||
%Operation{
|
||||
tags: ["Retrieve status information"],
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
defmodule Pleroma.Web.ApiSpec.Schemas.ChatMessage do
|
||||
alias OpenApiSpex.Schema
|
||||
alias Pleroma.Web.ApiSpec.Schemas.Emoji
|
||||
alias Pleroma.Web.ApiSpec.Schemas.PreviewCard
|
||||
|
||||
require OpenApiSpex
|
||||
|
||||
|
|
@ -22,36 +23,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.ChatMessage do
|
|||
emojis: %Schema{type: :array, items: Emoji},
|
||||
attachment: %Schema{type: :object, nullable: true},
|
||||
card: %Schema{
|
||||
type: :object,
|
||||
nullable: true,
|
||||
description: "Preview card for links included within status content",
|
||||
required: [:url, :title, :description, :type],
|
||||
properties: %{
|
||||
type: %Schema{
|
||||
type: :string,
|
||||
enum: ["link", "photo", "video", "rich"],
|
||||
description: "The type of the preview card"
|
||||
},
|
||||
provider_name: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
description: "The provider of the original resource"
|
||||
},
|
||||
provider_url: %Schema{
|
||||
type: :string,
|
||||
format: :uri,
|
||||
description: "A link to the provider of the original resource"
|
||||
},
|
||||
url: %Schema{type: :string, format: :uri, description: "Location of linked resource"},
|
||||
image: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
format: :uri,
|
||||
description: "Preview thumbnail"
|
||||
},
|
||||
title: %Schema{type: :string, description: "Title of linked resource"},
|
||||
description: %Schema{type: :string, description: "Description of preview"}
|
||||
}
|
||||
allOf: [PreviewCard],
|
||||
nullable: true
|
||||
},
|
||||
unread: %Schema{type: :boolean, description: "Whether a message has been marked as read."}
|
||||
},
|
||||
|
|
|
|||
109
lib/pleroma/web/api_spec/schemas/preview_card.ex
Normal file
109
lib/pleroma/web/api_spec/schemas/preview_card.ex
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
# Pleroma: A lightweight social networking server
|
||||
# Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.ApiSpec.Schemas.PreviewCard do
|
||||
alias OpenApiSpex.Schema
|
||||
alias Pleroma.Web.ApiSpec.Schemas.Account
|
||||
|
||||
require OpenApiSpex
|
||||
|
||||
OpenApiSpex.schema(%{
|
||||
title: "PreviewCard",
|
||||
description: "Preview card for a link included within status or chat message content",
|
||||
type: :object,
|
||||
required: [
|
||||
:url,
|
||||
:title,
|
||||
:description,
|
||||
:language,
|
||||
:type,
|
||||
:authors,
|
||||
:author_name,
|
||||
:author_url,
|
||||
:provider_name,
|
||||
:provider_url,
|
||||
:html,
|
||||
:width,
|
||||
:height,
|
||||
:image,
|
||||
:image_description,
|
||||
:embed_url,
|
||||
:blurhash,
|
||||
:published_at
|
||||
],
|
||||
properties: %{
|
||||
url: %Schema{type: :string, format: :uri, description: "Location of linked resource"},
|
||||
title: %Schema{type: :string, description: "Title of linked resource"},
|
||||
description: %Schema{type: :string, description: "Description of preview"},
|
||||
language: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
description: "Language of the linked resource"
|
||||
},
|
||||
type: %Schema{
|
||||
type: :string,
|
||||
enum: ["link", "photo", "video", "rich"],
|
||||
description: "The type of the preview card"
|
||||
},
|
||||
authors: %Schema{
|
||||
type: :array,
|
||||
description: "Fediverse accounts of the authors of the original resource",
|
||||
items: %Schema{
|
||||
type: :object,
|
||||
required: [:name, :url, :account],
|
||||
properties: %{
|
||||
name: %Schema{type: :string},
|
||||
url: %Schema{type: :string},
|
||||
account: %Schema{allOf: [Account], nullable: true}
|
||||
}
|
||||
}
|
||||
},
|
||||
author_name: %Schema{type: :string, description: "Author of the original resource"},
|
||||
author_url: %Schema{
|
||||
type: :string,
|
||||
description: "Link to the author of the original resource"
|
||||
},
|
||||
provider_name: %Schema{
|
||||
type: :string,
|
||||
description: "The provider of the original resource"
|
||||
},
|
||||
provider_url: %Schema{
|
||||
type: :string,
|
||||
description: "A link to the provider of the original resource"
|
||||
},
|
||||
html: %Schema{
|
||||
type: :string,
|
||||
format: :html,
|
||||
description: "HTML to be used for generating the preview card"
|
||||
},
|
||||
width: %Schema{type: :integer, description: "Width of preview, in pixels"},
|
||||
height: %Schema{type: :integer, description: "Height of preview, in pixels"},
|
||||
image: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
format: :uri,
|
||||
description: "Preview thumbnail"
|
||||
},
|
||||
image_description: %Schema{
|
||||
type: :string,
|
||||
description: "Alternate text that describes what is in the thumbnail"
|
||||
},
|
||||
embed_url: %Schema{
|
||||
type: :string,
|
||||
description: "Used for photo embeds, instead of custom `html`"
|
||||
},
|
||||
blurhash: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
description:
|
||||
"A hash computed by the [BlurHash algorithm](https://github.com/woltapp/blurhash), for generating colorful preview thumbnails when media has not been downloaded yet."
|
||||
},
|
||||
published_at: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
description: "Publication date of the linked resource"
|
||||
}
|
||||
}
|
||||
})
|
||||
end
|
||||
|
|
@ -9,6 +9,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do
|
|||
alias Pleroma.Web.ApiSpec.Schemas.Emoji
|
||||
alias Pleroma.Web.ApiSpec.Schemas.FlakeID
|
||||
alias Pleroma.Web.ApiSpec.Schemas.Poll
|
||||
alias Pleroma.Web.ApiSpec.Schemas.PreviewCard
|
||||
alias Pleroma.Web.ApiSpec.Schemas.Tag
|
||||
alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope
|
||||
|
||||
|
|
@ -31,40 +32,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do
|
|||
},
|
||||
bookmarked: %Schema{type: :boolean, description: "Have you bookmarked this status?"},
|
||||
card: %Schema{
|
||||
type: :object,
|
||||
nullable: true,
|
||||
description: "Preview card for links included within status content",
|
||||
required: [:url, :title, :description, :type],
|
||||
properties: %{
|
||||
type: %Schema{
|
||||
type: :string,
|
||||
enum: ["link", "photo", "video", "rich"],
|
||||
description: "The type of the preview card"
|
||||
},
|
||||
provider_name: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
description: "The provider of the original resource"
|
||||
},
|
||||
provider_url: %Schema{
|
||||
type: :string,
|
||||
format: :uri,
|
||||
description: "A link to the provider of the original resource"
|
||||
},
|
||||
url: %Schema{type: :string, format: :uri, description: "Location of linked resource"},
|
||||
image: %Schema{
|
||||
type: :string,
|
||||
nullable: true,
|
||||
format: :uri,
|
||||
description: "Preview thumbnail"
|
||||
},
|
||||
image_description: %Schema{
|
||||
type: :string,
|
||||
description: "Alternate text that describes what is in the thumbnail"
|
||||
},
|
||||
title: %Schema{type: :string, description: "Title of linked resource"},
|
||||
description: %Schema{type: :string, description: "Description of preview"}
|
||||
}
|
||||
allOf: [PreviewCard],
|
||||
nullable: true
|
||||
},
|
||||
content: %Schema{type: :string, format: :html, description: "HTML-encoded status content"},
|
||||
text: %Schema{
|
||||
|
|
|
|||
|
|
@ -587,14 +587,25 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
|
|||
video_url = proxied_url(rich_media["video"], page_url_data)
|
||||
|
||||
%{
|
||||
type: "link",
|
||||
provider_name: page_url_data.host,
|
||||
provider_url: page_url_data.scheme <> "://" <> page_url_data.host,
|
||||
type: card_type(rich_media["type"]),
|
||||
provider_name: rich_media["provider_name"] || page_url_data.host,
|
||||
provider_url:
|
||||
rich_media["provider_url"] || page_url_data.scheme <> "://" <> page_url_data.host,
|
||||
url: page_url,
|
||||
image: image_url,
|
||||
image_description: rich_media["image:alt"] || "",
|
||||
title: rich_media["title"] || "",
|
||||
description: rich_media["description"] || "",
|
||||
language: nil,
|
||||
authors: [],
|
||||
author_name: rich_media["author_name"] || "",
|
||||
author_url: rich_media["author_url"] || "",
|
||||
html: rich_media["html"] || "",
|
||||
width: card_dimension(rich_media["width"]),
|
||||
height: card_dimension(rich_media["height"]),
|
||||
embed_url: rich_media["embed_url"] || "",
|
||||
blurhash: nil,
|
||||
published_at: nil,
|
||||
pleroma: %{
|
||||
opengraph:
|
||||
rich_media
|
||||
|
|
@ -699,6 +710,20 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
|
|||
%{content: content, detected_source_language: detected_source_language, provider: provider}
|
||||
end
|
||||
|
||||
defp card_type(type) when type in ["link", "photo", "video", "rich"], do: type
|
||||
defp card_type(_), do: "link"
|
||||
|
||||
defp card_dimension(value) when is_integer(value) and value >= 0, do: value
|
||||
|
||||
defp card_dimension(value) when is_binary(value) do
|
||||
case Integer.parse(value) do
|
||||
{dimension, ""} when dimension >= 0 -> dimension
|
||||
_ -> 0
|
||||
end
|
||||
end
|
||||
|
||||
defp card_dimension(_), do: 0
|
||||
|
||||
def get_reply_to(activity, %{replied_to_activities: replied_to_activities}) do
|
||||
object = Object.normalize(activity, fetch: false)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue