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