diff options
| author | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2023-03-27 10:05:47 +0000 | 
|---|---|---|
| committer | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2023-03-27 10:05:47 +0000 | 
| commit | 4f7c11b2814f22fd7f28832462569a78faf223b5 (patch) | |
| tree | 9b2b130d23abb0e64f2601e755c9897c3d5abc5e /lib | |
| parent | 6d0cc8fa2af293280f1816410794d2afdbc2294b (diff) | |
| parent | c5d946bc92fa77f457b07e4fb9d113ff15cf87de (diff) | |
| download | pleroma-4f7c11b2814f22fd7f28832462569a78faf223b5.tar.gz pleroma-4f7c11b2814f22fd7f28832462569a78faf223b5.zip | |
Merge branch 'tusooa/3073-react-legacy' into 'develop'
Fix emoji reactions for legacy 2-tuple formats
Closes #3073
See merge request pleroma/pleroma!3861
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/object.ex | 26 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 6 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/status_view.ex | 4 | ||||
| -rw-r--r-- | lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex | 7 | 
4 files changed, 31 insertions, 12 deletions
| diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 38accae5d..aa137d250 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -425,4 +425,30 @@ defmodule Pleroma.Object do    end    def object_data_hashtags(_), do: [] + +  def get_emoji_reactions(object) do +    reactions = object.data["reactions"] + +    if is_list(reactions) or is_map(reactions) do +      reactions +      |> Enum.map(fn +        [_emoji, users, _maybe_url] = item when is_list(users) -> +          item + +        [emoji, users] when is_list(users) -> +          [emoji, users, nil] + +        # This case is here to process the Map situation, which will happen +        # only with the legacy two-value format. +        {emoji, users} when is_list(users) -> +          [emoji, users, nil] + +        _ -> +          nil +      end) +      |> Enum.reject(&is_nil/1) +    else +      [] +    end +  end  end diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 448cd1829..437220077 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -408,11 +408,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do    end    def get_cached_emoji_reactions(object) do -    if is_list(object.data["reactions"]) do -      object.data["reactions"] -    else -      [] -    end +    Object.get_emoji_reactions(object)    end    @spec add_like_to_object(Activity.t(), Object.t()) :: diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 95efd9fd0..dea22f9c2 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -334,8 +334,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do        end      emoji_reactions = -      object.data -      |> Map.get("reactions", []) +      object +      |> Object.get_emoji_reactions()        |> EmojiReactionController.filter_allowed_users(          opts[:for],          Map.get(opts, :with_muted, false) diff --git a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex index e095fa04a..662cc15d6 100644 --- a/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex @@ -28,8 +28,8 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionController do    def index(%{assigns: %{user: user}} = conn, %{id: activity_id} = params) do      with true <- Pleroma.Config.get([:instance, :show_reactions]),           %Activity{} = activity <- Activity.get_by_id_with_object(activity_id), -         %Object{data: %{"reactions" => reactions}} when is_list(reactions) <- -           Object.normalize(activity, fetch: false) do +         %Object{} = object <- Object.normalize(activity, fetch: false), +         reactions <- Object.get_emoji_reactions(object) do        reactions =          reactions          |> filter(params) @@ -60,9 +60,6 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionController do      reactions      |> Stream.map(fn        [emoji, users, url] when is_list(users) -> filter_emoji.(emoji, users, url) -      {emoji, users, url} when is_list(users) -> filter_emoji.(emoji, users, url) -      {emoji, users} when is_list(users) -> filter_emoji.(emoji, users, nil) -      _ -> nil      end)      |> Stream.reject(&is_nil/1)    end | 
