summaryrefslogtreecommitdiff
path: root/src/site.clj
diff options
context:
space:
mode:
authorScott Ostler <scottbot9000@gmail.com>2011-01-04 15:42:23 -0500
committerScott Ostler <scottbot9000@gmail.com>2011-01-04 15:42:23 -0500
commit92b092823c21af1339e0d42716dc856357f93e85 (patch)
tree809221e2a3b3c88306ba5e4b4996eb05297cec02 /src/site.clj
parent7a031af911887a913857fdcebb252231119f4bf9 (diff)
Added topics, refactored recipient handling
Diffstat (limited to 'src/site.clj')
-rw-r--r--src/site.clj75
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)))