-
Notifications
You must be signed in to change notification settings - Fork 0
/
swarm_events.erl
131 lines (97 loc) · 2.96 KB
/
swarm_events.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
%% @author J.R. Bedard <[email protected]>
%% @copyright 2008 jrbedard.
%% @doc TEMPLATE.
-module(swarm_events).
-author('jrbedard <[email protected]>').
-include_lib("stdlib/include/qlc.hrl").
-include_lib("xmerl/include/xmerl.hrl").
-include("swarm_schema.hrl").
-export([request/1, insert_test_data/0]).
request(Args) ->
case Args of
"around/lat=" ++ Lat ->
get_events_around(Lat, 32.2, true);
"favorites/" ++ Person ->
get_favorite_events(Person);
"event/" ++ Event ->
get_event_info("test");
_ ->
"<error>Not found</error>"
end.
%% E V E N T S
%% Get Events around a position
get_events_around(Lat, Lgn, Offline) ->
Rows = swarm_mnesia:do(qlc:q([X || X <- mnesia:table(event)])),
EventsXML = events_to_xml(Rows).
%% Get Favorite Events
get_favorite_events(p_id) ->
Rows = swarm_mnesia:do(qlc:q([X || X <- mnesia:table(event)])),
EventsXML = events_to_xml(Rows).
events_to_xml(Rows) ->
%% Create People XML
{RootEl, _} = xmerl_scan:string("<events/>"),
#xmlElement{content = Content} = RootEl,
%% For each Person Row
NewContent = export_event(Rows, Content, 0),
lists:flatten([NewContent]),
%%io:format("people xml : ~p~n", [NewContent]),
NewRootEl=RootEl#xmlElement{content=NewContent},
EventsXML=xmerl:export_simple([NewRootEl], xmerl_xml),
lists:flatten(EventsXML).
%%io:format("people xml : ~p~n", [Export]),
%% Recursive person Export
export_event([], Data, Type) ->
Data;
export_event([Row | NewRows], OldData, Type) ->
case Type of
0 -> %% event around / favorites
Data = [{event, [], [
{id, [], [Row#event.id]},
{name, [], [Row#event.name]},
{image_url, [], [Row#event.image_url]}
]}]
end,
NewData = OldData ++ Data,
export_event(NewRows, NewData, Type).
%% E V E N T
%% Get Event info
get_event_info(E_id) ->
Fun = fun() -> mnesia:read({event, E_id}) end,
{atomic, [Row]} = mnesia:transaction(Fun),
Data = [{event, [], [
{id, [], [Row#event.id]},
{name, [], [Row#event.name]}
]}],
NewRootEl=#xmlElement{content=Data},
EventXML=xmerl:export_simple([NewRootEl], xmerl_xml),
lists:flatten(EventXML).
%% Create Event
create_event(E_id, E_name) ->
Row = #event{id=E_id, name=E_name},
F = fun() -> mnesia:write(Row) end,
mnesia:transaction(F).
%% Insert fake users in Mnesia!
insert_test_data() ->
io:format("SWARM: Adding Fake Events~n"),
create_event("test","test"),
create_event("test2","test2").
%%create_event("test3","test3").
%% p_at_pos, {person, lat, lgn}).
fake_events() ->
"<people count='2'>
<person id='1' name='test'>
<image path='test'/>
<status online='true'>my status</status>
<position lat='32.3' lgn='12.4' city='San Francisco'/>
</person>
<person id='2' name='test2'>
<image path='test'/>
<status online='false'/>
<position lat='32.3' lgn='12.4' city='San Francisco'/>
</person>
<person id='3' name='test3'>
<image path='test'/>
<status online='false'/>
<position lat='32.3' lgn='12.4' city='San Francisco'/>
</person>
</people>".