diff options
| author | sostler <sbostler@gmail.com> | 2010-06-05 03:23:50 -0400 |
|---|---|---|
| committer | sostler <sbostler@gmail.com> | 2010-06-05 03:23:50 -0400 |
| commit | 8cfd1a374cf737cd2413bc19a45862a05a1ed8de (patch) | |
| tree | 3bbfdb5d8c82762d6ec5909324568a06105c82ec /src/rooms.clj | |
| parent | dcc43bef85f4ae2da747a14c7e94de035d01d8bb (diff) | |
Update feed downloading to use rome and db queue
Diffstat (limited to 'src/rooms.clj')
| -rw-r--r-- | src/rooms.clj | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/src/rooms.clj b/src/rooms.clj index 09b81ba..dd02219 100644 --- a/src/rooms.clj +++ b/src/rooms.clj @@ -1,7 +1,8 @@ (ns rooms (:import java.util.Date) (:use clojure.contrib.str-utils - utils)) + utils + user)) (defstruct message-struct :nick :content :created_on :msg_id) @@ -43,6 +44,11 @@ (defn fetch-rooms [] (do-select ["SELECT * FROM ROOMS WHERE active"])) +(defn lookup-room-key [room-id] + (or (some #(and (= (:room_id %) room-id) (:room_key %)) + (vals @rooms)) + (:key (first (do-select ["SELECT key FROM rooms where room_id = ?" room-id]))))) + (defn count-messages-by-room [room-id image-only] (let [query (str "SELECT COUNT(*) FROM messages m, users u @@ -93,8 +99,14 @@ (defn add-message [msg room] (alter (room :messages) (swap cons) msg)) +(defn insert-message-into-db! [user-id room-id content is-image] + (:message_id + (first + (do-select ["INSERT INTO messages (user_id, room_id, content, is_image) + VALUES (?, ?, ?, ?) RETURNING message_id" + user-id room-id content is-image])))) + (defn create-and-add-room! [key] - (println "Creating room " key) (do-select ["INSERT INTO rooms (key, name, description) VALUES (?, ?, ?) RETURNING room_id" key key key]) @@ -104,6 +116,7 @@ (build-room-map-from-db room-db)) room-db))) +; TODO: cache (defn get-or-create-room! [key] (:room_id (or (first (do-select ["SELECT room_id FROM rooms WHERE lower(key) = ?" @@ -111,16 +124,21 @@ (create-and-add-room! key) (throw (Exception. (str "Unable to create room " key)))))) -(defn- get-or-create-room-bot-id! [nick] +(defn- fetch-or-create-bot-id! [nick] ((comp :user_id first) - (or (do-select ["SELECT user_id FROM users WHERE lower(nick) = ?" - (lower-case nick)]) + (or [(fetch-nick nick)] (do - (println "Creating bot " nick) (do-select ["INSERT INTO users (nick, hash, email) - VALUES (?, ?, ?) RETURNING user_id" + VALUES (?, ?, ?) RETURNING user_id" nick "GARBAGE" "info@dump.fm"]))))) -(defn get-or-create-room-bot! [key] - (let [nick (str "~" key)] - [nick (get-or-create-room-bot-id! nick)]))
\ No newline at end of file +(def room-bot-id-cache (ref {})) + +(defn get-or-create-room-bot! [room-key] + (let [nick (str "~" room-key)] + (or (get @room-bot-id-cache nick) + (let [id (fetch-or-create-bot-id! nick) + r [nick id]] + (dosync + (commute room-bot-id-cache assoc nick r)) + r)))) |
