conversations/4\r
]).
+-compile(export_all).
+
-include("euphorik_bd.hrl").
-include_lib("stdlib/include/qlc.hrl").
% Ajoute les parents de chaque message.
% @spec mise_en_forme_conversation([integer()]) -> [{integer(), [integer()]}]
mise_en_forme_conversation(Messages) ->
- lists:foldl(
+ lists:foldr(
fun(Id, Acc) ->
case euphorik_minichat:message_by_id(Id) of
{ok, Message} ->
Curseur = qlc:cursor(q([E#minichat.id || E <- qlc:sort(table(minichat), [{order, descending}])])),
{CP, Plus} = conversation_principale(Curseur, Conversations, N, P),
qlc:delete_cursor(Curseur),
- {reverse([M || M <- CP, M > D]), Plus} % filtre en fonction de D
+ {[M || M <- CP, M > D], Plus} % filtre en fonction de D
end)),
[Conversation_principale | Conversations].
% et la liste de conversations.
% N est le nombre de messages que l'on souhaite.
% P est le numéro de la page (1, 2, 3...)
-% Renvoie {[Id], Plus}
-% @spec conversation_principale(qlc:QueryCursor(), [Conversation_detailee()], integer(), integer())
+% @spec conversation_principale(qlc:QueryCursor(), [Conversation_detailee()], integer(), integer()) -> {[Id], Plus}
conversation_principale(C, Conversations, N, P) ->
- CP = conversation_principale2(C, lists:flatten(map(fun({C2, _, X, _}) -> C2 -- X end, Conversations)), N + 1, (P - 1) * N),
+ % on prend en message de plus pour savoir s'il y en a plus que ce que l'on désire
+ CP = reverse(conversation_principale2(C, lists:flatten(map(fun({C2, _, X, _}) -> C2 -- X end, Conversations)), N + 1, (P - 1) * N)),
Plus = length(CP) =:= N + 1,
{
if Plus ->
true ->
Enfants = enfants(M),
Parents = parents(M),
- % un message est dit exiterne si un de ses parent ne fait pas partie de la conversation ou si un de ses parents fait partie de X
+ % un message est dit externe si un de ses parent ne fait pas partie de la conversation ou si un de ses parents fait partie de X
Est_message_externe = Parents -- Messages =/= [] orelse intersection(Parents, X) =/= [],
conversation([M | Messages], Reste ++ Enfants, if Est_message_externe -> [M | X]; true -> X end)
end;