summaryrefslogtreecommitdiff
path: root/src/site.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/site.clj')
-rw-r--r--src/site.clj61
1 files changed, 40 insertions, 21 deletions
diff --git a/src/site.clj b/src/site.clj
index 297f4a5..cebf62e 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -592,38 +592,55 @@ order by count desc limit ? offset ?")
"score_ent" (score-to-entity score)
"score" score)))
-(def recent-posts-query "
-SELECT u.user_id, u.nick, u.avatar,
- m.content, m.message_id
-FROM users u, messages m
-WHERE u.user_id = ANY(?)
- AND m.message_id =
+(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);
-")
+ 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)]))
+
+(defn lookup-recent-posts-tagless [user-tag-id user-ids]
+ (do-select [(recent-posts-query nil)
+ (sql-array "int" user-ids)]))
-(defn add-recent-posts [users]
+(def directory-cache-ttl (minutes 10))
+(def memoized-lookup-recent-posts-tagless
+ (ttl-memoize lookup-recent-posts-tagless directory-cache-ttl))
+
+
+(defn add-recent-posts [user-id users]
(if-not (empty? users)
- (let [ids (map :user_id users)
- res (do-select [recent-posts-query (sql-array "int" ids)])]
+ (let [f (if user-id lookup-recent-posts lookup-recent-posts-tagless)
+ res (f user-id (map :user_id users))]
(for [u users]
(merge u (find-first #(= (:user_id u) (:user_id %)) res))))))
-(defn get-directory-info [offset]
+(defn get-directory-info [user-id offset]
(map process-directory-entry
- (add-recent-posts
+ (add-recent-posts user-id
(get-user-ranking offset *per-directory-page*))))
-
-(def directory-cache-ttl (minutes 10))
-(def memoized-get-directory-info
- (ttl-memoize get-directory-info directory-cache-ttl))
(defn directory [session offset]
(let [st (fetch-template "directory" session)
- users (memoized-get-directory-info offset)]
+ users (get-directory-info (:user_id session) offset)]
+ (prn users)
(.setAttribute st "users" users)
(cond (= offset 0) (.setAttribute st "prev" false)
(= offset 1) (.setAttribute st "prev" "")
@@ -1360,6 +1377,8 @@ WHERE u.user_id = ANY(?)
(start-user-flusher!)
(start-session-pruner!)
(start! hall-results)
-(if (= *server-url* "http://dump.fm")
- (do (start! feed-downloader)
- (start! feed-inserter)))
+
+; Scott 2010/8/30: disable feeds to test impact on server load
+;(if (= *server-url* "http://dump.fm")
+; (do (start! feed-downloader)
+; (start! feed-inserter)))