Browse Source

note title in the storage collision addressed

master
Christian Mueller 14 years ago
parent
commit
d8204b2837
  1. 3
      Makefile
  2. 14
      src/NoteHub/storage.clj
  3. 20
      src/NoteHub/views/pages.clj

3
Makefile

@ -0,0 +1,3 @@ @@ -0,0 +1,3 @@
server:
redis-server &
java vimclojure.nailgun.NGServer

14
src/NoteHub/storage.clj

@ -5,6 +5,8 @@ @@ -5,6 +5,8 @@
(def note "note")
(def draft "draft")
(defn- build-key [[year month day] key]
(print-str year month day key))
@ -13,3 +15,15 @@ @@ -13,3 +15,15 @@
(defn get-note [date key]
(redis/hget db note (build-key date key)))
(defn create-draft [key]
(redis/hget db draft key))
(defn delete-draft [key]
(redis/hdel db draft key))
(defn draft-exists? [key]
(redis/hexists db draft key))
(defn note-exists? [date key]
(redis/hexists db note (build-key date key)))

20
src/NoteHub/views/pages.clj

@ -9,7 +9,9 @@ @@ -9,7 +9,9 @@
[noir.core :only [defpage render]]
[noir.statuses]
[noir.fetch.remotes])
(:import [org.pegdown PegDownProcessor]))
(:import
[java.util Calendar]
[org.pegdown PegDownProcessor]))
; Fix a maximal title length used in the link
(def max-title-length 80)
@ -52,8 +54,7 @@ @@ -52,8 +54,7 @@
; Note URL
(defpage "/:year/:month/:day/:title" {:keys [year month day title]}
(let [date [year month day]
key (hash (conj date title))
post (get-note date key)
post (get-note date title)
title (-?> post (split #"\n") first (sreplace #"[_\*#]" ""))]
(if post
(common/layout title
@ -63,18 +64,15 @@ @@ -63,18 +64,15 @@
; New Note Posting
(defpage [:post "/post-note"] {:keys [draft]}
(let [[year month day] (split
(.format
(java.text.SimpleDateFormat. "yyyy-MM-dd")
(java.util.Date.)) #"-")
(let [[year month day] (map #(.get (Calendar/getInstance) %) [Calendar/YEAR Calendar/MONTH Calendar/DAY_OF_MONTH])
untrimmed-line (filter #(or (= \- %) (Character/isLetterOrDigit %))
(-> draft (split #"\n") first (sreplace " " "-") lower-case))
trim (fn [s] (apply str (drop-while #(= \- %) s)))
title-uncut (-> untrimmed-line trim reverse trim reverse)
title (apply str (take max-title-length title-uncut))
; TODO: deal with collisions!
proposed-title (apply str (take max-title-length title-uncut))
date [year month day]
key (hash (conj date title))]
title (first (drop-while #(note-exists? date %) (cons proposed-title
(map #(str proposed-title "-" (+ 2 %)) (range)))))]
(do
(set-note date key draft)
(set-note date title draft)
(redirect (apply str (interpose "/" ["" year month day title]))))))

Loading…
Cancel
Save