summaryrefslogtreecommitdiff
path: root/src/site.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/site.clj')
-rw-r--r--src/site.clj378
1 files changed, 150 insertions, 228 deletions
diff --git a/src/site.clj b/src/site.clj
index a1f5c08..fc7d541 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -18,12 +18,13 @@
config
admin
compojure
+ datalayer
email
fame
+ message
utils
cookie-login
session-sweeper
- feed
rooms
tags
scheduled-agent
@@ -110,50 +111,21 @@
(new-messages room ts))
"favs" (new-favs nick ts)})
-(defn count-messages-by-nick [nick image-only]
- (let [query (str "SELECT COUNT(*)
- FROM messages m, users u, rooms r
- WHERE m.user_id = u.user_id AND u.nick = ?
- AND r.room_id = m.room_id AND r.admin_only = false "
- (if image-only "AND m.is_image = true " ""))]
- (do-count [query nick])))
-(defn fetch-messages-by-nick
- ([nick image-only] (fetch-messages-by-nick nick image-only 0))
- ([nick image-only offset]
- (let [query (str "SELECT m.content, m.created_on, m.message_id, u.nick, u.avatar, r.key
- FROM messages m, users u, rooms r
- WHERE m.user_id = u.user_id AND u.nick = ?
- AND r.room_id = m.room_id AND r.admin_only = false "
- (if image-only "AND m.is_image = true " "")
- "ORDER BY created_on DESC
- LIMIT ? OFFSET ?")]
- (do-select [query nick *dumps-per-page* offset]))))
-
-(defn fetch-message-by-id [m-id]
- (let [query "SELECT m.message_id, m.content, m.created_on, m.user_id,
- u.nick, u.avatar, r.key, r.admin_only
- FROM messages m, users u, rooms r
- WHERE m.user_id = u.user_id
- AND r.room_id = m.room_id
- AND m.message_id = ?"]
- (first (do-select [query (maybe-parse-int m-id -1)]))))
-
-(defn fetch-public-message-by-id [m-id]
- (let [msg (tags/fetch-dump-by-id m-id)]
- (if (and msg (not (:admin_only msg)))
+(defn fetch-public-message-by-id [m-id viewer-nick]
+ (if-let [msg (tags/fetch-dump-by-id m-id viewer-nick)]
+ (if-not (:admin_only msg)
msg)))
;; User-id/nick cache
;; I keep needing to grab user-id from a nick so I thought I'd cache them
-;; @timb: I just duplicated this in the user-info map :(
-;; we should reconcile our user caches
-(def user-id-cache (ref {}))
+;; sostler todo: will replace this w/ user/user-id-cache soon
+(def *user-id-cache* (ref {}))
(def *user-id-cache-size* 500)
(defn user-id-from-nick [nick]
(let [nick (lower-case nick)
- found (@user-id-cache nick)]
+ found (@*user-id-cache* nick)]
(if found
found
(let [query (str "SELECT user_id FROM users WHERE lower(nick) = ?")
@@ -162,8 +134,8 @@
nil
(let [found (res :user_id)]
(dosync
- (if (> (count @user-id-cache) *user-id-cache-size*) (ref-set user-id-cache {}))
- (alter user-id-cache assoc nick found))
+ (if (> (count @*user-id-cache*) *user-id-cache-size*) (ref-set *user-id-cache* {}))
+ (alter *user-id-cache* assoc nick found))
found))))))
;; Login code
@@ -246,9 +218,10 @@
(defn log-login [user_id ip]
;; i'm using do-cmds here because update-values can't deal with stuff like 'last_login = now()'
- (let [query (format "UPDATE users SET last_ip = '%s'::cidr, last_login = now() WHERE user_id = %s" (str ip) (str user_id))]
- (do-cmds query))
-)
+ (try
+ (let [query (format "UPDATE users SET last_ip = '%s'::cidr, last_login = now() WHERE user_id = %s" (str ip) (str user_id))]
+ (do-cmds query))
+ (catch Exception e nil)))
(defn login [session params cookies request]
(let [nick (or (params :nick) "")
@@ -264,16 +237,15 @@
(log-login (db-user :user_id) ip)
[(session-assoc-from-db db-user)
login-cookie
- (resp-success "OK")]
- )
- (resp-error "BAD_LOGIN"))))
+ (resp-success "OK")])
+ (resp-error "BAD_LOGIN"))))
(defn logout [session]
[(session-dissoc :nick :user_id :is_admin :avatar)
(set-cookie *login-token-key* "dummy"
:expires "Thu, 01-Jan-1970 00:00:01 GMT"
:domain *cookie-domain*)
- (redirect-to "http://dump.fm/")])
+ (redirect-to "/")])
;; Registration
@@ -355,7 +327,8 @@ ORDER BY cnt DESC
{:list res
:map (zipmap (map :nick res) (map :cnt res))}))
-(def *scores-refresh-period-sec* (* 29 60))
+;; sostler: stop score refresh until redis cache can be added
+(def *scores-refresh-period-sec* (* 29 60 9999999))
(def *user-scores*
(scheduled-agent build-score-list
@@ -401,22 +374,8 @@ ORDER BY cnt DESC
(map
(comp take-images :content)
dumps))))))
-
-(defn count-dumps-posted [nick]
- (:count
- (first
- (do-select ["select count(*) from messages m, users u
- where m.user_id = u.user_id and lower(u.nick) = ?
- and m.is_image = true" (.toLowerCase nick)]))))
-(defn count-dumps-user-faved [nick]
- (:count
- (first
- (do-select ["select count(distinct(m.message_id)) from users u, tags t, messages m
- where lower(u.nick) = ? and u.user_id = t.user_id
- and t.tag = 'favorite'
- and t.message_id = m.message_id and m.is_image = true"
- (.toLowerCase nick)]))))
+(def use-redis-favscore true)
(defn profile
([session profile-nick] (profile session profile-nick "profile"))
@@ -424,14 +383,18 @@ ORDER BY cnt DESC
(if-let [user-info (fetch-nick profile-nick)]
(let [st (fetch-template template session)
profile-nick (:nick user-info) ; Update to get right casing
- nick (session :nick)
+ nick (:nick session)
logger (make-time-logger)
is-home (and nick (= nick profile-nick))
- score (lookup-score profile-nick)
+ score (if use-redis-favscore
+ (fetch-redis-favscore profile-nick)
+ (lookup-score profile-nick))
dumps (logger tags/fetch-dumps
:user-tag-id (:user_id session)
:nick profile-nick
:limit 10)
+ dms (fetch-private-messages (:user_id user-info))
+ recips (set (apply concat (map #(get % "recips") dms)))
imgs (pull-random-dump-images dumps 5)]
(do
(.setAttribute st "is_home" is-home)
@@ -441,6 +404,9 @@ ORDER BY cnt DESC
(if (non-empty-string? v) (escape-html v)))))
(.setAttribute st "score" (comma-format score))
(.setAttribute st "score_ent" (score-to-entity score))
+ (when-not (empty? dms)
+ (.setAttribute st "dms" dms)
+ (.setAttribute st "recips" (json-str (map lower-case recips))))
(if (not (empty? imgs))
(.setAttribute st "imgs" imgs))
(.setAttribute st "debug_log_items" (logger))
@@ -449,7 +415,8 @@ ORDER BY cnt DESC
(defn update-user-db [user-id attr val]
(with-connection *db*
- (update-values "users" ["user_id = ?" user-id] {attr val})))
+ (update-values "users" ["user_id = ?" user-id] {attr val}))
+ (update-cache! user-id attr val))
(defn update-avatar [session url]
(update-user-db (session :user_id) "avatar" url)
@@ -490,7 +457,9 @@ ORDER BY cnt DESC
(defn build-mini-profile [user-info]
(let [st (fetch-template-fragment "mini_profile")
nick (user-info :nick)
- score (lookup-score nick)]
+ score (if use-redis-favscore
+ (fetch-redis-favscore nick)
+ (lookup-score nick))]
(doseq [a [:nick :avatar :contact :bio]]
(let [v (user-info a)]
(.setAttribute st (name a)
@@ -549,42 +518,16 @@ ORDER BY cnt DESC
;; Who faved me
-(def popular-dumps-qry "
-select u.nick, u.avatar, r.key, m.message_id, m.content, m.created_on, count(*) as count,
- array_agg(u2.nick) as user_nicks,
- array_agg(u2.avatar) as user_avs,
- array_agg(t.created_on) as favtime,
- (select exists (select 1 from tags
- where tag = 'favorite' and user_id = ? and message_id = m.message_id)) as favorited
-from users u, messages m, rooms r, tags t, users u2
-where lower(u.nick) = lower(?)
-and u.user_id = m.user_id and m.message_id = t.message_id
-and m.room_id = r.room_id and m.is_image = true and r.admin_only = false
-and t.tag = 'favorite' and t.user_id != u.user_id
-and t.user_id = u2.user_id
-group by u.nick, u.avatar, r.key, m.message_id, m.content, m.created_on
-order by count desc limit ? offset ?")
-
-(def num-popular-dumps 40)
-
-(defn get-popular-dumps [nick user-id]
- (for [d (do-select [popular-dumps-qry user-id nick 40 0])]
- (let [fav-nicks (.getArray (:user_nicks d))]
- (assoc d
- :favers (sort-by :t (comp #(* -1 %) compare)
- (map (fn [n a t] (if (non-empty-string? a)
- {:nick n :avatar a :t t}
- {:nick n :t t}))
- fav-nicks
- (.getArray (:user_avs d))
- (.getArray (:favtime d))))
- :user_nicks nil :user_avs nil :favtime nil))))
+(def use-popular-redis true)
(defn popular [session profile-nick]
(if-let [user-info (fetch-nick profile-nick)]
(let [st (fetch-template "popular" session)
profile-nick (:nick user-info)
- raw-dumps (get-popular-dumps profile-nick (or (:user_id session) -1))
+ raw-dumps (if use-popular-redis
+ (fetch-popular-dumps-redis profile-nick (:nick session))
+ (fetch-popular-dumps profile-nick (:nick session)))
+ raw-dumps (filter #(> (:count %) 0) raw-dumps)
dumps (map process-message-for-output raw-dumps)]
(.setAttribute st "nick" profile-nick)
(.setAttribute st "mini_profile" (build-mini-profile user-info))
@@ -597,38 +540,9 @@ order by count desc limit ? offset ?")
(def *per-directory-page* 25)
(defn process-directory-entry [entry]
- (let [score (lookup-score (:nick entry))]
- (assoc (stringify-and-escape entry)
- "score_ent" (score-to-entity score)
- "score" score)))
-
-(defn recent-posts-query [user-id]
- (format "
-SELECT u.user_id, u.nick, u.avatar,
- m.content, m.message_id%s
-FROM users u
-LEFT JOIN messages m on m.message_id =
- (SELECT message_id FROM messages
- WHERE user_id = u.user_id
- AND is_image
- AND room_id IN (SELECT room_id from rooms where admin_only = false)
- ORDER BY created_on desc LIMIT 1)
-WHERE u.user_id = ANY(?)"
- (if user-id
- (format
- ",
- EXISTS (SELECT 1 FROM tags
- WHERE tag = 'favorite' AND user_id = %s AND message_id = m.message_id) AS favorited"
- user-id)
- ", false AS favorited")))
-
-(defn lookup-recent-posts [user-tag-id user-ids]
- (do-select [(recent-posts-query user-tag-id)
- (sql-array "int" user-ids)]))
+ (assoc (stringify-and-escape entry)
+ "score_ent" (score-to-entity (:score entry))))
-(defn lookup-recent-posts-tagless [user-tag-id user-ids]
- (do-select [(recent-posts-query nil)
- (sql-array "int" user-ids)]))
(def directory-cache-ttl (minutes 10))
(def memoized-lookup-recent-posts-tagless
@@ -637,15 +551,25 @@ WHERE u.user_id = ANY(?)"
(defn add-recent-posts [user-id users]
(if-not (empty? users)
- (let [f (if user-id lookup-recent-posts lookup-recent-posts-tagless)
- res (f user-id (map :user_id users))]
+ (let [res (if user-id
+ (lookup-recent-posts user-id (map :user_id users))
+ (lookup-recent-posts-tagless (map :user_id users)))]
(for [u users]
(merge u (find-first #(= (:user_id u) (:user_id %)) res))))))
+(defn add-recent-posts-nick [user-id users]
+ (if-not (empty? users)
+ (let [nicks (map :nick users)
+ res (if user-id
+ (lookup-recent-posts-by-nicks user-id nicks)
+ (lookup-recent-posts-tagless-by-nicks nicks))]
+ (for [u users]
+ (merge u (find-first #(= (:nick u) (:nick %)) res))))))
+
(defn get-directory-info [user-id offset]
- (map process-directory-entry
- (add-recent-posts user-id
- (get-user-ranking offset *per-directory-page*))))
+ (let [res (fetch-redis-directory offset *per-directory-page*)]
+ (map process-directory-entry
+ (add-recent-posts-nick user-id res))))
(defn directory [session offset]
(let [st (fetch-template "directory" session)
@@ -662,19 +586,15 @@ WHERE u.user_id = ANY(?)"
;; Single posts
(defn single-message [session nick-from-url id-from-url]
- (if-let [user-info (fetch-nick nick-from-url)]
- (if-let [message (fetch-public-message-by-id id-from-url)]
- ; error if nick in url doesn't match the nick who posted the message from the id in url
- ; this prevents people from scraping all the content by incrementing the id in the url
- (if (= (user-info :user_id) (message :user_id))
- (let [st (fetch-template "single_message" session)
- message (tags/add-favorited-flag message session)
- message (tags/remove-tags-for-output message)]
- (.setAttribute st "dump" (process-message-for-output message))
- (.toString st))
- (resp-error "NO_MESSAGE"))
+ (if-let [message (fetch-public-message-by-id id-from-url (:nick session))]
+ ; error if nick in url doesn't match the nick who posted the message from the id in url
+ ; this prevents people from scraping all the content by incrementing the id in the url
+ (if (= nick-from-url (:nick message))
+ (let [st (fetch-template "single_message" session)]
+ (.setAttribute st "dump" (process-message-for-output message))
+ (.toString st))
(resp-error "NO_MESSAGE"))
- (resp-error "NO_USER")))
+ (resp-error "NO_MESSAGE")))
;; Chat
@@ -699,6 +619,7 @@ WHERE u.user_id = ANY(?)"
:user-tag-id (:user_id session)
:hide-vip false
:limit (:history_size room)))
+ recips (map :nick (get-recips-from-msgs raw-msgs))
message-list (to-array (map process-message-for-output raw-msgs))]
(if nick
(dosync
@@ -706,6 +627,7 @@ WHERE u.user_id = ANY(?)"
(doto st
(.setAttribute "users" (prepare-user-list room true))
(.setAttribute "messages" message-list)
+ (.setAttribute "recips" (json-str (map lower-case recips)))
(.setAttribute "roomkey" (room :key))
(.setAttribute "isadminroom" (room :admin_only))
(.setAttribute "json_room_key" (json-str (room :key)))
@@ -755,34 +677,29 @@ WHERE u.user_id = ANY(?)"
(str "<unsafe>" content "</unsafe>"))
(str content)))
-(defn msg-db [user-id room-id content]
- (let [msg-type (classify-msg content)
- is-image (boolean (#{:image :mixed} msg-type))
- is-text (boolean (#{:mixed :text} msg-type))
- qry (str "INSERT INTO messages (user_id, room_id, content, is_image, is_text) "
- "VALUES (?, ?, ?, ?, ?) RETURNING message_id")]
- (with-connection *db*
- ((first (do-select [qry user-id room-id content is-image is-text]))
- :message_id))))
-
(defn msg [session params]
- (let [user-id (session :user_id)
- mute (get (poll *active-mutes*) user-id)
- nick (session :nick)
- room-key (params :room)
- room (lookup-room room-key)
- content (.trim (params :content))]
- (cond (not room) (resp-error "BAD_ROOM")
- (not nick) (resp-error "NOT_LOGGED_IN")
- mute (resp-error (format-mute mute))
+ (let [user-id (session :user_id)
+ mute (get (poll *active-mutes*) user-id)
+ nick (session :nick)
+ room-key (params :room)
+ room (lookup-room room-key)
+ content (.trim (params :content))
+ content-too-long? (> (count content)
+ max-content-size)]
+ (cond (not room) (resp-error "BAD_ROOM")
+ (not nick) (resp-error "NOT_LOGGED_IN")
+ content-too-long? (resp-error "TOO_LONG")
+ mute (resp-error (format-mute mute))
:else
- (let [content (validated-content content session)
- msg-id (msg-db user-id (room :room_id) content)]
+ (let [content (validated-content content session)
+ msg-info (insert-message! user-id nick (:room_id room) content)
+ msg-id (:msg-id msg-info)]
(dosync
(if (not (contains? (ensure (room :users)) nick))
(login-user (user-struct-from-session session) room))
- (add-message (build-msg nick content msg-id) room))
- (resp-success msg-id)))))
+ (add-message (build-msg nick content msg-id (:recips msg-info)) room))
+ (resp-success {:msgid msg-id
+ :recips (:recips msg-info)})))))
(defn validated-msg [session params request]
@@ -822,7 +739,8 @@ WHERE u.user_id = ANY(?)"
dump-offset (* offset *dumps-per-page*)
image-only (and (not (room :admin_only))
(not= (params :show) "all"))
- raw-dumps (logger tags/fetch-dumps-by-room :room-id (room :room_id)
+ raw-dumps (logger tags/fetch-dumps-by-room
+ :room-id (room :room_id)
:image-only image-only
:amount (+ 1 *dumps-per-page*)
:offset dump-offset)
@@ -844,18 +762,17 @@ WHERE u.user_id = ANY(?)"
(.toString st)))
(defn validated-log [session room-key offset params]
- (if-vip
- (let [room-key (if (= (lower-case room-key) "www") "dumpfm" room-key)]
- (if (validate-room-access room-key session)
- (log session (lookup-room room-key) offset params)
- (resp-error "UNKNOWN_ROOM")))
- (redirect-to "http://dump.fm")))
+ (if (is-vip? session)
+ (let [room-key (if (= (lower-case room-key) "www") "dumpfm" room-key)]
+ (if (validate-room-access room-key session)
+ (log session (lookup-room room-key) offset params)
+ (resp-error "UNKNOWN_ROOM")))
+ (redirect-to "/")))
;; Hiscore test... redis test...
(defn redis-ids-test [period]
- (let [reddis-server {:host "127.0.0.1" :port 6379 :db 0}
- ids (redis/with-server reddis-server
+ (let [ids (redis/with-server redis-server
(redis/zrevrange (str "hiscore:" period) 0 -1))
ids (map maybe-parse-int ids)]
ids))
@@ -908,28 +825,31 @@ WHERE u.user_id = ANY(?)"
(try
(do-insert "tags"
["user_id" "message_id" "tag"]
- [(:user_id user) (msg :message_id) tag])
- (if (and (= tag "favorite")
- (not (= (msg :nick) (user :nick))))
+ [(:user_id user) (:message_id msg) tag])
+ (when (and (= tag "favorite")
+ (not (= (msg :nick) (:nick user))))
+ (if-not (or (:admin_only msg) (= (:user_id user) (:user_id msg)))
+ (incrby-redis-favscore! (:nick msg) (:message_id msg) 1 (:is_image msg)))
(insert-fav-notification! (msg :nick)
(user :nick)
(user :avatar)
(msg :content)))
true
; catch error when inserting duplicate tags
- (catch Exception e false)))
+ (catch Exception e
+ (do (println e)
+ false))))
(defn validated-add-tag [session params]
(if (session :nick)
(let [nick (session :nick)
user-id (session :user_id)
- user-admin? (session :admin-only)
- msg-id (params :message_id)
+ msg-id (params :message_id)
tag (validate-tag (params :tag))
msg (fetch-message-by-id msg-id)
access (or (is-vip? session)
- (not (:admin-only msg)))]
+ (not (:admin_only msg)))]
(cond (not msg) (resp-error "NO_MSG")
(not access) (resp-error "NO_MSG")
(not tag) (resp-error "NO_TAG")
@@ -938,10 +858,18 @@ WHERE u.user_id = ANY(?)"
(resp-error "TAG_EXISTS_ALREADY_OR_SOMETHING_ELSE_IS_FUCKED"))))
(resp-error "NO_USER")))
-(defn remove-tag [user-id message-id tag]
- (let [query "user_id = ? AND message_id = ? AND lower(tag) = ?"]
- (do-delete "tags" [query user-id (maybe-parse-int message-id) (normalize-tag-for-db (.toLowerCase tag))])
- (resp-success "OK")))
+(defn remove-tag [user-id msg-id tag]
+ (let [query "user_id = ? AND message_id = ? AND lower(tag) = ?"
+ msg-id (maybe-parse-int msg-id)
+ tag (normalize-tag-for-db tag)
+ msg (fetch-message-by-id msg-id)]
+ (let [rows-deleted (first (do-delete "tags" [query user-id msg-id tag]))]
+ (if-not (zero? rows-deleted)
+ (do
+ (if-not (or (:admin_only msg) (= user-id (:user_id msg)))
+ (incrby-redis-favscore! (:nick msg) msg-id -1 (:is_image msg)))
+ (resp-success "OK"))
+ (resp-error "NO_TAG")))))
(defn validated-remove-tag [session params]
(if (session :nick)
@@ -1010,12 +938,14 @@ WHERE u.user_id = ANY(?)"
:nick (:nick user-info)
:user-tag-id (:user_id session)
:msg-id msg-id
+ :hide-vip (not (:is_admin session))
:date (if msg-id nil date)
:limit (inc *dumps-per-page*))
back-dumps (if (or date msg-id)
(tags/fetch-tagged-dumps
:nick (:nick user-info)
:msg-id msg-id
+ :hide-vip (not (:is_admin session))
:date (if msg-id nil date)
:limit (inc *dumps-per-page*)
:direction :forward))
@@ -1070,15 +1000,14 @@ WHERE u.user_id = ANY(?)"
;; cons: has to use a <script> tag. seems to freeze browser until results returned
;;
(defn json-search [undecoded-url-searchterms params]
- (let [tokens (map url-decode (re-split #"\+" undecoded-url-searchterms))
- tokens (map search-replace-weird-chars tokens)
- tokens (map #(str "%" %1 "%") tokens)
- query (search-query (count tokens))
- rows (do-select (vec (concat [query] tokens)))]
- (if (:callback params)
- (str (:callback params) "(" (json-str rows) ")")
- (json-str rows))))
-
+ (let [tokens (map url-decode (re-split #"\+" undecoded-url-searchterms))
+ tokens (map search-replace-weird-chars tokens)
+ tokens (map #(str "%" %1 "%") tokens)
+ query (search-query (count tokens))
+ rows (do-select (vec (concat [query] tokens)))]
+ (if (:callback params)
+ (str (:callback params) "(" (json-str rows) ")")
+ (json-str rows))))
;; Local testing
@@ -1187,21 +1116,20 @@ WHERE u.user_id = ANY(?)"
; errors.
; The upload code doesn't use jQuery.ajax, and doesn't JSON-eval
; responses. Therefore, return strings should not be JSON-encoded.
-
(defn do-upload [session image room]
(if-let [err (validate-upload-file (image :tempfile) room)]
(resp-error err)
- (let [filename (format-filename (:filename image) (session :nick))
- date (today)
- dest (open-file [*image-directory* date] filename)
- url (image-url-from-file "images" date dest)
- msg-id (msg-db (session :user_id) (room :room_id) url)
- msg (struct message-struct (session :nick) url (new Date) msg-id)]
- (do
- (dosync
- (add-message msg room))
- (copy (:tempfile image) dest)
- [200 "OK"]))))
+ (let [filename (format-filename (:filename image) (session :nick))
+ date (today)
+ dest (open-file [*image-directory* date] filename)
+ url (image-url-from-file "images" date dest)
+ msg-info (insert-message! (:user_id session) (:nick session)
+ (:room_id room) url)]
+ (copy (:tempfile image) dest)
+ (dosync
+ (let [msg (build-msg (:nick session) url (:msg-id msg-info) (:recips msg-info))]
+ (add-message msg room)))
+ [200 "OK"])))
(defn upload [session params request]
(let [room-key (params :room)
@@ -1251,9 +1179,8 @@ WHERE u.user_id = ANY(?)"
(unknown-page)))
(defn hall-of-fame [session]
- (let [st (fetch-template "fame" session)
- msgs (add-user-favs-to-msgs (poll hall-results)
- (session :user_id))]
+ (let [st (fetch-template "fame" session)
+ msgs (fetch-redis-hall (:nick session))]
(.setAttribute st "dumps" (map process-message-for-output msgs))
(.toString st)))
@@ -1401,16 +1328,16 @@ WHERE u.user_id = ANY(?)"
(GET "/error/ie" (serve-template "error_ie" session))
;; Put username routes below all others in priority
- (GET "/:nick" (profile session (params :nick)))
- (GET "/:nick/" (profile session (params :nick)))
- (GET "/:nick/altars" (altar-log session params))
- (GET "/:nick/altars/" (altar-log session params))
- (GET "/:nick/altars/:id" (altar-log session params))
- (GET "/:nick/tag/:tag" (tagged-dumps-by-nick session params (request-url request)))
+ (GET "/:nick" (profile session (params :nick)))
+ (GET "/:nick/" (profile session (params :nick)))
+ (GET "/:nick/altars" (altar-log session params))
+ (GET "/:nick/altars/" (altar-log session params))
+ (GET "/:nick/altars/:id" (altar-log session params))
+ (GET "/:nick/tag/:tag" (tagged-dumps-by-nick session params (request-url request)))
(GET "/:nick/tag/:tag/:offset" (tagged-dumps-by-nick session params (request-url request)))
- (GET "/:nick/favorites" (favorites-handler session (params :nick) nil nil))
- (GET "/:nick/favorites/" (favorites-handler session (params :nick) nil nil))
- (GET "/:nick/favorites/:date" (favorites-handler session (params :nick) (params :date) nil))
+ (GET "/:nick/favorites" (favorites-handler session (params :nick) nil nil))
+ (GET "/:nick/favorites/" (favorites-handler session (params :nick) nil nil))
+ (GET "/:nick/favorites/:date" (favorites-handler session (params :nick) (params :date) nil))
(GET "/:nick/favorites/:date/" (favorites-handler session (params :nick) (params :date) nil))
(GET "/:nick/favorites/:date/:msg" (favorites-handler session (params :nick) (params :date) (params :msg)))
(GET "/:nick/favs" (favorites-handler session (params :nick) nil nil))
@@ -1496,19 +1423,14 @@ WHERE u.user_id = ANY(?)"
(load-rooms!)
(start! reserved-nicks)
-(def server (start-server (options :port)))
-(start! *active-mutes*)
-; Delay the following to reduce start-load
-(Thread/sleep 15000)
-(start! *user-scores*)
+(def server (start-server (options :port)))
+(start! *active-mutes*)
(start-user-flusher!)
(start-session-pruner!)
-(start! hall-results)
;(if (not= *server-url* "http://dump.fm")
; (start! random-poster))
-
-
+