mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 21:15:32 +09:00
fix(push): preview forwarded message content (#2979)
This commit is contained in:
1 parent
931327d1dc
commit
6a6119ed1e
1 file changed
+70
-4
@@ -33,7 +33,7 @@ build_content_preview(MessageData, MarkdownContext) ->
|
|||||||
Preview = push_markdown_plaintext:render_push_preview(Content, MarkdownContext),
|
Preview = push_markdown_plaintext:render_push_preview(Content, MarkdownContext),
|
||||||
case Preview of
|
case Preview of
|
||||||
<<>> ->
|
<<>> ->
|
||||||
truncate_preview(build_content_fallback_preview(MessageData));
|
truncate_preview(build_content_fallback_preview(MessageData, MarkdownContext));
|
||||||
_ ->
|
_ ->
|
||||||
truncate_preview(Preview)
|
truncate_preview(Preview)
|
||||||
end.
|
end.
|
||||||
@@ -372,13 +372,37 @@ valid_utf8_prefix(Content) ->
|
|||||||
{error, Valid, _Rest} -> Valid
|
{error, Valid, _Rest} -> Valid
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec build_content_fallback_preview(map()) -> binary().
|
-spec build_content_fallback_preview(map(), map()) -> binary().
|
||||||
build_content_fallback_preview(MessageData) ->
|
build_content_fallback_preview(MessageData, MarkdownContext) ->
|
||||||
case
|
case
|
||||||
first_nonempty_binary([
|
first_nonempty_binary([
|
||||||
build_sticker_preview(maps:get(<<"stickers">>, MessageData, [])),
|
build_sticker_preview(maps:get(<<"stickers">>, MessageData, [])),
|
||||||
build_attachment_preview(maps:get(<<"attachments">>, MessageData, [])),
|
build_attachment_preview(maps:get(<<"attachments">>, MessageData, [])),
|
||||||
build_embed_preview(maps:get(<<"embeds">>, MessageData, []))
|
build_embed_preview(maps:get(<<"embeds">>, MessageData, [])),
|
||||||
|
build_snapshot_preview(
|
||||||
|
maps:get(<<"message_snapshots">>, MessageData, []), MarkdownContext
|
||||||
|
)
|
||||||
|
])
|
||||||
|
of
|
||||||
|
Preview when is_binary(Preview) -> Preview;
|
||||||
|
undefined -> <<>>
|
||||||
|
end.
|
||||||
|
|
||||||
|
-spec build_snapshot_preview(term(), map()) -> binary().
|
||||||
|
build_snapshot_preview([Snapshot | _Rest], MarkdownContext) when is_map(Snapshot) ->
|
||||||
|
snapshot_preview(Snapshot, MarkdownContext);
|
||||||
|
build_snapshot_preview(_Snapshots, _MarkdownContext) ->
|
||||||
|
<<>>.
|
||||||
|
|
||||||
|
-spec snapshot_preview(map(), map()) -> binary().
|
||||||
|
snapshot_preview(Snapshot, MarkdownContext) ->
|
||||||
|
Content = push_utils:normalize_binary(maps:get(<<"content">>, Snapshot, <<>>), <<>>),
|
||||||
|
case
|
||||||
|
first_nonempty_binary([
|
||||||
|
push_markdown_plaintext:render_push_preview(Content, MarkdownContext),
|
||||||
|
build_sticker_preview(maps:get(<<"stickers">>, Snapshot, [])),
|
||||||
|
build_attachment_preview(maps:get(<<"attachments">>, Snapshot, [])),
|
||||||
|
build_embed_preview(maps:get(<<"embeds">>, Snapshot, []))
|
||||||
])
|
])
|
||||||
of
|
of
|
||||||
Preview when is_binary(Preview) -> Preview;
|
Preview when is_binary(Preview) -> Preview;
|
||||||
@@ -639,6 +663,48 @@ truncate_preview_keeps_short_valid_content_identical_test() ->
|
|||||||
Content = <<"hello \xC3\xA9 world">>,
|
Content = <<"hello \xC3\xA9 world">>,
|
||||||
?assertEqual(Content, truncate_preview(Content)).
|
?assertEqual(Content, truncate_preview(Content)).
|
||||||
|
|
||||||
|
a_forwarded_message_previews_its_snapshot_content_test() ->
|
||||||
|
MessageData = #{
|
||||||
|
<<"content">> => <<>>,
|
||||||
|
<<"message_snapshots">> => [#{<<"content">> => <<"forwarded text">>}]
|
||||||
|
},
|
||||||
|
?assertEqual(<<"forwarded text">>, build_content_preview(MessageData)).
|
||||||
|
|
||||||
|
a_forwarded_attachment_previews_its_filename_test() ->
|
||||||
|
MessageData = #{
|
||||||
|
<<"content">> => <<>>,
|
||||||
|
<<"message_snapshots">> => [
|
||||||
|
#{<<"content">> => null, <<"attachments">> => [#{<<"filename">> => <<"cat.png">>}]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
?assertEqual(<<"Attachment: cat.png">>, build_content_preview(MessageData)).
|
||||||
|
|
||||||
|
a_forwarded_sticker_previews_its_name_test() ->
|
||||||
|
MessageData = #{
|
||||||
|
<<"content">> => <<>>,
|
||||||
|
<<"message_snapshots">> => [
|
||||||
|
#{<<"content">> => null, <<"stickers">> => [#{<<"name">> => <<"Wave">>}]}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
?assertEqual(<<"Sticker: Wave">>, build_content_preview(MessageData)).
|
||||||
|
|
||||||
|
own_content_wins_over_a_snapshot_test() ->
|
||||||
|
MessageData = #{
|
||||||
|
<<"content">> => <<"my words">>,
|
||||||
|
<<"message_snapshots">> => [#{<<"content">> => <<"forwarded text">>}]
|
||||||
|
},
|
||||||
|
?assertEqual(<<"my words">>, build_content_preview(MessageData)).
|
||||||
|
|
||||||
|
an_empty_snapshot_list_previews_nothing_test() ->
|
||||||
|
?assertEqual(
|
||||||
|
<<>>, build_content_preview(#{<<"content">> => <<>>, <<"message_snapshots">> => []})
|
||||||
|
).
|
||||||
|
|
||||||
|
a_null_snapshot_field_previews_nothing_test() ->
|
||||||
|
?assertEqual(
|
||||||
|
<<>>, build_content_preview(#{<<"content">> => <<>>, <<"message_snapshots">> => null})
|
||||||
|
).
|
||||||
|
|
||||||
build_url_dm_test() ->
|
build_url_dm_test() ->
|
||||||
?assertEqual(<<"/channels/@me/456/789">>, build_url(0, 456, 789)).
|
?assertEqual(<<"/channels/@me/456/789">>, build_url(0, 456, 789)).
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user