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
26eb11c1
Commit
26eb11c1
authored
Oct 26, 2018
by
kaniini
Browse files
activitypub: add support for filtering broken threads out of timelines
parent
ae7c79cf
Changes
3
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/activity_pub/activity_pub.ex
View file @
26eb11c1
...
...
@@ -787,4 +787,37 @@ def visible_for_user?(activity, user) do
y
=
activity
.
data
[
"to"
]
++
(
activity
.
data
[
"cc"
]
||
[])
visible_for_user?
(
activity
,
nil
)
||
Enum
.
any?
(
x
,
&
(
&1
in
y
))
end
# guard
def
entire_thread_visible_for_user?
(
nil
,
user
),
do
:
false
# child
def
entire_thread_visible_for_user?
(
%
Activity
{
data:
%{
"object"
=>
%{
"inReplyTo"
=>
_parent_id
}}}
=
tail
,
user
)
do
parent
=
Activity
.
get_in_reply_to_activity
(
tail
)
visible_for_user?
(
tail
,
user
)
&&
entire_thread_visible_for_user?
(
parent
,
user
)
end
# root
def
entire_thread_visible_for_user?
(
tail
,
user
),
do
:
visible_for_user?
(
tail
,
user
)
# filter out broken threads
def
contain_broken_threads
(%
Activity
{}
=
activity
,
%
User
{}
=
user
)
do
entire_thread_visible_for_user?
(
activity
,
user
)
end
# do post-processing on a specific activity
def
contain_activity
(%
Activity
{}
=
activity
,
%
User
{}
=
user
)
do
contain_broken_threads
(
activity
,
user
)
end
# do post-processing on a timeline
def
contain_timeline
(
timeline
,
user
)
do
timeline
|>
Enum
.
filter
(
fn
activity
->
contain_activity
(
activity
,
user
)
end
)
end
end
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
View file @
26eb11c1
...
...
@@ -223,6 +223,7 @@ def home_timeline(%{assigns: %{user: user}} = conn, params) do
activities
=
ActivityPub
.
fetch_activities
([
user
.
ap_id
|
user
.
following
],
params
)
|>
ActivityPub
.
contain_timeline
(
user
)
|>
Enum
.
reverse
()
conn
...
...
lib/pleroma/web/twitter_api/twitter_api_controller.ex
View file @
26eb11c1
...
...
@@ -79,7 +79,9 @@ def friends_timeline(%{assigns: %{user: user}} = conn, params) do
|>
Map
.
put
(
"blocking_user"
,
user
)
|>
Map
.
put
(
"user"
,
user
)
activities
=
ActivityPub
.
fetch_activities
([
user
.
ap_id
|
user
.
following
],
params
)
activities
=
ActivityPub
.
fetch_activities
([
user
.
ap_id
|
user
.
following
],
params
)
|>
ActivityPub
.
contain_timeline
(
user
)
conn
|>
render
(
ActivityView
,
"index.json"
,
%{
activities:
activities
,
for:
user
})
...
...
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