From: Roger Braun Date: Thu, 1 Jun 2017 09:24:03 +0000 (+0200) Subject: Merge branch 'develop' of ssh.gitgud.io:lambadalambda/pleroma into develop X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=c7fdd1b7ff6e7a08389395d555862eaec9721b08;p=akkoma Merge branch 'develop' of ssh.gitgud.io:lambadalambda/pleroma into develop --- c7fdd1b7ff6e7a08389395d555862eaec9721b08 diff --cc lib/pleroma/web/ostatus/ostatus.ex index f8bcf4718,29291b7a5..df80d137a --- a/lib/pleroma/web/ostatus/ostatus.ex +++ b/lib/pleroma/web/ostatus/ostatus.ex @@@ -152,6 -149,105 +152,26 @@@ defmodule Pleroma.Web.OStatus d |> Enum.map(fn (category) -> string_from_xpath("/category/@term", category) end) end - def handle_note(entry, doc \\ nil) do - content_html = get_content(entry) - - [author] = :xmerl_xpath.string('//author[1]', doc) - {:ok, actor} = find_make_or_update_user(author) - inReplyTo = string_from_xpath("//thr:in-reply-to[1]/@ref", entry) - - if inReplyTo && !Object.get_cached_by_ap_id(inReplyTo) do - inReplyToHref = string_from_xpath("//thr:in-reply-to[1]/@href", entry) - if inReplyToHref do - fetch_activity_from_html_url(inReplyToHref) - else - Logger.debug("Couldn't find a href link to #{inReplyTo}") - end - end - - context = (string_from_xpath("//ostatus:conversation[1]", entry) || "") |> String.trim - - attachments = get_attachments(entry) - - context = with %{data: %{"context" => context}} <- Object.get_cached_by_ap_id(inReplyTo) do - context - else _e -> - if String.length(context) > 0 do - context - else - Utils.generate_context_id - end - end - - tags = get_tags(entry) - - to = [ - "https://www.w3.org/ns/activitystreams#Public", - User.ap_followers(actor) - ] - - mentions = :xmerl_xpath.string('//link[@rel="mentioned" and @ostatus:object-type="http://activitystrea.ms/schema/1.0/person"]', entry) - |> Enum.map(fn(person) -> string_from_xpath("@href", person) end) - - to = to ++ mentions - - date = string_from_xpath("//published", entry) - id = string_from_xpath("//id", entry) - - object = %{ - "id" => id, - "type" => "Note", - "to" => to, - "content" => content_html, - "published" => date, - "context" => context, - "actor" => actor.ap_id, - "attachment" => attachments, - "tag" => tags - } - - object = if inReplyTo do - replied_to_activity = Activity.get_create_activity_by_object_ap_id(inReplyTo) - if replied_to_activity do - object - |> Map.put("inReplyTo", inReplyTo) - |> Map.put("inReplyToStatusId", replied_to_activity.id) - else - object - |> Map.put("inReplyTo", inReplyTo) - end - else - object - end - - # TODO: Bail out sooner and use transaction. - if Object.get_by_ap_id(id) do - {:ok, Activity.get_create_activity_by_object_ap_id(id)} - else - ActivityPub.create(to, actor, context, object, %{}, date, false) - end - end - + def maybe_update(doc, user) do + old_data = %{ + avatar: user.avatar, + bio: user.bio, + name: user.name + } + + with false <- user.local, + avatar <- make_avatar_object(doc), + bio when not is_nil(bio) <- string_from_xpath("//author[1]/summary", doc), + name when not is_nil(name) <- string_from_xpath("//author[1]/poco:displayName", doc), + new_data <- %{avatar: avatar, name: name, bio: bio}, + false <- new_data == old_data do + change = Ecto.Changeset.change(user, new_data) + Repo.update(change) + else e -> + {:ok, user} + end + end + def find_make_or_update_user(doc) do uri = string_from_xpath("//author/uri[1]", doc) with {:ok, user} <- find_or_make_user(uri) do diff --cc test/web/ostatus/activity_representer_test.exs index 06ffbdf69,b23334d55..ec75fc765 --- a/test/web/ostatus/activity_representer_test.exs +++ b/test/web/ostatus/activity_representer_test.exs @@@ -22,10 -18,10 +18,10 @@@ defmodule Pleroma.Web.OStatus.ActivityR #{note_activity.data["object"]["id"]} New note by #{user.nickname} #{note_activity.data["object"]["content"]} - #{inserted_at} - #{updated_at} + #{note_activity.data["published"]} + #{note_activity.data["published"]} #{note_activity.data["context"]} - + @@@ -60,10 -51,10 +51,10 @@@ #{answer.data["object"]["id"]} New note by #{user.nickname} #{answer.data["object"]["content"]} - #{inserted_at} - #{updated_at} + #{answer.data["published"]} + #{answer.data["published"]} #{answer.data["context"]} - + @@@ -103,10 -89,10 +89,10 @@@ #{announce.data["id"]} #{user.nickname} repeated a notice RT #{note.data["object"]["content"]} - #{inserted_at} - #{updated_at} + #{announce.data["published"]} + #{announce.data["published"]} #{announce.data["context"]} - + #{note_xml}