diff options
| author | Scott Ostler <scottbot9000@gmail.com> | 2011-01-04 15:42:23 -0500 |
|---|---|---|
| committer | Scott Ostler <scottbot9000@gmail.com> | 2011-01-04 15:42:23 -0500 |
| commit | 92b092823c21af1339e0d42716dc856357f93e85 (patch) | |
| tree | 809221e2a3b3c88306ba5e4b4996eb05297cec02 /src/site.clj | |
| parent | 7a031af911887a913857fdcebb252231119f4bf9 (diff) | |
Added topics, refactored recipient handling
Diffstat (limited to 'src/site.clj')
| -rw-r--r-- | src/site.clj | 75 |
1 files changed, 52 insertions, 23 deletions
diff --git a/src/site.clj b/src/site.clj index 663a6df..6ebfb73 100644 --- a/src/site.clj +++ b/src/site.clj @@ -316,6 +316,9 @@ WHERE user_id IN (comp take-images :content) dumps)))))) +(defn pull-recips [dumps] + (set (apply concat (map #(get % "recips") dumps)))) + (defn profile ([session profile-nick] (profile session profile-nick "profile")) ([session profile-nick template] @@ -330,8 +333,8 @@ WHERE user_id IN :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))) + dms (fetch-direct-messages (:user_id user-info)) + recips (pull-recips dms) imgs (pull-random-dump-images dumps 5)] (do (.setAttribute st "is_home" is-home) @@ -343,7 +346,7 @@ WHERE user_id IN (.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)))) + (.setAttribute st "recips" (json-str recips))) (if (not (empty? imgs)) (.setAttribute st "imgs" imgs)) (.setAttribute st "debug_log_items" (logger)) @@ -421,6 +424,7 @@ WHERE user_id IN :msg-id msg-id :date (if msg-id nil date) :limit (inc *dumps-per-page*)) + recips (map :nick (get-recips-from-msgs raw-dumps)) back-dumps (if (or date msg-id) (tags/fetch-dumps :nick (:nick user-info) @@ -432,8 +436,9 @@ WHERE user_id IN (.setAttribute st "nick" (:nick user-info)) (.setAttribute st "is_home" (= (:nick user-info) (:nick session))) (.setAttribute st "mini_profile" (build-mini-profile user-info)) - (if (> (count dumps) 0) + (when (> (count dumps) 0) (.setAttribute st "dumps" dumps)) + (.setAttribute st "recips" (json-str recips)) (.setAttribute st "prev" (if back-dumps (cond @@ -453,20 +458,18 @@ WHERE user_id IN ;; Who faved me -(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 (if use-popular-redis - (fetch-popular-dumps-redis profile-nick (:nick session)) - (fetch-popular-dumps profile-nick (:nick session))) + raw-dumps (fetch-popular-dumps-redis profile-nick (:nick session)) raw-dumps (filter #(> (:count %) 0) raw-dumps) + recips (get-recips-from-msgs raw-dumps) dumps (map process-message-for-output raw-dumps)] (.setAttribute st "nick" profile-nick) (.setAttribute st "mini_profile" (build-mini-profile user-info)) (.setAttribute st "dumps" dumps) + (.setAttribute st "recips" (json-str recips)) (.toString st)) (resp-error "NO_USER"))) @@ -538,6 +541,7 @@ WHERE user_id IN (if (= nick-from-url (:nick message)) (let [st (fetch-template "single_message" session)] (.setAttribute st "dump" (process-message-for-output message)) + (.setAttribute st "recips" (json-str (map :nick (get-recips (:content message))))) (.toString st)) (resp-error "NO_MESSAGE")) (resp-error "NO_MESSAGE"))) @@ -573,7 +577,7 @@ WHERE user_id IN (doto st (.setAttribute "users" (prepare-user-list room true)) (.setAttribute "messages" message-list) - (.setAttribute "recips" (json-str (map lower-case recips))) + (.setAttribute "recips" (json-str recips)) (.setAttribute "roomkey" (room :key)) (.setAttribute "isadminroom" (room :admin_only)) (.setAttribute "json_room_key" (json-str (room :key))) @@ -605,7 +609,7 @@ WHERE user_id IN :avatar (session :avatar)})) (commute users assoc nick (user-struct-from-session session)))) (resp-success (assoc (updates nick room old-ts) - :timestamp now))))) + :timestamp now))))) (defn validated-refresh [session params] (let [room-key (params :room) @@ -638,16 +642,16 @@ WHERE user_id IN mute (resp-error (format-mute mute)) :else (let [content (validated-content content session) - msg-info (insert-message! user-id nick (:room_id room) content) + msg-info (insert-message! user-id nick (:avatar session) (: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 (:recips msg-info)) room)) + (let [msg-struct (build-msg nick content msg-id (:recips msg-info))] + (if (not (contains? (ensure (room :users)) nick)) + (login-user (user-struct-from-session session) room)) + (add-message msg-struct room))) (resp-success {:msgid msg-id :recips (:recips msg-info)}))))) - (defn validated-msg [session params request] (cond (not (validate-room-access (params :room) session)) (resp-error "UNKNOWN_ROOM") @@ -655,7 +659,6 @@ WHERE user_id IN ;; Browser -;; TODO: make work for all rooms (defn browser [session] (let [room (lookup-room *default-room*) now (System/currentTimeMillis) @@ -675,6 +678,21 @@ WHERE user_id IN (.toString st))) +;; Topics + +(defn topic [session topic] + (let [topic (lower-case topic) + msgs (map + process-message-for-output + (fetch-topic (:user_id session) topic)) + recips (pull-recips msgs) + st (fetch-template "topic" session)] + (.setAttribute st "recips" (json-str recips)) + (.setAttribute st "topic" topic) + (if-not (empty? msgs) + (.setAttribute st "dumps" msgs)) + (.toString st))) + ;; Chat Log (defn log [session room offset params] @@ -690,7 +708,9 @@ WHERE user_id IN :image-only image-only :amount (+ 1 *dumps-per-page*) :offset dump-offset) - dumps (map tags/add-favorited-flag (take *dumps-per-page* raw-dumps) (repeat session)) + dumps (map tags/add-favorited-flag + (take *dumps-per-page* raw-dumps) + (repeat session)) ;; json-tags (for [dump dumps :when (not (empty? (dump :tags)))] ;; (json-str {"id" (dump :message_id) "tags" (dump :tags) })) dumps (map tags/remove-tags-for-output dumps) @@ -734,8 +754,6 @@ WHERE user_id IN (.setAttribute st "dumps" dumps) (.toString st))) - - ;; Altars ;; if :nick is in params, will fetch only altars by that nick @@ -887,6 +905,7 @@ WHERE user_id IN :hide-vip (not (:is_admin session)) :date (if msg-id nil date) :limit (inc *dumps-per-page*)) + recips (map :nick (get-recips-from-msgs raw-dumps)) back-dumps (if (or date msg-id) (tags/fetch-tagged-dumps :nick (:nick user-info) @@ -906,6 +925,7 @@ WHERE user_id IN (if (> (count raw-dumps) *dumps-per-page*) (.setAttribute st "next" (favorites-next-page-link (:nick user-info) (last raw-dumps)))) (.setAttribute st "dumps" dumps) + (.setAttribute st "recips" (json-str recips)) (.setAttribute st "infobar" (build-mini-profile user-info)) (.setAttribute st "page_title" (format "%s'S FAVS" (:nick user-info))) (.setAttribute st "debug_log_items" (logger)) @@ -1069,11 +1089,17 @@ WHERE user_id IN 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)] + msg-info (insert-message! (:user_id session) + (:nick session) + (:avatar session) + (:room_id room) + url)] (copy (:tempfile image) dest) (dosync - (let [msg (build-msg (:nick session) url (:msg-id msg-info) (:recips msg-info))] + (let [msg (build-msg (:nick session) + url + (:msg-id msg-info) + (:recips msg-info))] (add-message msg room))) [200 "OK"]))) @@ -1180,6 +1206,9 @@ WHERE user_id IN (GET "/r/:room/log/:offset" (validated-log session (params :room) (params :offset) params)) (GET "/favicon.ico" (serve-static "static" "favicon.ico")) + + (GET "/t/:topic" (topic session (params :topic))) + (GET "/u/:nick" (redirect-to (str "/" (params :nick)))) (GET "/u/:nick/" (redirect-to (str "/" (params :nick)))) (GET "/u/:nick/tag/:tag" (tagged-dumps-by-nick session params (request-url request))) |
