X-Git-Url: http://git.euphorik.ch/?a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_minichat_conversation.erl;h=d5f486f134fb7c03616665659a16d89772b98894;hb=81b3e94e62dd60087d71efc42004f8222d9e1e7a;hp=9015fec27876c9c3ff09bc7ce9dd36deb8fb92ab;hpb=6fab12088e85e62ef34a312c3f3a33f9636bbc97;p=euphorik.git diff --git a/modules/erl/euphorik_minichat_conversation.erl b/modules/erl/euphorik_minichat_conversation.erl index 9015fec..d5f486f 100755 --- a/modules/erl/euphorik_minichat_conversation.erl +++ b/modules/erl/euphorik_minichat_conversation.erl @@ -17,7 +17,7 @@ -include_lib("stdlib/include/qlc.hrl"). -import(lists, [reverse/1, any/2, map/2, sublist/3, filter/2]). --import(euphorik_minichat, [resultat_transaction/1]). +-import(euphorik_bd, [resultat_transaction/1]). -import(qlc, [e/1, q/1, keysort/3]). -import(mnesia, [table/1, transaction/1]). @@ -27,11 +27,11 @@ % Message est le message de type #minichat et Parents une liste d'Id. % Plus est un bool. Si Plus vaut true alors il y a encore des messages. % Si il n'y a pas de nouveaux message alors la fonction est bloquante et attend un nouveau message. -% @spec conversations([{integer(), integer()}], integer(), integer(), integer()) -> [Conversation()] +% @spec conversations([{integer(), integer(), integer()}], integer(), integer(), integer()) -> [Conversation()] conversations(Racines, N, D, P) -> % écoute des nouveaux messages - case subscribe(minichat, 2) of - erreur = E -> + case mnesia:subscribe({table, minichat, simple}) of + {error, E} = E -> E; _ -> % demande des conversations @@ -55,31 +55,33 @@ conversations(Racines, N, D, P) -> Conversations end ), - unsubscribe(minichat), + mnesia:unsubscribe({table, minichat, simple}), Conversations_mises_en_forme end. % Ecoute les événements de modification d'une table. % @spec subscribe(atom(), integer()) -> ok | erreur -subscribe(_Table, 0) -> - erreur; -subscribe(Table, C) -> - case mnesia:subscribe({table, Table, simple}) of - {error, {not_active_local, Table}} -> - mnesia:add_table_copy(minichat, node(), ram_copies), - subscribe(Table, C - 1); - {error, _}-> - erreur; - _ -> - ok - end. +% Obsolète +%~ subscribe(_Table, 0) -> + %~ erreur; +%~ subscribe(Table, C) -> + %~ case mnesia:subscribe({table, Table, simple}) of + %~ {error, {not_active_local, Table}} -> + %~ mnesia:add_table_copy(minichat, node(), ram_copies), + %~ subscribe(Table, C - 1); + %~ {error, _}-> + %~ erreur; + %~ _ -> + %~ ok + %~ end. % Arrête d'écouter les modifications d'une table. % @spec unsubscribe(atom()) -> term() -unsubscribe(Table) -> - mnesia:unsubscribe({table, Table, simple}). +% Obsolète +%~ unsubscribe(Table) -> + %~ mnesia:unsubscribe({table, Table, simple}). % Attend qu'un nouveau message arrive, function bloquante. @@ -115,7 +117,7 @@ mise_en_forme_conversations([{Principale, Plus_principale} | Conversations]) -> mise_en_forme_conversation(Messages) -> lists:foldr( fun(Id, Acc) -> - case euphorik_minichat:message_by_id(Id) of + case euphorik_bd:message_by_id(Id) of {ok, Message} -> [{Message, parents(Id)} | Acc]; _ -> @@ -132,7 +134,7 @@ mise_en_forme_conversation(Messages) -> % Racines est une liste de tuple {Id, P} des racines des conversations ou P est la page et Id l'id du message. % @spec conversations_detailees([{integer(), integer()}], integer(), integer(), integer()) -> [[integer()] | Conversation_detailee()] conversations_detailees(Racines, N, D, P) -> - Conversations = map(fun({Racine, P_conv}) -> conversation(Racine, N, D, P_conv) end, Racines), + Conversations = map(fun({Racine, P_conv, Dernier}) -> conversation(Racine, N, Dernier, P_conv) end, Racines), Conversation_principale = resultat_transaction(transaction(fun() -> Curseur = qlc:cursor(q([E#minichat.id || E <- qlc:sort(table(minichat), [{order, descending}])])), {CP, Plus} = conversation_principale(Curseur, Conversations, N, P), @@ -202,10 +204,10 @@ conversation(R, N, D, P) -> if Decalage > length(C) -> []; true -> - reverse(filter( + filter( fun(E) -> E > D end, - sublist(C, Decalage, N) - )) + reverse(sublist(C, Decalage, N)) + ) end, reverse(X), Decalage + N - 1 < length(C)