summaryrefslogtreecommitdiff
path: root/src/site.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/site.clj')
-rw-r--r--src/site.clj86
1 files changed, 6 insertions, 80 deletions
diff --git a/src/site.clj b/src/site.clj
index cda6dc0..c116f53 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -19,14 +19,11 @@
cookie-login
session-sweeper
feed
+ rooms
tags
scheduled-agent
user))
-(def *run-flusher* true)
-(def *flusher-sleep* (seconds 4))
-(def *user-timeout* (seconds 15))
-
(defstruct user-struct :nick :user_id :avatar :last-seen)
(defstruct message-struct :nick :content :created_on :msg_id)
@@ -34,26 +31,6 @@
(struct user-struct (session :nick) (session :user_id) (session :avatar)
(System/currentTimeMillis)))
-(def rooms (ref {}))
-(def flusher (agent nil))
-
-(defn flush-inactive-users! [x]
- (doseq [[rid room] @rooms]
- (dosync
- (let [users (room :users)
- now (System/currentTimeMillis)
- cutoff (- now *user-timeout*)
- alive? (fn [[n u]] (> (u :last-seen) cutoff))]
- (ref-set users
- (into {} (filter alive? (ensure users)))))))
- (Thread/sleep *flusher-sleep*)
- (when *run-flusher*
- (send *agent* #'flush-inactive-users!))
- x)
-
-(defn start-user-flusher! []
- (send flusher flush-inactive-users!))
-
;; Configuration
(def *server-url*
@@ -69,24 +46,6 @@
(.mkdir (new File *image-directory*))
(.mkdir (new File *avatar-directory*))
-;; Room handling
-
-(def *default-room* "dumpfm")
-
-(defn default-room? [key]
- (= (lower-case key) *default-room*))
-
-(defn lookup-room [key]
- (@rooms (lower-case key)))
-
-(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))
;; Logging
@@ -154,25 +113,6 @@
(assoc m "topic" topic)
m)))
-
-(defn count-messages-by-room [room-id image-only]
- (let [query (str "SELECT COUNT(*)
- FROM messages m, users u
- WHERE room_id = ? AND m.user_id = u.user_id"
- (if image-only " AND m.is_image = true " ""))]
- (do-count [query room-id])))
-
-(defn fetch-messages-by-room
- ([room-id image-only] (fetch-messages-by-room room-id image-only 0))
- ([room-id image-only offset]
- (let [query (str "SELECT m.content, m.message_id, m.created_on, u.nick, u.avatar
- FROM users u, messages m
- WHERE room_id = ? AND m.user_id = u.user_id "
- (if image-only "AND m.is_image = true " "")
- "ORDER BY created_on DESC
- LIMIT ? OFFSET ?")]
- (do-select [query room-id *dumps-per-page* offset]))))
-
(defn count-messages-by-nick [nick image-only]
(let [query (str "SELECT COUNT(*)
FROM messages m, users u, rooms r
@@ -203,17 +143,6 @@
AND m.message_id = ?"]
(first (do-select [query (maybe-parse-int m-id -1)]))))
-(defn build-room-map-from-db [room-db]
- {:admin_only (room-db :admin_only)
- :room_id (room-db :room_id)
- :key (room-db :key)
- :name (room-db :name)
- :description (room-db :description)
- :users (ref {})
- :messages (ref (fetch-messages-by-room (room-db :room_id) false))
- :topic (ref nil)
- })
-
;; User-id/nick cache
;; I keep needing to grab user-id from a nick so I thought I'd cache them
@@ -345,7 +274,7 @@
(set (read-lines *reserved-nicks-path*)))
(def *reserved-nicks*
- (scheduled-agent (no-args-adaptor load-invalid-nicks)
+ (scheduled-agent load-invalid-nicks
*reserved-nicks-refresh-period-sec*
(load-invalid-nicks)))
@@ -359,7 +288,7 @@
email (or (params :email) "")
hash (or (params :hash) "")
invalid-nick-reason (is-invalid-nick? nick)]
- (cond invalid-nick-reason (resp-error invalid-nick-reason)
+ (cond invalid-nick-reason (resp-error invalid-nick-reason)
(nick-reserved? nick) (resp-error "NICK_TAKEN")
:else (do
(do-insert :users
@@ -489,7 +418,7 @@ ORDER BY msg_count DESC")
(vec (do-select [*directory-update-query*])))
(def *directory-list*
- (scheduled-agent (no-args-adaptor fetch-directory)
+ (scheduled-agent fetch-directory
*directory-refresh-period-sec*
[]))
@@ -1129,12 +1058,8 @@ ORDER BY msg_count DESC")
(with-session *session-cookie-params*)
(with-multipart))
-;; Load messages from database
-(dosync
- (doseq [room-db (fetch-rooms)]
- (alter rooms assoc (lower-case (room-db :key))
- (build-room-map-from-db room-db))))
+;;; Startup Code
(defn start-server [port]
(run-server {:port port}
@@ -1153,6 +1078,7 @@ ORDER BY msg_count DESC")
(def options
(apply parse-command-args *command-line-args*))
+(load-rooms!)
(start-server (options :port))
(start-user-flusher!)
(start-session-pruner!)