From 271fb5ccb13cfbe38452c78d0e843840d6106cfe Mon Sep 17 00:00:00 2001
From: Francis Dinh <normandy@firemail.cc>
Date: Fri, 11 May 2018 11:59:53 -0400
Subject: [PATCH] Probably better way of handling non-follow undos in ostatus

---
 .../web/ostatus/activity_representer.ex       | 36 ++++++++++---------
 lib/pleroma/web/salmon/salmon.ex              | 11 +++---
 2 files changed, 25 insertions(+), 22 deletions(-)

diff --git a/lib/pleroma/web/ostatus/activity_representer.ex b/lib/pleroma/web/ostatus/activity_representer.ex
index 1e9d4a7fb..730a3ac11 100644
--- a/lib/pleroma/web/ostatus/activity_representer.ex
+++ b/lib/pleroma/web/ostatus/activity_representer.ex
@@ -250,23 +250,25 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenter do
 
     mentions = (activity.recipients || []) |> get_mentions
 
-    [
-      {:"activity:object-type", ['http://activitystrea.ms/schema/1.0/activity']},
-      {:"activity:verb", ['http://activitystrea.ms/schema/1.0/unfollow']},
-      {:id, h.(activity.data["id"])},
-      {:title, ['#{user.nickname} stopped following #{follow_activity.data["object"]}']},
-      {:content, [type: 'html'],
-       ['#{user.nickname} stopped following #{follow_activity.data["object"]}']},
-      {:published, h.(inserted_at)},
-      {:updated, h.(updated_at)},
-      {:"activity:object",
-       [
-         {:"activity:object-type", ['http://activitystrea.ms/schema/1.0/person']},
-         {:id, h.(follow_activity.data["object"])},
-         {:uri, h.(follow_activity.data["object"])}
-       ]},
-      {:link, [rel: 'self', type: ['application/atom+xml'], href: h.(activity.data["id"])], []}
-    ] ++ mentions ++ author
+    if follow_activity do
+      [
+        {:"activity:object-type", ['http://activitystrea.ms/schema/1.0/activity']},
+        {:"activity:verb", ['http://activitystrea.ms/schema/1.0/unfollow']},
+        {:id, h.(activity.data["id"])},
+        {:title, ['#{user.nickname} stopped following #{follow_activity.data["object"]}']},
+        {:content, [type: 'html'],
+         ['#{user.nickname} stopped following #{follow_activity.data["object"]}']},
+        {:published, h.(inserted_at)},
+        {:updated, h.(updated_at)},
+        {:"activity:object",
+         [
+           {:"activity:object-type", ['http://activitystrea.ms/schema/1.0/person']},
+           {:id, h.(follow_activity.data["object"])},
+           {:uri, h.(follow_activity.data["object"])}
+         ]},
+        {:link, [rel: 'self', type: ['application/atom+xml'], href: h.(activity.data["id"])], []}
+      ] ++ mentions ++ author
+    end
   end
 
   def to_simple_form(%{data: %{"type" => "Delete"}} = activity, user, with_author) do
diff --git a/lib/pleroma/web/salmon/salmon.ex b/lib/pleroma/web/salmon/salmon.ex
index 10542fd00..562ec3d9c 100644
--- a/lib/pleroma/web/salmon/salmon.ex
+++ b/lib/pleroma/web/salmon/salmon.ex
@@ -187,13 +187,14 @@ defmodule Pleroma.Web.Salmon do
 
   def publish(%{info: %{"keys" => keys}} = user, %{data: %{"type" => type}} = activity, poster)
       when type in @supported_activities do
-    feed =
-      ActivityRepresenter.to_simple_form(activity, user, true)
-      |> ActivityRepresenter.wrap_with_entry()
-      |> :xmerl.export_simple(:xmerl_xml)
-      |> to_string
+    feed = ActivityRepresenter.to_simple_form(activity, user, true)
 
     if feed do
+      feed =
+        ActivityRepresenter.wrap_with_entry(feed)
+        |> :xmerl.export_simple(:xmerl_xml)
+        |> to_string
+
       {:ok, private, _} = keys_from_pem(keys)
       {:ok, feed} = encode(private, feed)
 
-- 
2.49.0