X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_protocole.erl;h=dac7d03661424a8ba9b479406d201f5b642d057f;hp=448a20b9ea3d41ba27c8e3e19baea1002e0953f6;hb=302c16cbbd999e97f7bac2b3eb70bf057f5bc709;hpb=c01d54fd6a515a6f2860e3b18ff574afa5caa83b diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index 448a20b..dac7d03 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -249,50 +249,48 @@ wait_event_page_chat(User, Racines_conversations, Message_count, Last_message_id {reply, "new_messages"}, {conversations, {array, lists:map( - fun({Conv, Plus}) -> + fun({Racine, {Conv, Plus}}) -> {struct, [ {last_page, not Plus}, - {messages, {array, + {first, + if Racine =:= undefined orelse Conv =:= [] -> + null; + true -> + {Racine_id, _, _} = Racine, + case euphorik_bd:message_by_id(Racine_id) of + {ok, Mess} -> + json_message(Mess, euphorik_bd:parents(Racine), User); + _ -> + null + end + end + }, % le premier message de la conversation, peut correspondre + {messages, {array, lists:map( - fun({Mess, Repond_a}) -> - Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id, - A_repondu_a_message = User =/= inconnu andalso euphorik_bd:a_repondu_a_message(User#user.id, Mess#minichat.id), - Est_une_reponse_a_user = User =/= inconnu andalso euphorik_bd:est_une_reponse_a_user(User#user.id, Mess#minichat.id), - {ok, User_mess } = euphorik_bd:user_by_id(Mess#minichat.auteur_id), - {struct, [ - {id, Mess#minichat.id}, - {user_id, User_mess#user.id}, - {date, format_date(Mess#minichat.date)}, - {system, Mess#minichat.auteur_id =:= 0}, - {owner, Est_proprietaire}, - {answered, A_repondu_a_message}, - {is_a_reply, Est_une_reponse_a_user}, - {nick, Mess#minichat.pseudo}, - {login, User_mess#user.login}, - {content, Mess#minichat.contenu}, - {root, Mess#minichat.racine_id}, - {answer_to, {array, lists:map( - fun(Id_mess) -> - {ok, M} = euphorik_bd:message_by_id(Id_mess), - {ok, User_reponse} = euphorik_bd:user_by_mess(M#minichat.id), - {struct, [{id, M#minichat.id}, {nick, M#minichat.pseudo}, {login, User_reponse#user.login}]} - end, - Repond_a - )}}, - {ek_master, User_mess#user.ek_master} - ]} + fun({Mess, Repond_a}) -> + json_message(Mess, Repond_a, User) end, Conv ) }} ]} end, - Conversations + % on ajoute un 'undefined' correspondant à la premier conversation qui ne possède pas de racine + % TODO : peut être à revoir car un peu lourd est compliqué + aggregation_racines_conversations([undefined | Racines_conversations], Conversations) ) }} ]} end end. + + +aggregation_racines_conversations(L1, L2) -> + aggregation_racines_conversations(L1, L2, []). +aggregation_racines_conversations([], [], L) -> lists:reverse(L); +aggregation_racines_conversations([E1|R1], [E2|R2], L) -> + aggregation_racines_conversations(R1, R2, [{E1, E2} | L]). + % Attend un événement lié à la page 'chat'. @@ -664,3 +662,35 @@ json_reponse_login_ok(User) -> {ek_master, User#user.ek_master} ] }. + +% Renvoie le message formaté en JSON. +% Mess est de type #minichat +% Repond_a est une liste d'id des messages auquel répond Mess +% User est l'utilisateur courant de type #user +json_message(Mess, Repond_a, User) -> + Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id, + A_repondu_a_message = User =/= inconnu andalso euphorik_bd:a_repondu_a_message(User#user.id, Mess#minichat.id), + Est_une_reponse_a_user = User =/= inconnu andalso euphorik_bd:est_une_reponse_a_user(User#user.id, Mess#minichat.id), + {ok, User_mess } = euphorik_bd:user_by_id(Mess#minichat.auteur_id), + {struct, [ + {id, Mess#minichat.id}, + {user_id, User_mess#user.id}, + {date, format_date(Mess#minichat.date)}, + {system, Mess#minichat.auteur_id =:= 0}, + {owner, Est_proprietaire}, + {answered, A_repondu_a_message}, + {is_a_reply, Est_une_reponse_a_user}, + {nick, Mess#minichat.pseudo}, + {login, User_mess#user.login}, + {content, Mess#minichat.contenu}, + {root, Mess#minichat.racine_id}, + {answer_to, {array, lists:map( + fun(Id_mess) -> + {ok, M} = euphorik_bd:message_by_id(Id_mess), + {ok, User_reponse} = euphorik_bd:user_by_mess(M#minichat.id), + {struct, [{id, M#minichat.id}, {nick, M#minichat.pseudo}, {login, User_reponse#user.login}]} + end, + Repond_a + )}}, + {ek_master, User_mess#user.ek_master} + ]}.