Skip to content
GitLab
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
c8f31e0b
Commit
c8f31e0b
authored
Mar 09, 2019
by
Karen Konou
Browse files
Implement mastodon's reblog hiding feature
parent
41fc67aa
Changes
6
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/user.ex
View file @
c8f31e0b
...
...
@@ -1385,4 +1385,8 @@ defp paginate(query, page, page_size) do
offset:
^
((
page
-
1
)
*
page_size
)
)
end
def
showing_reblogs?
(%
User
{}
=
user
,
%
User
{}
=
target
)
do
target
.
id
not
in
user
.
info
.
muted_reblogs
end
end
lib/pleroma/user/info.ex
View file @
c8f31e0b
...
...
@@ -21,6 +21,7 @@ defmodule Pleroma.User.Info do
field
(
:blocks
,
{
:array
,
:string
},
default:
[])
field
(
:domain_blocks
,
{
:array
,
:string
},
default:
[])
field
(
:mutes
,
{
:array
,
:string
},
default:
[])
field
(
:muted_reblogs
,
{
:array
,
:string
},
default:
[])
field
(
:deactivated
,
:boolean
,
default:
false
)
field
(
:no_rich_text
,
:boolean
,
default:
false
)
field
(
:ap_enabled
,
:boolean
,
default:
false
)
...
...
@@ -259,4 +260,16 @@ def roles(%Info{is_moderator: is_moderator, is_admin: is_admin}) do
moderator:
is_moderator
}
end
def
add_reblog_mute
(
info
,
id
)
do
params
=
%{
muted_reblogs:
info
.
muted_reblogs
++
[
id
]}
cast
(
info
,
params
,
[
:muted_reblogs
])
end
def
remove_reblog_mute
(
info
,
id
)
do
params
=
%{
muted_reblogs:
List
.
delete
(
info
.
muted_reblogs
,
id
)}
cast
(
info
,
params
,
[
:muted_reblogs
])
end
end
lib/pleroma/web/activity_pub/activity_pub.ex
View file @
c8f31e0b
...
...
@@ -951,9 +951,17 @@ def contain_broken_threads(%Activity{} = activity, %User{} = user) do
entire_thread_visible_for_user?
(
activity
,
user
)
end
# filter out muted threads
def
contain_muted_boosts
(%
Activity
{
data:
%{
"type"
=>
"Announce"
}}
=
activity
,
%
User
{}
=
user
)
do
id
=
User
.
get_by_ap_id
(
activity
.
actor
)
.
id
id
not
in
user
.
info
.
muted_reblogs
end
def
contain_muted_boosts
(%
Activity
{}
=
_activity
,
%
User
{}
=
_user
),
do
:
true
# do post-processing on a specific activity
def
contain_activity
(%
Activity
{}
=
activity
,
%
User
{}
=
user
)
do
contain_broken_threads
(
activity
,
user
)
contain_broken_threads
(
activity
,
user
)
and
contain_muted_boosts
(
activity
,
user
)
end
# do post-processing on a timeline
...
...
lib/pleroma/web/common_api/common_api.ex
View file @
c8f31e0b
...
...
@@ -299,4 +299,20 @@ def report(user, data) do
{
:account
,
nil
}
->
{
:error
,
"Account not found"
}
end
end
def
hide_reblogs
(
user
,
id
)
do
if
id
not
in
user
.
info
.
muted_reblogs
do
info_changeset
=
User
.
Info
.
add_reblog_mute
(
user
.
info
,
id
)
changeset
=
Ecto
.
Changeset
.
change
(
user
)
|>
Ecto
.
Changeset
.
put_embed
(
:info
,
info_changeset
)
User
.
update_and_set_cache
(
changeset
)
end
end
def
show_reblogs
(
user
,
id
)
do
if
id
in
user
.
info
.
muted_reblogs
do
info_changeset
=
User
.
Info
.
remove_reblog_mute
(
user
.
info
,
id
)
changeset
=
Ecto
.
Changeset
.
change
(
user
)
|>
Ecto
.
Changeset
.
put_embed
(
:info
,
info_changeset
)
User
.
update_and_set_cache
(
changeset
)
end
end
end
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
c8f31e0b
...
...
@@ -723,11 +723,24 @@ def reject_follow_request(%{assigns: %{user: followed}} = conn, %{"id" => id}) d
def
follow
(%{
assigns:
%{
user:
follower
}}
=
conn
,
%{
"id"
=>
id
})
do
with
%
User
{}
=
followed
<-
Repo
.
get
(
User
,
id
),
false
<-
User
.
following?
(
follower
,
followed
),
{
:ok
,
follower
,
followed
,
_
}
<-
CommonAPI
.
follow
(
follower
,
followed
)
do
conn
|>
put_view
(
AccountView
)
|>
render
(
"relationship.json"
,
%{
user:
follower
,
target:
followed
})
else
true
->
case
conn
.
params
[
"reblogs"
]
do
true
->
CommonAPI
.
show_reblogs
(
follower
,
id
)
false
->
CommonAPI
.
hide_reblogs
(
follower
,
id
)
end
followed
=
Repo
.
get
(
User
,
id
)
conn
|>
put_view
(
AccountView
)
|>
render
(
"relationship.json"
,
%{
user:
follower
,
target:
followed
})
{
:error
,
message
}
->
conn
|>
put_resp_content_type
(
"application/json"
)
...
...
lib/pleroma/web/mastodon_api/views/account_view.ex
View file @
c8f31e0b
...
...
@@ -55,7 +55,7 @@ def render("relationship.json", %{user: %User{} = user, target: %User{} = target
muting_notifications:
false
,
requested:
requested
,
domain_blocking:
false
,
showing_reblogs:
false
,
showing_reblogs:
User
.
showing_reblogs?
(
user
,
target
)
,
endorsed:
false
}
end
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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