mirror of
https://git.pleroma.social/pleroma/pleroma.git
synced 2024-12-24 00:50:29 +00:00
Merge branch 'release/1.1.3' into 'stable'
1.1.3 release See merge request pleroma/pleroma!1884
This commit is contained in:
commit
a43b899e94
5 changed files with 59 additions and 42 deletions
|
@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
|
## [1.1.3] - 2019-10-25
|
||||||
|
### Fixed
|
||||||
|
- Blocked users showing up in notifications collapsed as if they were muted
|
||||||
|
- `pleroma_ctl` not working on Debian's default shell
|
||||||
|
|
||||||
## [1.1.2] - 2019-10-18
|
## [1.1.2] - 2019-10-18
|
||||||
### Fixed
|
### Fixed
|
||||||
- `pleroma_ctl` trying to connect to a running instance when generating the config, which of course doesn't exist.
|
- `pleroma_ctl` trying to connect to a running instance when generating the config, which of course doesn't exist.
|
||||||
|
|
|
@ -34,41 +34,49 @@ defmodule Pleroma.Notification do
|
||||||
end
|
end
|
||||||
|
|
||||||
def for_user_query(user, opts \\ []) do
|
def for_user_query(user, opts \\ []) do
|
||||||
query =
|
Notification
|
||||||
Notification
|
|> where(user_id: ^user.id)
|
||||||
|> where(user_id: ^user.id)
|
|> where(
|
||||||
|> where(
|
[n, a],
|
||||||
[n, a],
|
fragment(
|
||||||
|
"? not in (SELECT ap_id FROM users WHERE info->'deactivated' @> 'true')",
|
||||||
|
a.actor
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|> join(:inner, [n], activity in assoc(n, :activity))
|
||||||
|
|> join(:left, [n, a], object in Object,
|
||||||
|
on:
|
||||||
fragment(
|
fragment(
|
||||||
"? not in (SELECT ap_id FROM users WHERE info->'deactivated' @> 'true')",
|
"(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)",
|
||||||
a.actor
|
object.data,
|
||||||
|
a.data
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|> join(:inner, [n], activity in assoc(n, :activity))
|
|> preload([n, a, o], activity: {a, object: o})
|
||||||
|> join(:left, [n, a], object in Object,
|
|> exclude_muted(user, opts)
|
||||||
on:
|
|> exclude_blocked(user)
|
||||||
fragment(
|
end
|
||||||
"(?->>'id') = COALESCE((? -> 'object'::text) ->> 'id'::text)",
|
|
||||||
object.data,
|
|
||||||
a.data
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|> preload([n, a, o], activity: {a, object: o})
|
|
||||||
|
|
||||||
if opts[:with_muted] do
|
defp exclude_blocked(query, user) do
|
||||||
query
|
query
|
||||||
else
|
|> where([n, a], a.actor not in ^user.info.blocks)
|
||||||
where(query, [n, a], a.actor not in ^user.info.muted_notifications)
|
|> where(
|
||||||
|> where([n, a], a.actor not in ^user.info.blocks)
|
[n, a],
|
||||||
|> where(
|
fragment("substring(? from '.*://([^/]*)')", a.actor) not in ^user.info.domain_blocks
|
||||||
[n, a],
|
)
|
||||||
fragment("substring(? from '.*://([^/]*)')", a.actor) not in ^user.info.domain_blocks
|
end
|
||||||
)
|
|
||||||
|> join(:left, [n, a], tm in Pleroma.ThreadMute,
|
defp exclude_muted(query, _, %{with_muted: true}) do
|
||||||
on: tm.user_id == ^user.id and tm.context == fragment("?->>'context'", a.data)
|
query
|
||||||
)
|
end
|
||||||
|> where([n, a, o, tm], is_nil(tm.user_id))
|
|
||||||
end
|
defp exclude_muted(query, user, _opts) do
|
||||||
|
query
|
||||||
|
|> where([n, a], a.actor not in ^user.info.muted_notifications)
|
||||||
|
|> join(:left, [n, a], tm in Pleroma.ThreadMute,
|
||||||
|
on: tm.user_id == ^user.id and tm.context == fragment("?->>'context'", a.data)
|
||||||
|
)
|
||||||
|
|> where([n, a, o, tm], is_nil(tm.user_id))
|
||||||
end
|
end
|
||||||
|
|
||||||
def for_user(user, opts \\ %{}) do
|
def for_user(user, opts \\ %{}) do
|
||||||
|
|
2
mix.exs
2
mix.exs
|
@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do
|
||||||
def project do
|
def project do
|
||||||
[
|
[
|
||||||
app: :pleroma,
|
app: :pleroma,
|
||||||
version: version("1.1.2"),
|
version: version("1.1.3"),
|
||||||
elixir: "~> 1.7",
|
elixir: "~> 1.7",
|
||||||
elixirc_paths: elixirc_paths(Mix.env()),
|
elixirc_paths: elixirc_paths(Mix.env()),
|
||||||
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
|
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
|
||||||
|
|
|
@ -140,11 +140,15 @@ else
|
||||||
FULL_ARGS="$*"
|
FULL_ARGS="$*"
|
||||||
|
|
||||||
ACTION="$1"
|
ACTION="$1"
|
||||||
shift
|
if [ $# -gt 0 ]; then
|
||||||
echo "$1" | grep "^-" >/dev/null
|
shift
|
||||||
|
fi
|
||||||
|
echo "$1" | grep "^-" >/dev/null
|
||||||
if [ $? -eq 1 ]; then
|
if [ $? -eq 1 ]; then
|
||||||
SUBACTION="$1"
|
SUBACTION="$1"
|
||||||
shift
|
if [ $# -gt 0 ]; then
|
||||||
|
shift
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$ACTION" = "update" ]; then
|
if [ "$ACTION" = "update" ]; then
|
||||||
|
|
|
@ -680,7 +680,7 @@ defmodule Pleroma.NotificationTest do
|
||||||
assert Notification.for_user(user) == []
|
assert Notification.for_user(user) == []
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it returns notifications for muted user with notifications and with_muted parameter" do
|
test "it returns notifications from a muted user when with_muted is set" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
muted = insert(:user)
|
muted = insert(:user)
|
||||||
{:ok, user} = User.mute(user, muted)
|
{:ok, user} = User.mute(user, muted)
|
||||||
|
@ -690,27 +690,27 @@ defmodule Pleroma.NotificationTest do
|
||||||
assert length(Notification.for_user(user, %{with_muted: true})) == 1
|
assert length(Notification.for_user(user, %{with_muted: true})) == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it returns notifications for blocked user and with_muted parameter" do
|
test "it doesn't return notifications from a blocked user when with_muted is set" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
blocked = insert(:user)
|
blocked = insert(:user)
|
||||||
{:ok, user} = User.block(user, blocked)
|
{:ok, user} = User.block(user, blocked)
|
||||||
|
|
||||||
{:ok, _activity} = CommonAPI.post(blocked, %{"status" => "hey @#{user.nickname}"})
|
{:ok, _activity} = CommonAPI.post(blocked, %{"status" => "hey @#{user.nickname}"})
|
||||||
|
|
||||||
assert length(Notification.for_user(user, %{with_muted: true})) == 1
|
assert length(Notification.for_user(user, %{with_muted: true})) == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it returns notificatitons for blocked domain and with_muted parameter" do
|
test "it doesn't return notifications from a domain-blocked user when with_muted is set" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
blocked = insert(:user, ap_id: "http://some-domain.com")
|
blocked = insert(:user, ap_id: "http://some-domain.com")
|
||||||
{:ok, user} = User.block_domain(user, "some-domain.com")
|
{:ok, user} = User.block_domain(user, "some-domain.com")
|
||||||
|
|
||||||
{:ok, _activity} = CommonAPI.post(blocked, %{"status" => "hey @#{user.nickname}"})
|
{:ok, _activity} = CommonAPI.post(blocked, %{"status" => "hey @#{user.nickname}"})
|
||||||
|
|
||||||
assert length(Notification.for_user(user, %{with_muted: true})) == 1
|
assert length(Notification.for_user(user, %{with_muted: true})) == 0
|
||||||
end
|
end
|
||||||
|
|
||||||
test "it returns notifications for muted thread with_muted parameter" do
|
test "it returns notifications from muted threads when with_muted is set" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
another_user = insert(:user)
|
another_user = insert(:user)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue