summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/site.clj51
-rwxr-xr-xtemplate/browser.st9
-rwxr-xr-xtemplate/chat.st6
3 files changed, 54 insertions, 12 deletions
diff --git a/src/site.clj b/src/site.clj
index e2bcf5e..d387247 100755
--- a/src/site.clj
+++ b/src/site.clj
@@ -196,7 +196,8 @@
(defn set-user-attributes [st session]
(if (session :nick)
- (.setAttribute st "user_nick" (session :nick))))
+ (.setAttribute st "user_nick" (session :nick))
+ (.setAttribute st "isadmin" (session :is_admin))))
(defn fetch-template [template-name session]
(let [st (.getInstanceOf template-group template-name)]
@@ -316,7 +317,6 @@
(.setAttribute st "users" user-list))
(.setAttribute st "messages" message-list)
(.setAttribute st "roomkey" (room :key))
- (.setAttribute st "isadmin" (session :is_admin))
(.setAttribute st "isadminroom" (room :admin_only))
(.setAttribute st "json_room_key" (json-str (room :key)))
(.setAttribute st "json_user_nick" (if nick (json-str nick) "null"))
@@ -379,15 +379,16 @@
content (.trim (params :content))
now (new Date)
msg (struct message-struct nick content now)]
- (if (not room)
- (resp-error "BAD_ROOM")
- (do
- (dosync
- (if (not (contains? @(room :users) nick))
- (login-user (user-struct-from-session session) room))
- (add-message msg room))
- (msg-db user-id (room :room_id) msg)
- (resp-success "OK")))))
+ (cond (not room) (resp-error "BAD_ROOM")
+ (not nick) (resp-error "NOT_LOGGED_IN")
+ :else
+ (do
+ (dosync
+ (if (not (contains? @(room :users) nick))
+ (login-user (user-struct-from-session session) room))
+ (add-message msg room))
+ (msg-db user-id (room :room_id) msg)
+ (resp-success "OK")))))
(defn validated-msg [session params]
(let [room-key (params :room)
@@ -396,6 +397,33 @@
(msg session params)
(resp-error "UNKNOWN_ROOM"))))
+;; Browser
+
+(defn browser [session]
+ (let [room (@rooms "RoomA")
+ now (System/currentTimeMillis)
+ nick (session :nick)
+ st (fetch-template "browser" session)
+ message-list (to-array
+ (map process-message-for-output
+ ; TODO: remove db query
+ (reverse (fetch-messages-by-room (room :room_id) false))))]
+ (if nick
+ (dosync
+ (login-user (user-struct-from-session session) room)))
+ (let [user-list (to-array (prepare-user-list room))]
+ (.setAttribute st "users" user-list))
+ (.setAttribute st "messages" message-list)
+ (.setAttribute st "roomkey" (room :key))
+ (.setAttribute st "isadmin" (session :is_admin))
+ (.setAttribute st "isadminroom" (room :admin_only))
+ (.setAttribute st "json_room_key" (json-str (room :key)))
+ (.setAttribute st "json_user_nick" (if nick (json-str nick) "null"))
+ (.setAttribute st "roomname" (room :name))
+ (.setAttribute st "timestamp" now)
+ (.toString st)))
+
+
;; Chat Log
; TODO: Optimize dump counts
@@ -458,6 +486,7 @@
(GET "/submit-registration" (register session params))
(GET "/:room/chat" (no-cache (validated-chat session (-> request :route-params :room))))
(GET "/chat" (no-cache (validated-chat session "RoomA")))
+ (GET "/browser" (browser session))
(GET "/refresh" (validated-refresh session params))
(GET "/msg" (validated-msg session params))
(GET "/log" (validated-log session "RoomA" "0"))
diff --git a/template/browser.st b/template/browser.st
new file mode 100755
index 0000000..f9439d6
--- /dev/null
+++ b/template/browser.st
@@ -0,0 +1,9 @@
+<html>
+ <body>
+ $if(nick)$
+ Hello, $nick$
+ $else$
+ Hello, unnamed
+ $endif$
+ </body>
+</html>
diff --git a/template/chat.st b/template/chat.st
index 5c97275..701dd92 100755
--- a/template/chat.st
+++ b/template/chat.st
@@ -9,7 +9,11 @@
var Room = $json_room_key$;
var Timestamp = $timestamp$;
var PostedMessages = [];
- var IsAdmin = $if(isadmin)$ true $else$ false $endif$
+ $if(isadmin)$
+ var IsAdmin = true;
+ $else$
+ var IsAdmin = false;
+ $endif$
</script>
$if(isadminroom)$