index.erl 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. -module(index).
  2. -compile(export_all).
  3. -include_lib("kvs/include/entry.hrl").
  4. -include_lib("nitro/include/nitro.hrl").
  5. -include_lib("n2o/include/n2o.hrl").
  6. body() -> [].
  7. main() -> [].
  8. event(init) ->
  9. Room = n2o:session(room),
  10. io:format("Room: ~p~n",[Room]),
  11. n2o:reg({topic,Room}),
  12. Sid = (get(context))#cx.session,
  13. n2o:reg(Sid),
  14. nitro:clear(history),
  15. nitro:update(logout, #button{id=logout, body="Logout " ++ n2o:user(), postback=logout}),
  16. nitro:update(heading, #h2{id=heading, body=Room}),
  17. nitro:update(upload, #upload{}),
  18. nitro:update(send, #button{id=send, body= <<"Chat">>, postback=chat, source=[message] }),
  19. [ event({client,{E#entry.from,E#entry.media}})
  20. || E <- lists:reverse(kvs:entries(kvs:get(feed,{room,Room}),entry,10)) ];
  21. event(logout) ->
  22. n2o:user([]),
  23. nitro:redirect("/app/login.htm");
  24. event(chat) ->
  25. User = n2o:user(),
  26. Room = n2o:session(room),
  27. Message = nitro:q(message),
  28. n2o:info(?MODULE,"Chat pressed: ~p~n",[{Room,Message,User}]),
  29. kvs:add(#entry{id=kvs:next_id("entry",1),from=n2o:user(),
  30. feed_id={room,Room},media=Message}),
  31. n2o:send({topic,Room},#client{data={User,Message}});
  32. event(#client{data={User,Message}}) ->
  33. HTML = nitro:to_list(Message),
  34. nitro:wire(#jq{target=message,method=[focus,select]}),
  35. DTL = #dtl{file="message",app=sample,bindings=[{user,User},{color,"gray"},{message,HTML}]},
  36. nitro:insert_top(history, nitro:jse(nitro:render(DTL)));
  37. event(#ftp{sid=Sid,filename=Filename,status={event,stop}}=Data) ->
  38. Name = hd(lists:reverse(string:tokens(nitro:to_list(Filename),"/"))),
  39. erlang:put(message,nitro:render(#link{href=iolist_to_binary(["/app/",Sid,"/",nitro_conv:url_encode(Name)]),body=Name})),
  40. n2o:info(?MODULE,"FTP Delivered ~p~n",[Data]),
  41. event(chat);
  42. event(Event) ->
  43. n2o:info(?MODULE,"Event: ~p", [Event]),
  44. ok.