Current section

Files

Jump to
escalus src escalus_history_h.erl
Raw

src/escalus_history_h.erl

-module(escalus_history_h).
-behaviour(gen_event).
-export([get_history/1]).
-export([init/1,
terminate/2,
handle_info/2,
handle_call/2,
handle_event/2,
code_change/3]).
-record(state, {
events :: list()
}).
-spec get_history(escalus_event:manager()) -> list().
get_history(Mgr) ->
gen_event:call(Mgr, escalus_history_h, get_history).
init([]) ->
S = #state{
events = []
},
{ok, S}.
handle_event({incoming_stanza, Jid, Stanza}, State) ->
{ok, save_stanza(incoming_stanza, Jid, Stanza, State)};
handle_event({outgoing_stanza, Jid, Stanza}, State) ->
{ok, save_stanza(outgoing_stanza, Jid, Stanza, State)};
handle_event({pop_incoming_stanza, Jid, Stanza}, State) ->
{ok, save_stanza(pop_incoming_stanza, Jid, Stanza, State)};
handle_event(story_start, State) ->
{ok, save_story_event(story_start, State)};
handle_event(story_end, State) ->
{ok, save_story_event(story_end, State)};
handle_event(_Event, State) ->
{ok, State}.
handle_info(_, State) ->
{ok, State}.
handle_call(get_history, State=#state{events=Events}) ->
{ok, lists:reverse(Events), State}.
code_change(_, _, State) ->
{ok, State}.
terminate(_, _) ->
ok.
%% ===================================================================
%% Helpers
%% ===================================================================
save_stanza(Type, Jid, Stanza, State=#state{events = Events}) ->
State#state{
events = [{stanza, Type, Jid, erlang:system_time(microsecond), Stanza}|Events]}.
save_story_event(Type, State=#state{events = Events}) ->
State#state{
events = [{story, Type, erlang:system_time(microsecond)}|Events]}.