diff options
| author | sostler <sbostler@gmail.com> | 2010-01-12 00:09:25 -0500 |
|---|---|---|
| committer | sostler <sbostler@gmail.com> | 2010-01-12 00:09:25 -0500 |
| commit | 948d38e971712ddffeb29e794d436a3202fb54e2 (patch) | |
| tree | 5b3f26113461f8ecb50df09156ef3018f17c9ffc /src | |
| parent | 16dce906d7f4bd4bbe4b4b00b9375d42d5d85beb (diff) | |
Added error handling to refresh
Diffstat (limited to 'src')
| -rwxr-xr-x | src/site.clj | 49 |
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) |
