From 9da44d38f552388680c47ad592edeb2b114d67d4 Mon Sep 17 00:00:00 2001 From: Scott Ostler Date: Wed, 23 Feb 2011 00:06:37 -0500 Subject: add selector for frontpage --- src/datalayer.clj | 8 ++++---- src/site.clj | 41 ++++++++++++++++++++++++++++++----------- src/utils.clj | 16 +++++++++++++--- 3 files changed, 47 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/datalayer.clj b/src/datalayer.clj index 56d5a60..72b86cd 100644 --- a/src/datalayer.clj +++ b/src/datalayer.clj @@ -142,8 +142,8 @@ WHERE u.nick = ANY(?)" (def redis-favscores-key "favscores") -(defn redis-daily-hall-key [date-str] - (str "hall:daily:" date-str)) +(defn redis-daily-hall-key [date] + (str "hall:daily:" (format-yyyymmdd date))) (defn fetch-redis-zset [key symbol offset num] (for [t (with-jedis @@ -155,8 +155,8 @@ WHERE u.nick = ANY(?)" {symbol (.getElement t) :score (int (.getScore t))})) -(defn fetch-redis-daily-hall [date-str offset num user-id] - (let [msg-ids (fetch-redis-zset (redis-daily-hall-key date-str) +(defn fetch-redis-daily-hall [date offset num user-id] + (let [msg-ids (fetch-redis-zset (redis-daily-hall-key date) :message_id offset num) diff --git a/src/site.clj b/src/site.clj index 2d1b295..9af02ca 100644 --- a/src/site.clj +++ b/src/site.clj @@ -192,16 +192,32 @@ ;; Landing -(defn front-page [session] - (let [st (fetch-template "frontpage" session) - date-str (format-yyyymmdd (Date.)) - dumps (map process-message-for-output - (fetch-redis-daily-hall date-str 0 20 (:user_id session)))] - (.setAttribute st "dumps" dumps) - (.toString st))) - -(defn landing [session] - (front-page session)) +(defn- parse-front-page-date [dt-str] + (if-let [dt (parse-yyyymmdd-date dt-str)] + [(advance-date dt -1) + dt + (advance-date dt 1)])) + +(def earliest-daily-hall (parse-yyyymmdd-date "20100503")) + +(defn front-page + ([session] (front-page session (format-yyyymmdd (Date.)))) + ([session dt-str] + (let [today (Date.)] + (if-let [[prev-date cur-date next-date] (parse-front-page-date dt-str)] + (cond (neg? (.compareTo cur-date earliest-daily-hall)) (redirect-to "/") + (pos? (.compareTo cur-date (Date.))) (redirect-to "/") + :else (let [st (fetch-template "frontpage" session) + dumps (map process-message-for-output + (fetch-redis-daily-hall cur-date 0 20 (:user_id session)))] + (.setAttribute st "dumps" dumps) + (if-not (.after next-date today) + (.setAttribute st "next_date" (format-yyyymmdd next-date))) + (if-not (.before prev-date earliest-daily-hall) + (.setAttribute st "prev_date" (format-yyyymmdd prev-date))) + (.setAttribute st "current_date" (format-yyyymmdd cur-date)) + (.toString st))) + (redirect-to "/"))))) (defn log-login [user_id ip] ;; i'm using do-cmds here because update-values can't deal with stuff like 'last_login = now()' @@ -1273,6 +1289,10 @@ WHERE user_id IN (GET "/terms" (serve-template "terms" session)) (GET "/error/ie" (serve-template "error_ie" session)) + (GET "/" (front-page session)) + (GET "/top/:dt" (front-page session (:dt params))) + + ;; Put username routes below all others in priority (GET "/:nick" (profile session (params :nick))) (GET "/:nick/" (profile session (params :nick))) @@ -1296,7 +1316,6 @@ WHERE user_id IN (GET "/:nick/:date/" (user-log-handler session (params :nick) (params :date) nil)) (GET "/:nick/:date/:msg" (user-log-handler session (params :nick) (params :date) (params :msg))) - (GET "/" (landing session)) (ANY "*" (unknown-page))) (defroutes multipart diff --git a/src/utils.clj b/src/utils.clj index 4ed446a..1bccb09 100755 --- a/src/utils.clj +++ b/src/utils.clj @@ -131,16 +131,16 @@ (def yyyy-formatter (new SimpleDateFormat "yyyy")) (def yyyy-mm-formatter (new SimpleDateFormat "yyyy-MM")) (def yyyy-mm-dd-formatter (new SimpleDateFormat "yyyy-MM-dd")) -(def yymmdd-formatter (new SimpleDateFormat "yyyyMMdd")) +(def yyyymmdd-formatter (new SimpleDateFormat "yyyyMMdd")) -(doseq [f [yyyy-formatter yyyy-mm-formatter yyyy-mm-dd-formatter yymmdd-formatter]] +(doseq [f [yyyy-formatter yyyy-mm-formatter yyyy-mm-dd-formatter yyyymmdd-formatter]] (.setLenient f false)) (defn format-yyyy-mm-dd [d] (.format yyyy-mm-dd-formatter d)) (defn format-yyyymmdd [d] - (.format yymmdd-formatter d)) + (.format yyyymmdd-formatter d)) (defn today [] (format-yyyymmdd (new Date))) @@ -188,6 +188,12 @@ (.setTimeZone df (TimeZone/getTimeZone "GMT")) (.format df dt)))) +(defn advance-date [dt i] + (let [c (java.util.Calendar/getInstance)] + (.setTime c dt) + (.add c java.util.Calendar/DATE i) + (.getTime c))) + ;; JSON responses (defmethod print-json Date @@ -352,6 +358,10 @@ (defn parse-yyyy-mm-dd-date [s] (try (.parse yyyy-mm-dd-formatter s) (catch java.text.ParseException _ nil))) + +(defn parse-yyyymmdd-date [s] + (try (.parse yyyymmdd-formatter s) + (catch java.text.ParseException _ nil))) (defn parse-flexi-date "Accepts date strings as YYYY, YYYY-MM, or YYYY-MM-DD." -- cgit v1.2.3-70-g09d2