diff options
| author | kaniini <nenolod@gmail.com> | 2019-03-22 00:25:35 +0000 | 
|---|---|---|
| committer | kaniini <nenolod@gmail.com> | 2019-03-22 00:25:35 +0000 | 
| commit | b548181b52c4397d5034cfd95b2ef7e05c9c9c22 (patch) | |
| tree | a847bb70d52da43b2f0cca45f7ea49cb4e664c5a /lib | |
| parent | bf8b29e080a6a8a369abb53a26229bb0544de1c0 (diff) | |
| parent | a223e65f35da158ef79f05f65316920dcecaa54b (diff) | |
| download | pleroma-b548181b52c4397d5034cfd95b2ef7e05c9c9c22.tar.gz pleroma-b548181b52c4397d5034cfd95b2ef7e05c9c9c22.zip | |
Merge branch 'feature/mastoapi-ext-conversation-id' into 'develop'
Mastodon API: add conversation_id extension
See merge request pleroma/pleroma!961
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 29 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/status_view.ex | 11 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api.ex | 30 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/twitter_api_controller.ex | 3 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/views/activity_view.ex | 3 | 
5 files changed, 42 insertions, 34 deletions
| diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index b7513ef28..fcdfea8e1 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -344,4 +344,33 @@ defmodule Pleroma.Web.CommonAPI.Utils do    end    def get_report_statuses(_, _), do: {:ok, nil} + +  # DEPRECATED mostly, context objects are now created at insertion time. +  def context_to_conversation_id(context) do +    with %Object{id: id} <- Object.get_cached_by_ap_id(context) do +      id +    else +      _e -> +        changeset = Object.context_mapping(context) + +        case Repo.insert(changeset) do +          {:ok, %{id: id}} -> +            id + +          # This should be solved by an upsert, but it seems ecto +          # has problems accessing the constraint inside the jsonb. +          {:error, _} -> +            Object.get_cached_by_ap_id(context).id +        end +    end +  end + +  def conversation_id_to_context(id) do +    with %Object{data: %{"id" => context}} <- Repo.get(Object, id) do +      context +    else +      _e -> +        {:error, "No such conversation"} +    end +  end  end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 209119dd5..1ca8338cc 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -46,6 +46,14 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do      end    end +  defp get_context_id(%{data: %{"context_id" => context_id}}) when not is_nil(context_id), +    do: context_id + +  defp get_context_id(%{data: %{"context" => context}}) when is_binary(context), +    do: Utils.context_to_conversation_id(context) + +  defp get_context_id(_), do: nil +    def render("index.json", opts) do      replied_to_activities = get_replied_to_activities(opts.activities) @@ -186,7 +194,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do        language: nil,        emojis: build_emojis(activity.data["object"]["emoji"]),        pleroma: %{ -        local: activity.local +        local: activity.local, +        conversation_id: get_context_id(activity)        }      }    end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index d57100491..9978c7f64 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -5,7 +5,6 @@  defmodule Pleroma.Web.TwitterAPI.TwitterAPI do    alias Pleroma.Activity    alias Pleroma.Mailer -  alias Pleroma.Object    alias Pleroma.Repo    alias Pleroma.User    alias Pleroma.UserEmail @@ -282,35 +281,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do      _activities = Repo.all(q)    end -  # DEPRECATED mostly, context objects are now created at insertion time. -  def context_to_conversation_id(context) do -    with %Object{id: id} <- Object.get_cached_by_ap_id(context) do -      id -    else -      _e -> -        changeset = Object.context_mapping(context) - -        case Repo.insert(changeset) do -          {:ok, %{id: id}} -> -            id - -          # This should be solved by an upsert, but it seems ecto -          # has problems accessing the constraint inside the jsonb. -          {:error, _} -> -            Object.get_cached_by_ap_id(context).id -        end -    end -  end - -  def conversation_id_to_context(id) do -    with %Object{data: %{"id" => context}} <- Repo.get(Object, id) do -      context -    else -      _e -> -        {:error, "No such conversation"} -    end -  end -    def get_external_profile(for_user, uri) do      with %User{} = user <- User.get_or_fetch(uri) do        {:ok, UserView.render("show.json", %{user: user, for: for_user})} diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index 6ea0b110b..62cce18dc 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -16,6 +16,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Visibility    alias Pleroma.Web.CommonAPI +  alias Pleroma.Web.CommonAPI.Utils    alias Pleroma.Web.OAuth.Token    alias Pleroma.Web.TwitterAPI.ActivityView    alias Pleroma.Web.TwitterAPI.NotificationView @@ -278,7 +279,7 @@ defmodule Pleroma.Web.TwitterAPI.Controller do    end    def fetch_conversation(%{assigns: %{user: user}} = conn, %{"id" => id}) do -    with context when is_binary(context) <- TwitterAPI.conversation_id_to_context(id), +    with context when is_binary(context) <- Utils.conversation_id_to_context(id),           activities <-             ActivityPub.fetch_activities_for_context(context, %{               "blocking_user" => user, diff --git a/lib/pleroma/web/twitter_api/views/activity_view.ex b/lib/pleroma/web/twitter_api/views/activity_view.ex index 4926f007e..fe7d49975 100644 --- a/lib/pleroma/web/twitter_api/views/activity_view.ex +++ b/lib/pleroma/web/twitter_api/views/activity_view.ex @@ -15,7 +15,6 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do    alias Pleroma.Web.MastodonAPI.StatusView    alias Pleroma.Web.TwitterAPI.ActivityView    alias Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter -  alias Pleroma.Web.TwitterAPI.TwitterAPI    alias Pleroma.Web.TwitterAPI.UserView    import Ecto.Query @@ -78,7 +77,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do    defp get_context_id(%{data: %{"context" => context}}, options) do      cond do        id = options[:context_ids][context] -> id -      true -> TwitterAPI.context_to_conversation_id(context) +      true -> Utils.context_to_conversation_id(context)      end    end | 
