- % Last message id est facultatif
- Last_message_id = case lists:keysearch(last_message_id, 1, Reste) of
- {Id, _} -> Id;
- _ -> 0
- end,
- {Main_page, _} = lists:keysearch(main_page, 1, Reste),
- {{array, Conversations_json}, _} = lists:keysearch(conversations, 1, Reste),
- User = euphorik_minichat:user_by_cookie(Cookie),
-
-
- % TODO....
-
-
-\r
- simple_xml_to_string(
- case xmerl_xpath:string("nombreMessage", Action) of % le nombre de message qu'affiche le client
- [#xmlElement{content = [#xmlText{value = Nb_message_str}]}] ->
- Nb_message = list_to_integer(Nb_message_str),
- Dernier_id = case xmerl_xpath:string("dernierMessageId", Action) of % l'id du dernier message que connait le client
- [#xmlElement{content = [#xmlText{value = D}]}] -> erlang:list_to_integer(D, 36);
- _ -> 0
- end,
- User = case xmerl_xpath:string("cookie", Action) of
- [#xmlElement{content = [#xmlText{value = Cookie}]}] ->
- case euphorik_minichat:user_by_cookie(Cookie) of
- {ok, U} -> U;
- _ -> inconnu
- end;
- _ -> inconnu
- end,\r
- % accrochez-vous ca va siouxer ;)
- [{reponse, [{name, "refreshMessages"}],\r
- lists:map(\r
- fun({Conv, Plus}) ->
- {conversation, [],
- [{autresPages, [], [atom_to_list(Plus)]} |
- lists:map(
- fun({Mess, Repond_a}) -> \r
- Est_proprietaire = User =/= inconnu andalso User#user.id =:= Mess#minichat.auteur_id,\r
- A_repondu_a_message = User =/= inconnu andalso euphorik_minichat:a_repondu_a_message(User#user.id, Mess#minichat.id),\r
- Est_une_reponse_a_user = User =/= inconnu andalso euphorik_minichat:est_une_reponse_a_user(User#user.id, Mess#minichat.id),
- User_mess =
- if Mess#minichat.auteur_id =:= 0 ->
- inconnu;
- true ->
- {ok, U2} = euphorik_minichat:user_by_id(Mess#minichat.auteur_id),
- U2
- end,\r
- {message, [{id, erlang:integer_to_list(Mess#minichat.id, 36)}],\r
- [\r
- {date, [], [format_date(Mess#minichat.date)]},
- {systeme, [], [atom_to_list(Mess#minichat.auteur_id =:= 0)]},\r
- {proprietaire, [], [atom_to_list(Est_proprietaire)]},\r
- {repondu, [], [atom_to_list(A_repondu_a_message)]},\r
- {reponse, [], [atom_to_list(Est_une_reponse_a_user)]},\r
- {pseudo, [], [Mess#minichat.pseudo]},
- {login, [], [if User_mess =:= inconnu -> Mess#minichat.pseudo; true -> User_mess#user.login end]},\r
- {contenu, [], [Mess#minichat.contenu]},\r
- {repondA, [], xml_repond_a(Repond_a)}\r
- ]\r
- }
- end,
- Conv
- )
- ]
- }\r
- end,
- euphorik_minichat_conversation:conversations(
- if User =/= inconnu -> User#user.conversations; true -> [] end,
- Nb_message,
- Dernier_id,
- if User =/= inconnu -> User#user.page_principale; true -> 1 end
- )\r
- )
- }];
- _ ->
- [{reponse, [{name, "refreshMessages"}], [{erreur, [], ["erreur"]}]}]
- end\r
- ).
-
- \r
-% Prend une liste de xml text node et en resort un string()\r
-% xmerl : "test & test" devient deux fragments de texte : "test " et "& test", il faut donc rassembler les morceaux...\r
-defragmenter(Text_nodes) ->\r
- lists:foldl(fun(Node, Acc) -> #xmlText{value = V} = Node, Acc ++ V end, [], Text_nodes).\r
-\r
-
-% Un utilisateur envoie un message
-message(Action) ->
- simple_xml_to_string(\r
- case {
- xmerl_xpath:string("cookie", Action),
- xmerl_xpath:string("pseudo", Action),
- xmerl_xpath:string("contenu", Action)
- } of
- {
- [#xmlElement{content = [#xmlText{value = Cookie}]}],
- [#xmlElement{content = Pseudo_fragments}],
- [#xmlElement{content = Contenu_fragments}]
- } -> \r
- case euphorik_minichat:user_by_cookie(Cookie) of\r
- {ok, U} ->\r
- Pseudo = defragmenter(Pseudo_fragments),\r
- Contenu = defragmenter(Contenu_fragments),\r
- % met à jour le pseudo du user\r
- euphorik_minichat:update_pseudo_user(U#user.id, Pseudo),\r
- Reponses = case xmerl_xpath:string("reponses", Action) of\r
- [#xmlElement{content = C}] ->\r
- lists:map(\r
- fun (Reponse) ->\r
- #xmlElement{attributes = [#xmlAttribute{name = id, value = Id_reponse}]} = Reponse,\r
- erlang:list_to_integer(Id_reponse, 36)\r
- end\r
- , C);\r
- _ -> []\r
- end,
- Contenu_strip = string:strip(Contenu),
- if Contenu_strip =:= [] -> xml_reponse_message(pas_ok);
- true ->
- case euphorik_minichat:nouveau_message(Contenu, U#user.id, Reponses) of
- erreur -> xml_reponse_message(pas_ok);
- _ -> xml_reponse_message(ok)
- end
- end;\r
- _ -> xml_reponse_message(pas_ok)\r
- end;
- _ ->
- xml_reponse_message(pas_ok)
- end\r
- ).\r