diff options
Diffstat (limited to 'src/site.clj')
| -rw-r--r-- | src/site.clj | 86 |
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!) |
