diff options
Diffstat (limited to 'lib/pleroma/web/twitter_api')
4 files changed, 28 insertions, 6 deletions
diff --git a/lib/pleroma/web/twitter_api/representers/activity_representer.ex b/lib/pleroma/web/twitter_api/representers/activity_representer.ex index 05d130639..bcb819200 100644 --- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex @@ -1,6 +1,6 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do use Pleroma.Web.TwitterAPI.Representers.BaseRepresenter - alias Pleroma.Web.TwitterAPI.Representers.UserRepresenter + alias Pleroma.Web.TwitterAPI.Representers.{UserRepresenter, ObjectRepresenter} alias Pleroma.Activity def to_map(%Activity{} = activity, %{user: user} = opts) do @@ -16,7 +16,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do "is_post_verb" => true, "created_at" => published, "in_reply_to_status_id" => activity.data["object"]["inReplyToStatusId"], - "statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"] + "statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"], + "attachments" => (activity.data["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts) } end end diff --git a/lib/pleroma/web/twitter_api/representers/object_representer.ex b/lib/pleroma/web/twitter_api/representers/object_representer.ex index 57ab24caa..c39b60760 100644 --- a/lib/pleroma/web/twitter_api/representers/object_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/object_representer.ex @@ -8,8 +8,13 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ObjectRepresenter do %{ url: url["href"], mimetype: url["mediaType"], - id: object.id, + id: data["uuid"], oembed: false } end + + # If we only get the naked data, wrap in an object + def to_map(%{} = data, opts) do + to_map(%Object{data: data}, opts) + end end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index 0624e73aa..ab2b1aab7 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -1,5 +1,5 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do - alias Pleroma.{User, Activity, Repo} + alias Pleroma.{User, Activity, Repo, Object} alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter @@ -8,6 +8,10 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do def create_status(user = %User{}, data = %{}) do date = DateTime.utc_now() |> DateTime.to_iso8601 + attachments = Enum.map(data["media_ids"] || [], fn (media_id) -> + Repo.get(Object, media_id).data + end) + context = ActivityPub.generate_context_id activity = %{ "type" => "Create", @@ -23,7 +27,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do "context" => context }, "published" => date, - "context" => context + "context" => context, + "attachment" => attachments } # Wire up reply info. diff --git a/lib/pleroma/web/twitter_api/twitter_api_controller.ex b/lib/pleroma/web/twitter_api/twitter_api_controller.ex index a26885bf1..2154f34f7 100644 --- a/lib/pleroma/web/twitter_api/twitter_api_controller.ex +++ b/lib/pleroma/web/twitter_api/twitter_api_controller.ex @@ -11,11 +11,22 @@ defmodule Pleroma.Web.TwitterAPI.Controller do end def status_update(%{assigns: %{user: user}} = conn, status_data) do - {:ok, activity} = TwitterAPI.create_status(user, status_data) + media_ids = extract_media_ids(status_data) + {:ok, activity} = TwitterAPI.create_status(user, %{ "status" => status_data["status"], "media_ids" => media_ids }) conn |> json_reply(200, ActivityRepresenter.to_json(activity, %{user: user})) end + defp extract_media_ids(status_data) do + with media_ids when not is_nil(media_ids) <- status_data["media_ids"], + split_ids <- String.split(media_ids, ","), + clean_ids <- Enum.reject(split_ids, fn (id) -> String.length(id) == 0 end) + do + clean_ids + else _e -> [] + end + end + def public_timeline(%{assigns: %{user: user}} = conn, params) do statuses = TwitterAPI.fetch_public_statuses(user, params) {:ok, json} = Poison.encode(statuses) |