summaryrefslogtreecommitdiff
path: root/src/rooms.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/rooms.clj')
-rw-r--r--src/rooms.clj38
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))))