Resolve merge conflict
[akkoma] / lib / pleroma / list.ex
index 657d42626aed33f3050e2fc1e516284225a2988e..a75dc006ee6a661fc6b0f729e07068df8dad97dc 100644 (file)
@@ -1,7 +1,11 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 defmodule Pleroma.List do
   use Ecto.Schema
   import Ecto.{Changeset, Query}
-  alias Pleroma.{User, Repo}
+  alias Pleroma.{User, Repo, Activity}
 
   schema "lists" do
     belongs_to(:user, Pleroma.User)
@@ -23,7 +27,7 @@ defmodule Pleroma.List do
     |> validate_required([:following])
   end
 
-  def for_user(user, opts) do
+  def for_user(user, _opts) do
     query =
       from(
         l in Pleroma.List,
@@ -35,7 +39,7 @@ defmodule Pleroma.List do
     Repo.all(query)
   end
 
-  def get(%{id: user_id} = _user, id) do
+  def get(id, %{id: user_id} = _user) do
     query =
       from(
         l in Pleroma.List,
@@ -46,14 +50,48 @@ defmodule Pleroma.List do
     Repo.one(query)
   end
 
-  def get_following(%Pleroma.List{following: following} = list) do
-    q = from(
-      u in User,
-      where: u.follower_address in ^following
-    )
+  def get_following(%Pleroma.List{following: following} = _list) do
+    q =
+      from(
+        u in User,
+        where: u.follower_address in ^following
+      )
+
     {:ok, Repo.all(q)}
   end
 
+  # Get lists the activity should be streamed to.
+  def get_lists_from_activity(%Activity{actor: ap_id}) do
+    actor = User.get_cached_by_ap_id(ap_id)
+
+    query =
+      from(
+        l in Pleroma.List,
+        where: fragment("? && ?", l.following, ^[actor.follower_address])
+      )
+
+    Repo.all(query)
+  end
+
+  # Get lists to which the account belongs.
+  def get_lists_account_belongs(%User{} = owner, account_id) do
+    user = Repo.get(User, account_id)
+
+    query =
+      from(
+        l in Pleroma.List,
+        where:
+          l.user_id == ^owner.id and
+            fragment(
+              "? = ANY(?)",
+              ^user.follower_address,
+              l.following
+            )
+      )
+
+    Repo.all(query)
+  end
+
   def rename(%Pleroma.List{} = list, title) do
     list
     |> title_changeset(%{title: title})
@@ -65,7 +103,6 @@ defmodule Pleroma.List do
     Repo.insert(list)
   end
 
-  # TODO check that user is following followed
   def follow(%Pleroma.List{following: following} = list, %User{} = followed) do
     update_follows(list, %{following: Enum.uniq([followed.follower_address | following])})
   end