diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/user.ex | 42 | 
1 files changed, 32 insertions, 10 deletions
| diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 021207de9..09bcf0cb4 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -5,7 +5,7 @@ defmodule Pleroma.User do    alias Pleroma.{Repo, User, Object, Web, Activity, Notification}    alias Comeonin.Pbkdf2    alias Pleroma.Web.{OStatus, Websub} -  alias Pleroma.Web.ActivityPub.Utils +  alias Pleroma.Web.ActivityPub.{Utils, ActivityPub}    schema "users" do      field :bio, :string @@ -113,7 +113,7 @@ defmodule Pleroma.User do    end    def reset_password(user, data) do -    Repo.update(password_update_changeset(user, data)) +    update_and_set_cache(password_update_changeset(user, data))    end    def register_changeset(struct, params \\ %{}) do @@ -157,7 +157,7 @@ defmodule Pleroma.User do        follower = follower        |> follow_changeset(%{following: following}) -      |> Repo.update +      |> update_and_set_cache        {:ok, _} = update_follower_count(followed) @@ -173,7 +173,7 @@ defmodule Pleroma.User do        { :ok, follower } = follower        |> follow_changeset(%{following: following}) -      |> Repo.update +      |> update_and_set_cache        {:ok, followed} = update_follower_count(followed) @@ -191,6 +191,17 @@ defmodule Pleroma.User do      Repo.get_by(User, ap_id: ap_id)    end +  def update_and_set_cache(changeset) do +    with {:ok, user} <- Repo.update(changeset) do +      Cachex.set(:user_cache, "ap_id:#{user.ap_id}", user) +      Cachex.set(:user_cache, "nickname:#{user.nickname}", user) +      Cachex.set(:user_cache, "user_info:#{user.id}", user_info(user)) +      {:ok, user} +    else +      e -> e +    end +  end +    def get_cached_by_ap_id(ap_id) do      key = "ap_id:#{ap_id}"      Cachex.get!(:user_cache, key, fallback: fn(_) -> get_by_ap_id(ap_id) end) @@ -245,7 +256,7 @@ defmodule Pleroma.User do      cs = info_changeset(user, %{info: new_info}) -    Repo.update(cs) +    update_and_set_cache(cs)    end    def update_note_count(%User{} = user) do @@ -259,7 +270,7 @@ defmodule Pleroma.User do      cs = info_changeset(user, %{info: new_info}) -    Repo.update(cs) +    update_and_set_cache(cs)    end    def update_follower_count(%User{} = user) do @@ -274,7 +285,7 @@ defmodule Pleroma.User do      cs = info_changeset(user, %{info: new_info}) -    Repo.update(cs) +    update_and_set_cache(cs)    end    def get_notified_from_activity(%Activity{data: %{"to" => to}}) do @@ -312,7 +323,7 @@ defmodule Pleroma.User do      new_info = Map.put(user.info, "blocks", new_blocks)      cs = User.info_changeset(user, %{info: new_info}) -    Repo.update(cs) +    update_and_set_cache(cs)    end    def unblock(user, %{ap_id: ap_id}) do @@ -321,7 +332,7 @@ defmodule Pleroma.User do      new_info = Map.put(user.info, "blocks", new_blocks)      cs = User.info_changeset(user, %{info: new_info}) -    Repo.update(cs) +    update_and_set_cache(cs)    end    def blocks?(user, %{ap_id: ap_id}) do @@ -337,7 +348,7 @@ defmodule Pleroma.User do    def deactivate (%User{} = user) do      new_info = Map.put(user.info, "deactivated", true)      cs = User.info_changeset(user, %{info: new_info}) -    Repo.update(cs) +    update_and_set_cache(cs)    end    def delete (%User{} = user) do @@ -352,6 +363,17 @@ defmodule Pleroma.User do      friends      |> Enum.each(fn (followed) -> User.unfollow(user, followed) end) +    query = from a in Activity, +      where: a.actor == ^user.ap_id + +    Repo.all(query) +    |> Enum.each(fn (activity) -> +      case activity.data["type"] do +        "Create" -> ActivityPub.delete(Object.get_by_ap_id(activity.data["object"]["id"])) +        _ -> "Doing nothing" # TODO: Do something with likes, follows, repeats. +      end +    end) +      :ok    end  end | 
