aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2020-04-14 16:32:22 +0000
committerlain <lain@soykaf.club>2020-04-14 16:32:22 +0000
commit4576520461e2e3a1c78133aaf31cb742a2a1a689 (patch)
treebdabe459c11fd9ef2f79402c6a454c3ca04fb341 /lib
parent3677a1e5785e8a753652debf37b2818e622f9ffd (diff)
downloadpleroma-4576520461e2e3a1c78133aaf31cb742a2a1a689.tar.gz
Revert "Merge branch 'issue/1276' into 'develop'"
This reverts merge request !1877
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/marker.ex45
-rw-r--r--lib/pleroma/notification.ex47
-rw-r--r--lib/pleroma/web/mastodon_api/views/marker_view.ex5
3 files changed, 15 insertions, 82 deletions
diff --git a/lib/pleroma/marker.ex b/lib/pleroma/marker.ex
index 4d82860f5..443927392 100644
--- a/lib/pleroma/marker.ex
+++ b/lib/pleroma/marker.ex
@@ -9,34 +9,24 @@ defmodule Pleroma.Marker do
import Ecto.Query
alias Ecto.Multi
- alias Pleroma.Notification
alias Pleroma.Repo
alias Pleroma.User
- alias __MODULE__
@timelines ["notifications"]
- @type t :: %__MODULE__{}
schema "markers" do
field(:last_read_id, :string, default: "")
field(:timeline, :string, default: "")
field(:lock_version, :integer, default: 0)
- field(:unread_count, :integer, default: 0, virtual: true)
belongs_to(:user, User, type: FlakeId.Ecto.CompatType)
timestamps()
end
- @doc "Gets markers by user and timeline."
- @spec get_markers(User.t(), list(String)) :: list(t())
def get_markers(user, timelines \\ []) do
- user
- |> get_query(timelines)
- |> unread_count_query()
- |> Repo.all()
+ Repo.all(get_query(user, timelines))
end
- @spec upsert(User.t(), map()) :: {:ok | :error, any()}
def upsert(%User{} = user, attrs) do
attrs
|> Map.take(@timelines)
@@ -55,27 +45,6 @@ defmodule Pleroma.Marker do
|> Repo.transaction()
end
- @spec multi_set_last_read_id(Multi.t(), User.t(), String.t()) :: Multi.t()
- def multi_set_last_read_id(multi, %User{} = user, "notifications") do
- multi
- |> Multi.run(:counters, fn _repo, _changes ->
- {:ok, %{last_read_id: Repo.one(Notification.last_read_query(user))}}
- end)
- |> Multi.insert(
- :marker,
- fn %{counters: attrs} ->
- %Marker{timeline: "notifications", user_id: user.id}
- |> struct(attrs)
- |> Ecto.Changeset.change()
- end,
- returning: true,
- on_conflict: {:replace, [:last_read_id]},
- conflict_target: [:user_id, :timeline]
- )
- end
-
- def multi_set_last_read_id(multi, _, _), do: multi
-
defp get_marker(user, timeline) do
case Repo.find_resource(get_query(user, timeline)) do
{:ok, marker} -> %__MODULE__{marker | user: user}
@@ -102,16 +71,4 @@ defmodule Pleroma.Marker do
|> by_user_id(user.id)
|> by_timeline(timelines)
end
-
- defp unread_count_query(query) do
- from(
- q in query,
- left_join: n in "notifications",
- on: n.user_id == q.user_id and n.seen == false,
- group_by: [:id],
- select_merge: %{
- unread_count: fragment("count(?)", n.id)
- }
- )
- end
end
diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
index 3084bac3b..04ee510b9 100644
--- a/lib/pleroma/notification.ex
+++ b/lib/pleroma/notification.ex
@@ -5,9 +5,7 @@
defmodule Pleroma.Notification do
use Ecto.Schema
- alias Ecto.Multi
alias Pleroma.Activity
- alias Pleroma.Marker
alias Pleroma.Notification
alias Pleroma.Object
alias Pleroma.Pagination
@@ -40,17 +38,6 @@ defmodule Pleroma.Notification do
|> cast(attrs, [:seen])
end
- @spec last_read_query(User.t()) :: Ecto.Queryable.t()
- def last_read_query(user) do
- from(q in Pleroma.Notification,
- where: q.user_id == ^user.id,
- where: q.seen == true,
- select: type(q.id, :string),
- limit: 1,
- order_by: [desc: :id]
- )
- end
-
defp for_user_query_ap_id_opts(user, opts) do
ap_id_relationships =
[:block] ++
@@ -199,23 +186,25 @@ defmodule Pleroma.Notification do
|> Repo.all()
end
- def set_read_up_to(%{id: user_id} = user, id) do
+ def set_read_up_to(%{id: user_id} = _user, id) do
query =
from(
n in Notification,
where: n.user_id == ^user_id,
where: n.id <= ^id,
where: n.seen == false,
+ update: [
+ set: [
+ seen: true,
+ updated_at: ^NaiveDateTime.utc_now()
+ ]
+ ],
# Ideally we would preload object and activities here
# but Ecto does not support preloads in update_all
select: n.id
)
- {:ok, %{ids: {_, notification_ids}}} =
- Multi.new()
- |> Multi.update_all(:ids, query, set: [seen: true, updated_at: NaiveDateTime.utc_now()])
- |> Marker.multi_set_last_read_id(user, "notifications")
- |> Repo.transaction()
+ {_, notification_ids} = Repo.update_all(query, [])
Notification
|> where([n], n.id in ^notification_ids)
@@ -232,18 +221,11 @@ defmodule Pleroma.Notification do
|> Repo.all()
end
- @spec read_one(User.t(), String.t()) ::
- {:ok, Notification.t()} | {:error, Ecto.Changeset.t()} | nil
def read_one(%User{} = user, notification_id) do
with {:ok, %Notification{} = notification} <- get(user, notification_id) do
- Multi.new()
- |> Multi.update(:update, changeset(notification, %{seen: true}))
- |> Marker.multi_set_last_read_id(user, "notifications")
- |> Repo.transaction()
- |> case do
- {:ok, %{update: notification}} -> {:ok, notification}
- {:error, :update, changeset, _} -> {:error, changeset}
- end
+ notification
+ |> changeset(%{seen: true})
+ |> Repo.update()
end
end
@@ -325,11 +307,8 @@ defmodule Pleroma.Notification do
# TODO move to sql, too.
def create_notification(%Activity{} = activity, %User{} = user, do_send \\ true) do
unless skip?(activity, user) do
- {:ok, %{notification: notification}} =
- Multi.new()
- |> Multi.insert(:notification, %Notification{user_id: user.id, activity: activity})
- |> Marker.multi_set_last_read_id(user, "notifications")
- |> Repo.transaction()
+ notification = %Notification{user_id: user.id, activity: activity}
+ {:ok, notification} = Repo.insert(notification)
if do_send do
Streamer.stream(["user", "user:notification"], notification)
diff --git a/lib/pleroma/web/mastodon_api/views/marker_view.ex b/lib/pleroma/web/mastodon_api/views/marker_view.ex
index 415dae93b..985368fe5 100644
--- a/lib/pleroma/web/mastodon_api/views/marker_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/marker_view.ex
@@ -10,10 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.MarkerView do
Map.put_new(acc, m.timeline, %{
last_read_id: m.last_read_id,
version: m.lock_version,
- updated_at: NaiveDateTime.to_iso8601(m.updated_at),
- pleroma: %{
- unread_count: m.unread_count
- }
+ updated_at: NaiveDateTime.to_iso8601(m.updated_at)
})
end)
end