From 321a04babeed5c64acfc806b4573d9f4aad97421 Mon Sep 17 00:00:00 2001
From: Thomas Citharel <tcit@tcit.fr>
Date: Tue, 19 Nov 2019 15:36:25 +0100
Subject: [PATCH] Fix duplicate tags when editing an event with tags in
 description

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
---
 lib/service/activity_pub/converter/utils.ex | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/lib/service/activity_pub/converter/utils.ex b/lib/service/activity_pub/converter/utils.ex
index 54e815e9c..ba2f3a2af 100644
--- a/lib/service/activity_pub/converter/utils.ex
+++ b/lib/service/activity_pub/converter/utils.ex
@@ -15,7 +15,7 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Utils do
   def fetch_tags(tags) when is_list(tags) do
     Logger.debug("fetching tags")
 
-    Enum.reduce(tags, [], &fetch_tag/2)
+    tags |> Enum.flat_map(&fetch_tag/1) |> Enum.uniq() |> Enum.map(&existing_tag_or_data/1)
   end
 
   @spec fetch_mentions([map()]) :: [map()]
@@ -64,23 +64,20 @@ defmodule Mobilizon.Service.ActivityPub.Converter.Utils do
     }
   end
 
-  defp fetch_tag(tag, acc) when is_map(tag) do
+  defp fetch_tag(tag) when is_map(tag) do
     case tag["type"] do
       "Hashtag" ->
-        acc ++ [existing_tag_or_data(tag["name"])]
+        [tag_without_hash(tag["name"])]
 
       _err ->
-        acc
+        []
     end
   end
 
-  defp fetch_tag(tag, acc) when is_bitstring(tag) do
-    acc ++ [existing_tag_or_data(tag)]
-  end
+  defp fetch_tag(tag) when is_bitstring(tag), do: [tag_without_hash(tag)]
 
-  defp existing_tag_or_data("#" <> tag_title) do
-    existing_tag_or_data(tag_title)
-  end
+  defp tag_without_hash("#" <> tag_title), do: tag_title
+  defp tag_without_hash(tag_title), do: tag_title
 
   defp existing_tag_or_data(tag_title) do
     case Events.get_tag_by_title(tag_title) do