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
21c39782
Commit
21c39782
authored
Apr 15, 2017
by
lain
Browse files
Add announcements to activitypub.
parent
7a47afed
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/activity_pub/activity_pub.ex
View file @
21c39782
...
...
@@ -137,6 +137,30 @@ def fetch_activities(recipients, opts \\ %{}) do
|>
Enum
.
reverse
end
def
announce
(%
User
{
ap_id:
ap_id
}
=
user
,
%
Object
{
data:
%{
"id"
=>
id
}}
=
object
)
do
data
=
%{
"type"
=>
"Announce"
,
"actor"
=>
ap_id
,
"object"
=>
id
,
"to"
=>
[
User
.
ap_followers
(
user
)]
}
{
:ok
,
activity
}
=
insert
(
data
)
announcements
=
[
ap_id
|
(
object
.
data
[
"announcements"
]
||
[])]
|>
Enum
.
uniq
new_data
=
object
.
data
|>
Map
.
put
(
"announcement_count"
,
length
(
announcements
))
|>
Map
.
put
(
"announcements"
,
announcements
)
changeset
=
Ecto
.
Changeset
.
change
(
object
,
data:
new_data
)
{
:ok
,
object
}
=
Repo
.
update
(
changeset
)
update_object_in_activities
(
object
)
{
:ok
,
activity
,
object
}
end
def
fetch_activities_for_context
(
context
)
do
query
=
from
activity
in
Activity
,
where:
fragment
(
"? @> ?"
,
activity
.
data
,
^
%{
context:
context
})
...
...
test/web/activity_pub/activity_pub_test.exs
View file @
21c39782
...
...
@@ -162,6 +162,21 @@ test "unliking a previously liked object" do
end
end
describe
"announcing an object"
do
test
"adds an announce activity to the db"
do
note_activity
=
insert
(
:note_activity
)
object
=
Object
.
get_by_ap_id
(
note_activity
.
data
[
"object"
][
"id"
])
user
=
insert
(
:user
)
{
:ok
,
announce_activity
,
object
}
=
ActivityPub
.
announce
(
user
,
object
)
assert
object
.
data
[
"announcement_count"
]
==
1
assert
object
.
data
[
"announcements"
]
==
[
user
.
ap_id
]
assert
announce_activity
.
data
[
"to"
]
==
[
User
.
ap_followers
(
user
)]
assert
announce_activity
.
data
[
"object"
]
==
object
.
data
[
"id"
]
assert
announce_activity
.
data
[
"actor"
]
==
user
.
ap_id
end
end
describe
"uploading files"
do
test
"copies the file to the configured folder"
do
file
=
%
Plug
.
Upload
{
content_type:
"image/jpg"
,
path:
Path
.
absname
(
"test/fixtures/image.jpg"
),
filename:
"an_image.jpg"
}
...
...
Write
Preview
Markdown
is supported
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