Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- info(#'Message'{id = Id, feed_id = Feed, from = From, to = To,
- files = [#'Desc'{id = ID, payload = Payload, filename = Lang, mime = DMime} = ND | _], status = update}, Req,
- #cx{params = ClientId, client_pid = C} = State) ->
- PhoneId = case ClientId of
- <<"sys_bpe">> -> From;
- <<"emqttd_", _/binary>> -> roster:phone_id(ClientId);
- _ -> <<>>
- end,
- roster:info(?MODULE, "~p:~p:Message/update:", [PhoneId, To]),
- roster:info(?MODULE, ":~P ~n", [Payload, 30]),
- NMsg = case kvs:get('Message', Id) of
- {ok, #'Message'{feed_id = Feed, files = Descs, seenby = Seen} = Msg} when Lang == [], ID /= [] ->
- NewDescs = case lists:keytake(ID, #'Desc'.id, Descs) of
- false -> Descs;
- {value, #'Desc'{info = RIds} = T, NDescs} ->
- NDescs ++ [T#'Desc'{info = binary_delpart(RIds, PhoneId)}] end,
- Msg#'Message'{files = NewDescs};
- {ok, #'Message'{feed_id = Feed, files = Descs, seenby = Seen} = Msg} when Seen /= [-1] ->
- Descs2 = lists:flatten(lists:foldr(
- fun(#'Desc'{info = I, mime = TMime, filename = <<_/integer, _/binary>> = TLang} = D, [Acc, ND2])
- when TMime =:= DMime ->
- case binary_delpart(I, PhoneId) of
- [] -> [Acc, []];
- <<>> -> [Acc, ND2];
- I2 when TLang == Lang ->
- [[D#'Desc'{info = <<I2/binary, ",", PhoneId/binary>>, payload = Payload} | Acc], []];
- I2 ->
- [[D#'Desc'{info = I2, payload = Payload} | Acc], ND2] end;
- (D, [Acc, ND2]) -> [[D | Acc], ND2] end,
- {[], [ND#'Desc'{info = PhoneId}]}, Descs)),
- Msg#'Message'{files = Descs2};
- _ -> {io, {error, message_not_found}, <<>>} end,
- {reply, {bert, case NMsg of
- #'Message'{id = MID, feed_id = Feed0} = NM ->
- case kvs_stream:load_writer(Feed0) of
- #writer{cache = #'Message'{id = MID}} = W -> kvs_stream:save(W#writer{cache = NM});
- _ -> skip
- end,
- kvs:put(NM),
- n2o_vnode:send(C, case Feed0 of #muc{name = Name} -> _ =
- roster:room_topic(Name); #p2p{} = P2P -> roster:p2p_topic(P2P); _ ->
- <<>> end, term_to_binary(NM#'Message'{status = update})),
- <<>>;
- E -> E
- end}, Req, State};
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement