diff --git a/apps/roster/src/protocol/roster_message.erl b/apps/roster/src/protocol/roster_message.erl index bea3695a6a310457cfeaab4f1bb67e762e860737..0469b1a96352eac7c6a314079095c02e669df887 100644 --- a/apps/roster/src/protocol/roster_message.erl +++ b/apps/roster/src/protocol/roster_message.erl @@ -514,10 +514,19 @@ notify(From, To, Msg, Action) -> #'Member'{alias = FromAlias} = roster:muc_member(From, RoomId), {ok, #'Room'{name = RoomName, type = RoomType}} = kvs:get('Room', RoomId), RoomMsgPreview = iolist_to_binary([RoomName, <<": ">>, MsgPreview]), - {lists:filter(fun({ReceiverPhoneId, _}) -> ReceiverPhoneId /= From end, - lists:flatten([{ToMemPhoneId, (roster:room(roster:roster_id(ToMemPhoneId), RoomId))#'Room'{last_msg = Msg}} - || #'Member'{phone_id = ToMemPhoneId} <- roster:members(#muc{name = To}, active)])), - case RoomType of channel -> RoomMsgPreview; _ -> iolist_to_binary([FromAlias, <<"@">>, RoomMsgPreview]) end}; + PushAlertMsg = case RoomType of + channel -> RoomMsgPreview; + _ -> iolist_to_binary([FromAlias, <<"@">>, RoomMsgPreview]) + end, + {lists:foldl( + fun(#'Member'{ phone_id = ToPId }, Acc) when ToPId /= From -> + case roster:room(roster:roster_id(ToPId), RoomId) of + R = #'Room'{} -> [{ToPId, R#'Room'{last_msg = Msg}} | Acc]; + _ -> Acc + end; + (_, Acc) -> Acc + end, [], roster:members(#muc{name = To}, active)), + PushAlertMsg}; _ -> #'Contact'{names = FromName} = Contact = roster:user(roster:roster_id(To), From), {[{To, Contact#'Contact'{last_msg = Msg}}], iolist_to_binary([FromName, ": ", MsgPreview])}