From d5adf274c137bef22d5695d4a280e10068edcb0e Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Wed, 23 Jun 2010 20:37:31 +0200 Subject: Show avatars in roster --- src/core/ephraim.erl | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) (limited to 'src/core/ephraim.erl') diff --git a/src/core/ephraim.erl b/src/core/ephraim.erl index 523749c..bd36118 100644 --- a/src/core/ephraim.erl +++ b/src/core/ephraim.erl @@ -4,6 +4,7 @@ -record(state, { conn :: pid(), roster :: pid(), + event :: pid(), convs :: dict(), uis :: set() }). @@ -25,29 +26,35 @@ init() -> Conn = spawn(ephraim_conn, init, []), Roster = spawn(ephraim_roster, init, []), - loop(#state{conn=Conn,roster=Roster,convs=dict:new(),uis=sets:new()}), + Event = spawn(ephraim_event, init, []), + loop(#state{conn=Conn,roster=Roster,event=Event,convs=dict:new(),uis=sets:new()}), init:stop(). --spec get_conv(#state{},exmpp_jid:jid()) -> {#state{},pid()}. +-spec get_conv(#state{},exmpp_jid:jid()) -> {#state{},pid()|undefined}. get_conv(State, JID) -> Key = exmpp_jid:to_lower(JID), - case dict:find(Key, State#state.convs) of - {ok, Conv} -> - {State, Conv}; - error -> - Conv = spawn(ephraim_conv, init, [Key]), - Dict = dict:store(Key, Conv, State#state.convs), - {State#state{convs=Dict}, Conv} + case Key of + {_,_,undefined} -> + {State, undefined}; + _ -> + case dict:find(Key, State#state.convs) of + {ok, Conv} -> + {State, Conv}; + error -> + Conv = spawn(ephraim_conv, init, [Key]), + Dict = dict:store(Key, Conv, State#state.convs), + {State#state{convs=Dict}, Conv} + end end. -spec loop(#state{}) -> ok. loop(State) -> receive stop -> - %dict:fold(fun(_,Conv,Msg) -> Conv ! Msg end, stop, State#state.convs), ephraim_util:send_all_values(State#state.convs, stop), State#state.conn ! stop, State#state.roster ! stop, + State#state.event ! stop, ok; {register_ui, Pid} -> @@ -78,9 +85,18 @@ loop(State) -> {receive_message, From, Packet} -> {State2, Conv} = get_conv(State, From), - Conv ! {receive_message, Packet}, + case Conv of + undefined -> + io:format("~p~n", [Packet]); + _ -> + Conv ! {receive_message, Packet} + end, loop(State2); + {receive_event, From, Packet} -> + State#state.event ! {receive_event, From, Packet}, + loop(State); + {receive_iq, IQ} -> case IQ of {iq, response, result, _, 'jabber:iq:roster', Payload, _, _, 'jabber:client'} -> -- cgit v1.2.3