From c5812c51a39ea3c10fe4eb4f64f2b7e487c52d82 Mon Sep 17 00:00:00 2001 From: sostler Date: Thu, 4 Mar 2010 23:49:15 -0500 Subject: Added AM/PM --- src/site.clj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index cdfb6be..0e4556f 100755 --- a/src/site.clj +++ b/src/site.clj @@ -74,7 +74,7 @@ (defn swap [f] (fn [& more] (apply f (reverse more)))) -(def formatter (new SimpleDateFormat "h:mm EEE M/d")) +(def formatter (new SimpleDateFormat "h:mm a EEE M/d")) (defn non-empty-string? [s] (and s (> (count s) 0))) -- cgit v1.2.3-70-g09d2 From cedfbcf91928d6666a13e133106a6b876aba61a1 Mon Sep 17 00:00:00 2001 From: sostler Date: Tue, 9 Mar 2010 08:14:30 -0500 Subject: User directory ROUGH --- src/site.clj | 58 +++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 47 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 2717b0e..39050e0 100755 --- a/src/site.clj +++ b/src/site.clj @@ -353,7 +353,7 @@ (with-connection *db* (update-values "users" ["user_id = ?" user-id] {attr val}))) -(defn update-avatar [session url] +(defn update-avatar [session url] (update-user-db (session :user_id) "avatar" url) [(session-assoc :avatar url) (resp-success url)]) @@ -372,23 +372,58 @@ ;; Directory +(def *directory-agent* (agent nil)) +(def *directory-listing* (ref [])) (def *per-directory-page* 25) -(def *update-directory* true) -(def *update-directory-ms* (* 60 60 1000)) +(def *run-update-directory* true) +(def *update-directory-sleep-ms* (* 60 60 1000)) (defn directory-search [offset] - (let [qry (str "SELECT u.nick, u.avatar, m.content " + (let [directory @*directory-listing* + users (subvec directory + (* offset *per-directory-page*) + (min (count directory) + (* (inc offset) *per-directory-page*))) + user-ids (apply str (interpose ", " (map #(%1 :user_id) users))) + qry (str "SELECT u.user_id, u.avatar, m.content " "FROM users u, messages m " - "WHERE m.message_id = " - " (SELECT n.message_id FROM messages n " - " WHERE n.user_id = u.user_id ORDER BY n.created_on DESC LIMIT 1) " - "ORDER BY (SELECT COUNT(*) FROM messages where user_id = u.user_id) " - "LIMIT ? OFFSET ?")] - (do-select [qry *per-directory-page* (* offset *per-directory-page*)]))) + "WHERE u.user_id in (" user-ids ") " + "AND m.created_on = (select max(created_on) from messages " + " where user_id = u.user_id)")] + (when (> (count user-ids) 0) + (let [res (do-select [qry]) + keys (map :user_id res) + dict (zipmap keys res)] + (map (fn [u] + (let [u-id (u :user_id)] + (merge u (dict u-id)))) + users))))) + + + +(defn update-directory! [] + (let [qry (str "SELECT u.user_id, COUNT(m) as cnt " + "FROM users u, messages m " + "WHERE u.user_id = m.user_id " + "GROUP BY u.user_id " + "ORDER BY COUNT(m) DESC") + res (vec (do-select [qry]))] + (dosync (ref-set *directory-listing* res)) + res)) + +(defn update-directory-agent-func [x] + (update-directory!) + (Thread/sleep *update-directory-sleep-ms*) + (when *run-update-directory* + (send *directory-agent* #'update-directory-agent-func)) + x) + +(defn start-directory-updater! [] + (send *directory-agent* update-directory-agent-func)) (defn directory [session offset] (let [st (fetch-template "directory" session) - users (to-array (map process-directory-listing (directory-search offset)))] + users (to-array (directory-search offset))] (.setAttribute st "users" users) (cond (= offset 0) (.setAttribute st "prev" false) (= offset 1) (.setAttribute st "prev" "") @@ -770,4 +805,5 @@ (start-user-flusher!) (start-session-pruner!) +(start-directory-updater!) (start-server (options :port)) \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 1a137049666feff73748600738276f1e5f683d5b Mon Sep 17 00:00:00 2001 From: sostler Date: Tue, 9 Mar 2010 08:32:11 -0500 Subject: Directory mk II) --- src/site.clj | 17 +++++++++-------- template/directory.st | 1 + 2 files changed, 10 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 39050e0..5d5788f 100755 --- a/src/site.clj +++ b/src/site.clj @@ -124,6 +124,9 @@ ;; Output +(defn stringify-and-escape [m] + (zipmap (map name (keys m)) (map escape-html (vals m)))) + (defn process-message-for-json [d] (assoc d :created_on (.getTime (d :created_on)))) @@ -385,7 +388,7 @@ (min (count directory) (* (inc offset) *per-directory-page*))) user-ids (apply str (interpose ", " (map #(%1 :user_id) users))) - qry (str "SELECT u.user_id, u.avatar, m.content " + qry (str "SELECT u.user_id, u.nick, u.avatar, m.content " "FROM users u, messages m " "WHERE u.user_id in (" user-ids ") " "AND m.created_on = (select max(created_on) from messages " @@ -394,13 +397,11 @@ (let [res (do-select [qry]) keys (map :user_id res) dict (zipmap keys res)] - (map (fn [u] - (let [u-id (u :user_id)] - (merge u (dict u-id)))) - users))))) - - - + (map (fn [u] + (let [u-id (u :user_id)] + (stringify-and-escape (merge u (dict u-id))))) + users))))) + (defn update-directory! [] (let [qry (str "SELECT u.user_id, COUNT(m) as cnt " "FROM users u, messages m " diff --git a/template/directory.st b/template/directory.st index c57c333..7f78265 100644 --- a/template/directory.st +++ b/template/directory.st @@ -43,6 +43,7 @@ $endif$ +
Count: $u.cnt$
Last post: $u.content$ -- cgit v1.2.3-70-g09d2 From fefadd9fb388e04c2ecc4b9757138c097572e2d1 Mon Sep 17 00:00:00 2001 From: sostler Date: Tue, 9 Mar 2010 08:35:21 -0500 Subject: Tweak db --- src/site.clj | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 5d5788f..e86825b 100755 --- a/src/site.clj +++ b/src/site.clj @@ -391,6 +391,7 @@ qry (str "SELECT u.user_id, u.nick, u.avatar, m.content " "FROM users u, messages m " "WHERE u.user_id in (" user-ids ") " + "AND m.user_id = u.user_id " "AND m.created_on = (select max(created_on) from messages " " where user_id = u.user_id)")] (when (> (count user-ids) 0) -- cgit v1.2.3-70-g09d2