Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
5a46d37a
Commit
5a46d37a
authored
Feb 19, 2019
by
vaartis
Browse files
Update the mute implementation to the current codebase
Make it part of the info thing (and do a migration to ensure it's there)
parent
465b547c
Changes
6
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/user.ex
View file @
5a46d37a
...
...
@@ -889,21 +889,27 @@ def blocks_import(%User{} = blocker, blocked_identifiers) when is_list(blocked_i
end
def
mute
(
muter
,
%
User
{
ap_id:
ap_id
})
do
mutes
=
muter
.
info
[
"mutes"
]
||
[]
new_mutes
=
Enum
.
uniq
([
ap_id
|
mutes
])
new_info
=
Map
.
put
(
muter
.
info
,
"mutes"
,
new_mutes
)
info_cng
=
muter
.
info
|>
User
.
Info
.
add_to_mutes
(
ap_id
)
cng
=
change
(
muter
)
|>
put_embed
(
:info
,
info_cng
)
User
.
info_changeset
(
muter
,
%{
info:
new_info
})
|>
update_and_set_cache
()
update_and_set_cache
(
cng
)
end
def
unmute
(
us
er
,
%{
ap_id:
ap_id
})
do
mutes
=
user
.
info
[
"mutes"
]
||
[]
new_mutes
=
List
.
delete
(
mutes
,
ap_id
)
new_info
=
Map
.
put
(
u
ser
.
i
nfo
,
"mutes"
,
new_mutes
)
def
unmute
(
mut
er
,
%{
ap_id:
ap_id
})
do
info_cng
=
muter
.
info
|>
U
ser
.
I
nfo
.
remove_from_mutes
(
ap_id
)
User
.
info_changeset
(
user
,
%{
info:
new_info
})
|>
update_and_set_cache
()
cng
=
change
(
muter
)
|>
put_embed
(
:info
,
info_cng
)
update_and_set_cache
(
cng
)
end
def
block
(
blocker
,
%
User
{
ap_id:
ap_id
}
=
blocked
)
do
...
...
@@ -948,7 +954,7 @@ def unblock(blocker, %{ap_id: ap_id}) do
update_and_set_cache
(
cng
)
end
def
mutes?
(
user
,
%{
ap_id:
ap_id
}),
do
:
Enum
.
member?
(
user
.
info
[
"
mutes
"
]
||
[]
,
ap_id
)
def
mutes?
(
user
,
%{
ap_id:
ap_id
}),
do
:
Enum
.
member?
(
user
.
info
.
mutes
,
ap_id
)
def
blocks?
(
user
,
%{
ap_id:
ap_id
})
do
blocks
=
user
.
info
.
blocks
...
...
@@ -961,6 +967,9 @@ def blocks?(user, %{ap_id: ap_id}) do
end
)
end
def
muted_users
(
user
),
do
:
Repo
.
all
(
from
(
u
in
User
,
where:
u
.
ap_id
in
^
user
.
info
.
mutes
))
def
blocked_users
(
user
),
do
:
Repo
.
all
(
from
(
u
in
User
,
where:
u
.
ap_id
in
^
user
.
info
.
blocks
))
...
...
lib/pleroma/user/info.ex
View file @
5a46d37a
...
...
@@ -19,6 +19,7 @@ defmodule Pleroma.User.Info do
field
(
:default_scope
,
:string
,
default:
"public"
)
field
(
:blocks
,
{
:array
,
:string
},
default:
[])
field
(
:domain_blocks
,
{
:array
,
:string
},
default:
[])
field
(
:mutes
,
{
:array
,
:string
},
default:
[])
field
(
:deactivated
,
:boolean
,
default:
false
)
field
(
:no_rich_text
,
:boolean
,
default:
false
)
field
(
:ap_enabled
,
:boolean
,
default:
false
)
...
...
@@ -74,6 +75,14 @@ def set_follower_count(info, number) do
|>
validate_required
([
:follower_count
])
end
def
set_mutes
(
info
,
mutes
)
do
params
=
%{
mutes:
mutes
}
info
|>
cast
(
params
,
[
:mutes
])
|>
validate_required
([
:mutes
])
end
def
set_blocks
(
info
,
blocks
)
do
params
=
%{
blocks:
blocks
}
...
...
@@ -82,6 +91,14 @@ def set_blocks(info, blocks) do
|>
validate_required
([
:blocks
])
end
def
add_to_mutes
(
info
,
muted
)
do
set_mutes
(
info
,
Enum
.
uniq
([
muted
|
info
.
mutes
]))
end
def
remove_from_mutes
(
info
,
muted
)
do
set_mutes
(
info
,
List
.
delete
(
info
.
mutes
,
muted
))
end
def
add_to_block
(
info
,
blocked
)
do
set_blocks
(
info
,
Enum
.
uniq
([
blocked
|
info
.
blocks
]))
end
...
...
lib/pleroma/web/activity_pub/activity_pub.ex
View file @
5a46d37a
...
...
@@ -577,7 +577,7 @@ defp restrict_reblogs(query, %{"exclude_reblogs" => val}) when val == "true" or
defp
restrict_reblogs
(
query
,
_
),
do
:
query
defp
restrict_muted
(
query
,
%{
"muting_user"
=>
%
User
{
info:
info
}})
do
mutes
=
info
[
"
mutes
"
]
||
[]
mutes
=
info
.
mutes
from
(
activity
in
query
,
...
...
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
5a46d37a
...
...
@@ -769,22 +769,34 @@ def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
def
mute
(%{
assigns:
%{
user:
muter
}}
=
conn
,
%{
"id"
=>
id
})
do
with
%
User
{}
=
muted
<-
Repo
.
get
(
User
,
id
),
{
:ok
,
muter
}
<-
User
.
mute
(
muter
,
muted
)
do
render
(
conn
,
AccountView
,
"relationship.json"
,
%{
user:
muter
,
target:
muted
})
conn
|>
put_view
(
AccountView
)
|>
render
(
"relationship.json"
,
%{
user:
muter
,
target:
muted
})
else
{
:error
,
message
}
->
conn
|>
put_resp_content_type
(
"application/json"
)
|>
send_resp
(
403
,
Jason
.
encode!
(%{
"error"
=>
message
}))
end
end
def
unmute
(%{
assigns:
%{
user:
muter
}}
=
conn
,
%{
"id"
=>
id
})
do
with
%
User
{}
=
muted
<-
Repo
.
get
(
User
,
id
),
{
:ok
,
muter
}
<-
User
.
unmute
(
muter
,
muted
)
do
render
(
conn
,
AccountView
,
"relationship.json"
,
%{
user:
muter
,
target:
muted
})
conn
|>
put_view
(
AccountView
)
|>
render
(
"relationship.json"
,
%{
user:
muter
,
target:
muted
})
else
{
:error
,
message
}
->
conn
|>
put_resp_content_type
(
"application/json"
)
|>
send_resp
(
403
,
Jason
.
encode!
(%{
"error"
=>
message
}))
end
end
# TODO: Use proper query
def
mutes
(%{
assigns:
%{
user:
user
}}
=
conn
,
_
)
do
with
muted_users
<-
user
.
info
[
"mutes"
]
||
[],
accounts
<-
Enum
.
map
(
muted_users
,
fn
ap_id
->
User
.
get_cached_by_ap_id
(
ap_id
)
end
)
do
res
=
AccountView
.
render
(
"accounts.json"
,
users:
accounts
,
for:
user
,
as:
:user
)
with
muted_accounts
<-
User
.
muted_users
(
user
)
do
res
=
AccountView
.
render
(
"accounts.json"
,
users:
muted_accounts
,
for:
user
,
as:
:user
)
json
(
conn
,
res
)
end
end
...
...
lib/pleroma/web/mastodon_api/views/account_view.ex
View file @
5a46d37a
...
...
@@ -48,7 +48,6 @@ def render("relationship.json", %{user: user, target: target}) do
followed_by:
User
.
following?
(
target
,
user
),
blocking:
User
.
blocks?
(
user
,
target
),
muting:
User
.
mutes?
(
user
,
target
),
muting:
false
,
muting_notifications:
false
,
requested:
requested
,
domain_blocking:
false
,
...
...
priv/repo/migrations/20190219192317_create_user_mutes.exs
0 → 100644
View file @
5a46d37a
defmodule
Pleroma
.
Repo
.
Migrations
.
CreateUserMutes
do
use
Ecto
.
Migration
def
change
do
execute
"UPDATE users SET info = jsonb_set(info, '{mutes}', '[]'::jsonb);"
end
end
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment