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
eb02edca
Commit
eb02edca
authored
May 21, 2019
by
Aaron Tinio
Browse files
Add virtual :thread_muted? field
that may be set when fetching activities
parent
b30b51c3
Changes
6
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/activity.ex
View file @
eb02edca
...
...
@@ -10,6 +10,7 @@ defmodule Pleroma.Activity do
alias
Pleroma
.
Notification
alias
Pleroma
.
Object
alias
Pleroma
.
Repo
alias
Pleroma
.
ThreadMute
alias
Pleroma
.
User
import
Ecto
.
Changeset
...
...
@@ -37,6 +38,7 @@ defmodule Pleroma.Activity do
field
(
:local
,
:boolean
,
default:
true
)
field
(
:actor
,
:string
)
field
(
:recipients
,
{
:array
,
:string
},
default:
[])
field
(
:thread_muted?
,
:boolean
,
virtual:
true
)
# This is a fake relation, do not use outside of with_preloaded_bookmark/get_bookmark
has_one
(
:bookmark
,
Bookmark
)
has_many
(
:notifications
,
Notification
,
on_delete:
:delete_all
)
...
...
@@ -90,6 +92,16 @@ def with_preloaded_bookmark(query, %User{} = user) do
def
with_preloaded_bookmark
(
query
,
_
),
do
:
query
def
with_set_thread_muted_field
(
query
,
%
User
{}
=
user
)
do
from
([
a
]
in
query
,
left_join:
tm
in
ThreadMute
,
on:
tm
.
user_id
==
^
user
.
id
and
tm
.
context
==
fragment
(
"?->>'context'"
,
a
.
data
),
select:
%
Activity
{
a
|
thread_muted?:
not
is_nil
(
tm
.
id
)}
)
end
def
with_set_thread_muted_field
(
query
,
_
),
do
:
query
def
get_by_ap_id
(
ap_id
)
do
Repo
.
one
(
from
(
...
...
lib/pleroma/web/activity_pub/activity_pub.ex
View file @
eb02edca
...
...
@@ -834,6 +834,13 @@ defp maybe_preload_bookmarks(query, opts) do
|>
Activity
.
with_preloaded_bookmark
(
opts
[
"user"
])
end
defp
maybe_set_thread_muted_field
(
query
,
%{
"skip_preload"
=>
true
}),
do
:
query
defp
maybe_set_thread_muted_field
(
query
,
opts
)
do
query
|>
Activity
.
with_set_thread_muted_field
(
opts
[
"user"
])
end
defp
maybe_order
(
query
,
%{
order:
:desc
})
do
query
|>
order_by
(
desc:
:id
)
...
...
@@ -852,6 +859,7 @@ def fetch_activities_query(recipients, opts \\ %{}) do
base_query
|>
maybe_preload_objects
(
opts
)
|>
maybe_preload_bookmarks
(
opts
)
|>
maybe_set_thread_muted_field
(
opts
)
|>
maybe_order
(
opts
)
|>
restrict_recipients
(
recipients
,
opts
[
"user"
])
|>
restrict_tag
(
opts
)
...
...
lib/pleroma/web/mastodon_api/views/status_view.ex
View file @
eb02edca
...
...
@@ -157,6 +157,12 @@ def render("status.json", %{activity: %{data: %{"object" => _object}} = activity
bookmarked
=
Activity
.
get_bookmark
(
activity
,
opts
[
:for
])
!=
nil
thread_muted?
=
case
activity
.
thread_muted?
do
thread_muted?
when
is_boolean
(
thread_muted?
)
->
thread_muted?
nil
->
CommonAPI
.
thread_muted?
(
user
,
activity
)
end
attachment_data
=
object
.
data
[
"attachment"
]
||
[]
attachments
=
render_many
(
attachment_data
,
StatusView
,
"attachment.json"
,
as:
:attachment
)
...
...
@@ -228,7 +234,7 @@ def render("status.json", %{activity: %{data: %{"object" => _object}} = activity
reblogged:
reblogged?
(
activity
,
opts
[
:for
]),
favourited:
present?
(
favorited
),
bookmarked:
present?
(
bookmarked
),
muted:
CommonAPI
.
thread_muted?
(
user
,
activity
)
||
User
.
mutes?
(
opts
[
:for
],
user
),
muted:
thread_muted?
||
User
.
mutes?
(
opts
[
:for
],
user
),
pinned:
pinned?
(
activity
,
user
),
sensitive:
sensitive
,
spoiler_text:
summary_html
,
...
...
lib/pleroma/web/twitter_api/views/activity_view.ex
View file @
eb02edca
...
...
@@ -284,6 +284,12 @@ def render(
Pleroma
.
Web
.
RichMedia
.
Helpers
.
fetch_data_for_activity
(
activity
)
)
thread_muted?
=
case
activity
.
thread_muted?
do
thread_muted?
when
is_boolean
(
thread_muted?
)
->
thread_muted?
nil
->
CommonAPI
.
thread_muted?
(
user
,
activity
)
end
%{
"id"
=>
activity
.
id
,
"uri"
=>
object
.
data
[
"id"
],
...
...
@@ -314,7 +320,7 @@ def render(
"summary"
=>
summary
,
"summary_html"
=>
summary
|>
Formatter
.
emojify
(
object
.
data
[
"emoji"
]),
"card"
=>
card
,
"muted"
=>
CommonAPI
.
thread_muted?
(
user
,
activity
)
||
User
.
mutes?
(
opts
[
:for
],
user
)
"muted"
=>
thread_muted?
||
User
.
mutes?
(
opts
[
:for
],
user
)
}
end
...
...
test/activity_test.exs
View file @
eb02edca
...
...
@@ -6,6 +6,7 @@ defmodule Pleroma.ActivityTest do
use
Pleroma
.
DataCase
alias
Pleroma
.
Activity
alias
Pleroma
.
Bookmark
alias
Pleroma
.
ThreadMute
import
Pleroma
.
Factory
test
"returns an activity by it's AP id"
do
...
...
@@ -47,6 +48,31 @@ test "preloading a bookmark" do
assert
queried_activity
.
bookmark
==
bookmark3
end
test
"setting thread_muted?"
do
activity
=
insert
(
:note_activity
)
user
=
insert
(
:user
)
annoyed_user
=
insert
(
:user
)
{
:ok
,
_
}
=
ThreadMute
.
add_mute
(
annoyed_user
.
id
,
activity
.
data
[
"context"
])
activity_with_unset_thread_muted_field
=
Ecto
.
Query
.
from
(
Activity
)
|>
Repo
.
one
()
activity_for_user
=
Ecto
.
Query
.
from
(
Activity
)
|>
Activity
.
with_set_thread_muted_field
(
user
)
|>
Repo
.
one
()
activity_for_annoyed_user
=
Ecto
.
Query
.
from
(
Activity
)
|>
Activity
.
with_set_thread_muted_field
(
annoyed_user
)
|>
Repo
.
one
()
assert
activity_with_unset_thread_muted_field
.
thread_muted?
==
nil
assert
activity_for_user
.
thread_muted?
==
false
assert
activity_for_annoyed_user
.
thread_muted?
==
true
end
describe
"getting a bookmark"
do
test
"when association is loaded"
do
user
=
insert
(
:user
)
...
...
test/user_test.exs
View file @
eb02edca
...
...
@@ -902,7 +902,7 @@ test "hide a user's statuses from timelines and notifications" do
assert
[
activity
]
==
ActivityPub
.
fetch_public_activities
(%{})
|>
Repo
.
preload
(
:bookmark
)
assert
[
activity
]
==
assert
[
%{
activity
|
thread_muted?:
CommonAPI
.
thread_muted?
(
user2
,
activity
)}
]
==
ActivityPub
.
fetch_activities
([
user2
.
ap_id
|
user2
.
following
],
%{
"user"
=>
user2
})
{
:ok
,
_user
}
=
User
.
deactivate
(
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