summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2010-01-12 00:09:25 -0500
committersostler <sbostler@gmail.com>2010-01-12 00:09:25 -0500
commit948d38e971712ddffeb29e794d436a3202fb54e2 (patch)
tree5b3f26113461f8ecb50df09156ef3018f17c9ffc /src
parent16dce906d7f4bd4bbe4b4b00b9375d42d5d85beb (diff)
Added error handling to refresh
Diffstat (limited to 'src')
-rwxr-xr-xsrc/site.clj49
1 files changed, 26 insertions, 23 deletions
diff --git a/src/site.clj b/src/site.clj
index 2bbc2bb..e2bcf5e 100755
--- a/src/site.clj
+++ b/src/site.clj
@@ -25,6 +25,10 @@
(defstruct user-struct :nick :user_id :avatar :last-seen)
(defstruct message-struct :nick :content :created_on)
+(defn user-struct-from-session [session]
+ (struct user-struct (session :nick) (session :user_id) (session :avatar)
+ (System/currentTimeMillis)))
+
(def rooms (ref {}))
(def run-flusher true)
@@ -84,11 +88,6 @@
(doall rs))))
:count))
-;; Room handling
-
-(defn fetch-rooms []
- (do-select ["SELECT * FROM ROOMS"]))
-
;; User authentication
(def nick-regex #"^[A-Za-z0-9\-_∆˚†]*$")
@@ -106,7 +105,18 @@
(let [db-user (fetch-nick nick)]
(and db-user (= (db-user :hash) hash) db-user)))
-;; Message handling
+;; Room handling
+
+(defn fetch-rooms []
+ (do-select ["SELECT * FROM ROOMS"]))
+
+(defn login-user [user room]
+ (alter (room :users) assoc (user :nick) user))
+
+(defn add-message [msg room]
+ (alter (room :messages) (swap cons) msg))
+
+;; Output
(defn process-message-for-json [d]
(assoc d :created_on (.getTime (d :created_on))))
@@ -243,8 +253,6 @@
(defn non-empty-string? [s]
(and s (> (count s) 0)))
-
-; TODO: hide admin-only rooms from profile
(defn profile [session profile-nick offset]
(let [user-info (fetch-nick profile-nick)]
(if user-info
@@ -293,10 +301,6 @@
(or (not (room :admin_only))
(session :is_admin))))
-(defn user-struct-from-session [session]
- (struct user-struct (session :nick) (session :user_id) (session :avatar)
- (System/currentTimeMillis)))
-
(defn chat [session room]
(let [now (System/currentTimeMillis)
nick (session :nick)
@@ -307,7 +311,7 @@
(reverse (fetch-messages-by-room (room :room_id) false))))]
(if nick
(dosync
- (alter (room :users) assoc nick (user-struct-from-session session))))
+ (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)
@@ -359,12 +363,6 @@
(re-find pic-regex (strip-params content)))
true false))
-(defn msg-transaction [nick msg room]
- (dosync
- (and (contains? (ensure (room :users)) nick)
- (alter (room :messages) (swap cons) msg)
- true)))
-
(defn msg-db [user-id room-id msg]
(let [content (.trim (msg :content))
is-image (is-image? content)]
@@ -381,10 +379,15 @@
content (.trim (params :content))
now (new Date)
msg (struct message-struct nick content now)]
- (cond (not room) (resp-error "BAD_ROOM")
- (not (msg-transaction nick msg room)) (resp-error "MUST_LOGIN")
- :else (do (msg-db user-id (room :room_id) msg)
- (resp-success "OK")))))
+ (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")))))
(defn validated-msg [session params]
(let [room-key (params :room)