mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-17 13:05: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),
|
||||
case Preview of
|
||||
<<>> ->
|
||||
truncate_preview(build_content_fallback_preview(MessageData));
|
||||
truncate_preview(build_content_fallback_preview(MessageData, MarkdownContext));
|
||||
_ ->
|
||||
truncate_preview(Preview)
|
||||
end.
|
||||
@@ -372,13 +372,37 @@ valid_utf8_prefix(Content) ->
|
||||
{error, Valid, _Rest} -> Valid
|
||||
end.
|
||||
|
||||
-spec build_content_fallback_preview(map()) -> binary().
|
||||
build_content_fallback_preview(MessageData) ->
|
||||
-spec build_content_fallback_preview(map(), map()) -> binary().
|
||||
build_content_fallback_preview(MessageData, MarkdownContext) ->
|
||||
case
|
||||
first_nonempty_binary([
|
||||
build_sticker_preview(maps:get(<<"stickers">>, 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
|
||||
Preview when is_binary(Preview) -> Preview;
|
||||
@@ -639,6 +663,48 @@ truncate_preview_keeps_short_valid_content_identical_test() ->
|
||||
Content = <<"hello \xC3\xA9 world">>,
|
||||
?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() ->
|
||||
?assertEqual(<<"/channels/@me/456/789">>, build_url(0, 456, 789)).
|
||||
|
||||
|
||||
Reference in new issue
Block a user