Handle incoming emoji.
authorRoger Braun <roger@rogerbraun.net>
Sat, 16 Sep 2017 14:27:48 +0000 (16:27 +0200)
committerRoger Braun <roger@rogerbraun.net>
Sat, 16 Sep 2017 14:27:48 +0000 (16:27 +0200)
lib/pleroma/web/ostatus/handlers/note_handler.ex
test/fixtures/incoming_note_activity.xml
test/web/ostatus/ostatus_test.exs

index 0b06f8f02d17c1fc4709bd503578d15572536146..dda5c7d5ea5dd15983c3812098fbd1bb355e3944 100644 (file)
@@ -52,6 +52,17 @@ defmodule Pleroma.Web.OStatus.NoteHandler do
     |> Enum.filter(&(&1))
   end
 
+  def get_emoji(entry) do
+    try do
+      :xmerl_xpath.string('//link[@rel="emoji"]', entry)
+      |> Enum.reduce(%{}, fn(emoji, acc) ->
+        Map.put(acc, XML.string_from_xpath("@name", emoji), XML.string_from_xpath("@href", emoji))
+      end)
+    rescue
+      _e -> nil
+    end
+  end
+
   def make_to_list(actor, mentions) do
     [
       actor.follower_address
@@ -95,6 +106,7 @@ defmodule Pleroma.Web.OStatus.NoteHandler do
          note <- CommonAPI.Utils.make_note_data(actor.ap_id, to, context, content_html, attachments, inReplyToActivity, []),
          note <- note |> Map.put("id", id) |> Map.put("tag", tags),
          note <- note |> Map.put("published", date),
+         note <- note |> Map.put("emoji", get_emoji(entry)),
          note <- add_external_url(note, entry),
          # TODO: Handle this case in make_note_data
          note <- (if inReplyTo && !inReplyToActivity, do: note |> Map.put("inReplyTo", inReplyTo), else: note)
index e54b25e39642ca1a29fb269017edc6a34bda54a8..21eda2d305a569669602f6649348e8918ffc156b 100644 (file)
@@ -4,6 +4,8 @@
  <title>New note by lambda</title>
  <content type="html">@&lt;a href=&quot;http://pleroma.example.org:4000/users/lain3&quot; class=&quot;h-card mention&quot;&gt;lain3&lt;/a&gt;</content>
  <link rel="alternate" type="text/html" href="http://gs.example.org:4040/index.php/notice/29"/>
+ <link name="marko" rel="emoji" href="marko.png" />
+ <link name="reimu" rel="emoji" href="reimu.png" />
  <status_net notice_id="29"></status_net>
  <activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
  <published>2017-04-23T14:51:03+00:00</published>
index ee2b79ffa6d8566783689fbf49255a7007fe4f81..95038b73ca328887205a88af10030fc480379d13 100644 (file)
@@ -24,6 +24,7 @@ defmodule Pleroma.Web.OStatusTest do
     assert activity.data["object"]["published"] == "2017-04-23T14:51:03+00:00"
     assert activity.data["context"] == "tag:gs.example.org:4040,2017-04-23:objectType=thread:nonce=f09e22f58abd5c7b"
     assert "http://pleroma.example.org:4000/users/lain3" in activity.data["to"]
+    assert activity.data["object"]["emoji"] == %{ "marko" => "marko.png", "reimu" => "reimu.png" }
     assert activity.local == false
   end