X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Factivity_pub%2Futils.ex;h=b32b7240eb201b03bc936d215fb67cc7e50ef868;hb=b52672294e8cbc6f1ff53b9c7193e55781db84a6;hp=ed5ae021e4f026eb15119808c41d788154be8182;hpb=70024632ba32121bd63a439b2d708d4b4ff1a190;p=akkoma diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index ed5ae021e..b32b7240e 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -29,7 +29,12 @@ defmodule Pleroma.Web.ActivityPub.Utils do Enqueues an activity for federation if it's local """ def maybe_federate(%Activity{local: true} = activity) do - Pleroma.Web.Federator.enqueue(:publish, activity) + priority = case activity.data["type"] do + "Delete" -> 10 + "Create" -> 1 + _ -> 5 + end + Pleroma.Web.Federator.enqueue(:publish, activity, priority) :ok end def maybe_federate(_), do: :ok @@ -64,7 +69,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do Inserts a full object if it is contained in an activity. """ def insert_full_object(%{"object" => object_data}) when is_map(object_data) do - with {:ok, object} <- Object.create(object_data) do + with {:ok, _} <- Object.create(object_data) do :ok end end @@ -88,9 +93,13 @@ defmodule Pleroma.Web.ActivityPub.Utils do @doc """ Returns an existing like if a user already liked an object """ - def get_existing_like(actor, %{data: %{"id" => id}} = object) do + def get_existing_like(actor, %{data: %{"id" => id}}) do query = from activity in Activity, - where: fragment("? @> ?", activity.data, ^%{actor: actor, object: id, type: "Like"}) + where: fragment("(?)->>'actor' = ?", activity.data, ^actor), + # this is to use the index + where: fragment("coalesce((?)->'object'->>'id', (?)->>'object') = ?", activity.data, activity.data, ^id), + where: fragment("(?)->>'type' = 'Like'", activity.data) + Repo.one(query) end @@ -99,7 +108,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do "type" => "Like", "actor" => ap_id, "object" => id, - "to" => [User.ap_followers(actor), object.data["actor"]], + "to" => [actor.follower_address, object.data["actor"]], "context" => object.data["context"] } @@ -152,7 +161,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do query = from activity in Activity, where: fragment("? @> ?", activity.data, ^%{type: "Follow", actor: follower_id, object: followed_id}), - order_by: [desc: :inserted_at], + order_by: [desc: :id], limit: 1 Repo.one(query) end @@ -167,7 +176,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do "type" => "Announce", "actor" => ap_id, "object" => id, - "to" => [User.ap_followers(user), object.data["actor"]], + "to" => [user.follower_address, object.data["actor"]], "context" => object.data["context"] } @@ -196,8 +205,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do def make_create_data(params, additional) do published = params.published || make_date() - - activity = %{ + %{ "type" => "Create", "to" => params.to |> Enum.uniq, "actor" => params.actor.ap_id,