field(:ap_id, :string)
field(:avatar, :map)
field(:local, :boolean, default: true)
- field(:info, :map, default: %{})
field(:follower_address, :string)
field(:search_distance, :float, virtual: true)
field(:last_refreshed_at, :naive_datetime)
has_many(:notifications, Notification)
+ embeds_one :info, Pleroma.User.Info
timestamps()
end
%{
following_count: length(user.following) - oneself,
- note_count: user.info["note_count"] || 0,
- follower_count: user.info["follower_count"] || 0,
- locked: user.info["locked"] || false,
- default_scope: user.info["default_scope"] || "public"
+ note_count: user.info.note_count,
+ follower_count: user.info.follower_count,
+ locked: user.info.locked,
+ default_scope: user.info.default_scope
}
end
end
def increase_note_count(%User{} = user) do
- note_count = (user.info["note_count"] || 0) + 1
- new_info = Map.put(user.info, "note_count", note_count)
-
- cs = info_changeset(user, %{info: new_info})
+ info_cng = User.Info.add_to_note_count(user.info, 1)
+ cng = change(user)
+ |> put_embed(:info, info_cng)
- update_and_set_cache(cs)
+ update_and_set_cache(cng)
end
def decrease_note_count(%User{} = user) do
- note_count = user.info["note_count"] || 0
- note_count = if note_count <= 0, do: 0, else: note_count - 1
- new_info = Map.put(user.info, "note_count", note_count)
-
- cs = info_changeset(user, %{info: new_info})
+ info_cng = User.Info.add_to_note_count(user.info, -1)
+ cng = change(user)
+ |> put_embed(:info, info_cng)
- update_and_set_cache(cs)
+ update_and_set_cache(cng)
end
def update_note_count(%User{} = user) do
update_and_set_cache(cs)
end
- def get_notified_from_activity_query(to, false) do
+ def get_users_from_set_query(ap_ids, false) do
from(
u in User,
- where: u.ap_id in ^to
+ where: u.ap_id in ^ap_ids
)
end
- def get_notified_from_activity_query(to, true) do
- query = get_notified_from_activity_query(to, false)
+ def get_users_from_set_query(ap_ids, true) do
+ query = get_users_from_set_query(ap_ids, false)
from(
u in query,
)
end
- def get_notified_from_activity(activity, local_only \\ true)
-
- def get_notified_from_activity(%Activity{data: %{"to" => to} = data}, local_only) do
- object = Object.normalize(data["object"])
-
- # somehow, get an AS2 object, preferring the normalized object if we have one
- object_data =
- if object do
- object.data
- else
- if is_map(data["object"]) do
- data["object"]
- else
- %{}
- end
- end
-
- # finally extract AS2 mentions from this object
- tagged_mentions =
- if object_data["tag"] do
- object_data["tag"]
- |> Enum.filter(fn x -> is_map(x) end)
- |> Enum.filter(fn x -> x["type"] == "Mention" end)
- |> Enum.map(fn x -> x["href"] end)
- else
- []
- end
-
- # ensure all mentioned users are unique
- to =
- (to ++ tagged_mentions)
- |> Enum.uniq()
-
- query = get_notified_from_activity_query(to, local_only)
-
- Repo.all(query)
+ def get_users_from_set(ap_ids, local_only \\ true) do
+ get_users_from_set_query(ap_ids, local_only)
+ |> Repo.all()
end
- def get_notified_from_activity(_, _), do: []
-
def get_recipients_from_activity(%Activity{recipients: to}) do
query =
from(
Repo.all(query)
end
- def search(query, resolve) do
+ def search(query, resolve \\ false) do
# strip the beginning @ off if there is a query
query = String.trim_leading(query, "@")
end
def deactivate(%User{} = user, status \\ true) do
- new_info = Map.put(user.info, "deactivated", status)
- cs = User.info_changeset(user, %{info: new_info})
- update_and_set_cache(cs)
+ info_cng = User.Info.set_activation_status(user.info, status)
+ cng = change(user)
+ |> put_embed(:info, info_cng)
+
+ update_and_set_cache(cng)
end
def delete(%User{} = user) do