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
9442588a
Commit
9442588a
authored
Dec 06, 2018
by
Maksim
Browse files
fix hashtags in api response
parent
5436aaad
Changes
2
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/mastodon_api/views/status_view.ex
View file @
9442588a
defmodule
Pleroma
.
Web
.
MastodonAPI
.
StatusView
do
use
Pleroma
.
Web
,
:view
alias
Pleroma
.
Web
.
MastodonAPI
.
{
AccountView
,
StatusView
}
alias
Pleroma
.
{
User
,
Activity
}
alias
Pleroma
.
Web
.
CommonAPI
.
Utils
alias
Pleroma
.
Web
.
MediaProxy
alias
Pleroma
.
Repo
alias
Pleroma
.
HTML
alias
Pleroma
.
{
Activity
,
HTML
,
Repo
,
User
}
alias
Pleroma
.
Web
.
{
CommonAPI
.
Utils
,
MastodonAPI
.
AccountView
,
MastodonAPI
.
StatusView
,
MediaProxy
}
# TODO: Add cached version.
defp
get_replied_to_activities
(
activities
)
do
activities
|>
Enum
.
map
(
fn
%{
data:
%{
"type"
=>
"Create"
,
"object"
=>
%{
"inReplyTo"
=>
in
R
eply
T
o
}}}
->
in
R
eply
T
o
!=
""
&&
in
R
eply
T
o
%{
data:
%{
"type"
=>
"Create"
,
"object"
=>
%{
"inReplyTo"
=>
in
_r
eply
_t
o
}}}
->
in
_r
eply
_t
o
!=
""
&&
in
_r
eply
_t
o
_
->
nil
...
...
@@ -28,8 +36,8 @@ defp get_replied_to_activities(activities) do
def
render
(
"index.json"
,
opts
)
do
replied_to_activities
=
get_replied_to_activities
(
opts
.
activities
)
render_many
(
opts
.
activities
,
opts
.
activities
|>
render_many
(
StatusView
,
"status.json"
,
Map
.
put
(
opts
,
:replied_to_activities
,
replied_to_activities
)
...
...
@@ -72,9 +80,9 @@ def render(
sensitive:
false
,
spoiler_text:
""
,
visibility:
"public"
,
media_attachments:
[],
media_attachments:
reblogged
[
:media_attachments
]
||
[],
mentions:
mentions
,
tags:
[],
tags:
reblogged
[
:tags
]
||
[],
application:
%{
name:
"Web"
,
website:
nil
...
...
@@ -111,20 +119,9 @@ def render("status.json", %{activity: %{data: %{"object" => object}} = activity}
reply_to
=
get_reply_to
(
activity
,
opts
)
reply_to_user
=
reply_to
&&
User
.
get_cached_by_ap_id
(
reply_to
.
data
[
"actor"
])
emojis
=
(
activity
.
data
[
"object"
][
"emoji"
]
||
[])
|>
Enum
.
map
(
fn
{
name
,
url
}
->
name
=
HTML
.
strip_tags
(
name
)
url
=
HTML
.
strip_tags
(
url
)
|>
MediaProxy
.
url
()
%{
shortcode:
name
,
url:
url
,
static_url:
url
,
visible_in_picker:
false
}
end
)
content
=
render_content
(
object
)
object
|>
render_content
()
|>
HTML
.
filter_tags
(
User
.
html_filter_policy
(
opts
[
:for
]))
%{
...
...
@@ -140,22 +137,21 @@ def render("status.json", %{activity: %{data: %{"object" => object}} = activity}
reblogs_count:
announcement_count
,
replies_count:
0
,
favourites_count:
like_count
,
reblogged:
!!
repeated
,
favourited:
!!
favorited
,
reblogged:
present?
(
repeated
)
,
favourited:
present?
(
favorited
)
,
muted:
false
,
sensitive:
sensitive
,
spoiler_text:
object
[
"summary"
]
||
""
,
visibility:
get_visibility
(
object
),
media_attachments:
attachments
|>
Enum
.
take
(
4
),
mentions:
mentions
,
# fix,
tags:
[],
tags:
tags
,
application:
%{
name:
"Web"
,
website:
nil
},
language:
nil
,
emojis:
emojis
emojis:
build_emojis
(
activity
.
data
[
"object"
][
"emoji"
])
}
end
...
...
@@ -224,30 +220,56 @@ def get_visibility(object) do
end
def
render_content
(%{
"type"
=>
"Video"
}
=
object
)
do
name
=
object
[
"name"
]
content
=
if
!!name
and
name
!=
""
do
"<p><a href=
\"
#{
object
[
"id"
]
}
\"
>
#{
name
}
</a></p>
#{
object
[
"content"
]
}
"
else
object
[
"content"
]
||
""
end
with
name
when
not
is_nil
(
name
)
and
name
!=
""
<-
object
[
"name"
]
do
"<p><a href=
\"
#{
object
[
"id"
]
}
\"
>
#{
name
}
</a></p>
#{
object
[
"content"
]
}
"
else
_
->
object
[
"content"
]
||
""
end
end
content
def
render_content
(%{
"type"
=>
object_type
}
=
object
)
when
object_type
in
[
"Article"
,
"Page"
]
do
with
summary
when
not
is_nil
(
summary
)
and
summary
!=
""
<-
object
[
"name"
],
url
when
is_bitstring
(
url
)
<-
object
[
"url"
]
do
"<p><a href=
\"
#{
url
}
\"
>
#{
summary
}
</a></p>
#{
object
[
"content"
]
}
"
else
_
->
object
[
"content"
]
||
""
end
end
def
render_content
(%{
"type"
=>
object_type
}
=
object
)
when
object_type
in
[
"Article"
,
"Page"
]
do
summary
=
object
[
"name"
]
def
render_content
(
object
),
do
:
object
[
"content"
]
||
""
content
=
if
!!summary
and
summary
!=
""
and
is_bitstring
(
object
[
"url"
])
do
"<p><a href=
\"
#{
object
[
"url"
]
}
\"
>
#{
summary
}
</a></p>
#{
object
[
"content"
]
}
"
else
object
[
"content"
]
||
""
end
@doc
"""
Builds list emojis.
Arguments: `nil` or list tuple of name and url.
Returns list emojis.
## Examples
content
iex> Pleroma.Web.MastodonAPI.StatusView.build_emojis([{"2hu", "corndog.png"}])
[%{shortcode: "2hu", static_url: "corndog.png", url: "corndog.png", visible_in_picker: false}]
"""
@spec
build_emojis
(
nil
|
list
(
tuple
()))
::
list
(
map
())
def
build_emojis
(
nil
),
do
:
[]
def
build_emojis
(
emojis
)
do
emojis
|>
Enum
.
map
(
fn
{
name
,
url
}
->
name
=
HTML
.
strip_tags
(
name
)
url
=
url
|>
HTML
.
strip_tags
()
|>
MediaProxy
.
url
()
%{
shortcode:
name
,
url:
url
,
static_url:
url
,
visible_in_picker:
false
}
end
)
end
def
render_content
(
object
),
do
:
object
[
"content"
]
||
""
defp
present?
(
nil
),
do
:
false
defp
present?
(
false
),
do
:
false
defp
present?
(
_
),
do
:
true
end
test/web/mastodon_api/status_view_test.exs
View file @
9442588a
...
...
@@ -24,7 +24,7 @@ test "a note with null content" do
note
|>
Map
.
put
(
:data
,
data
)
user
=
User
.
get_cached_by_ap_id
(
note
.
data
[
"actor"
])
User
.
get_cached_by_ap_id
(
note
.
data
[
"actor"
])
status
=
StatusView
.
render
(
"status.json"
,
%{
activity:
note
})
...
...
@@ -62,7 +62,7 @@ test "a note activity" do
visibility:
"public"
,
media_attachments:
[],
mentions:
[],
tags:
[
],
tags:
note
.
data
[
"object"
][
"tag"
],
application:
%{
name:
"Web"
,
website:
nil
...
...
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