From cf48ab4a81339f327a534585c54e01a57f9dfa86 Mon Sep 17 00:00:00 2001 From: dumpfmprod Date: Wed, 24 Feb 2010 08:38:11 -0500 Subject: Resolved site.clj --- src/site.clj | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 4db69e8..167f4d5 100755 --- a/src/site.clj +++ b/src/site.clj @@ -661,29 +661,19 @@ (dosync (doseq [room-db (fetch-rooms)] - (alter rooms assoc (room-db :key) - (build-room-map-from-db room-db)))) -<<<<<<< HEAD - -(run-server {:port 8080} - "/static/*" (servlet static) - "/images/*" (servlet static) - "/avatars/*" (servlet static) - "/upload/*" (servlet multipart) - "/*" (servlet pichat)) - -(send-off flusher flush!) -======= + (alter rooms assoc (room-db :key) + (build-room-map-from-db room-db)))) (defn start-server ([port] (run-server {:port port} "/static/*" (servlet static) "/images/*" (servlet static) - "/upload" (servlet multipart) + "/avatars/*" (servlet static) + "/upload/*" (servlet multipart) "/*" (servlet pichat))) ([] (start-server 8080))) (start-server) (start-user-flusher!) (start-session-pruner!) ->>>>>>> 8003ba27e49a630b24090f3af01426f35e85af67 + -- cgit v1.2.3-70-g09d2 From 215f4f8bf89aa74091815286c0ff7d7594b6e42f Mon Sep 17 00:00:00 2001 From: Scott Ostler Date: Wed, 24 Feb 2010 09:56:09 -0500 Subject: Renamed db to *db* --- src/site.clj | 12 +++--------- src/utils.clj | 24 ++++++++++++++++-------- 2 files changed, 19 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 167f4d5..fcd2930 100755 --- a/src/site.clj +++ b/src/site.clj @@ -155,12 +155,6 @@ (def *dumps-per-page* 20) -(defn maybe-parse-int [s f] - (if s (Integer/parseInt s) f)) - -(defn maybe-parse-long [s f] - (if s (Long/parseLong s) f)) - (defn count-messages-by-room [room-id image-only] (let [query (str "SELECT COUNT(*) " "FROM messages m, users u " @@ -301,7 +295,7 @@ invalid-nick-reason (is-invalid-nick? nick)] (cond invalid-nick-reason (resp-error invalid-nick-reason) (fetch-nick nick) (resp-error "NICK_TAKEN") - :else (with-connection db + :else (with-connection *db* (insert-values :users [:nick :hash :email] [nick hash email]) @@ -338,7 +332,7 @@ (defn update-user-db [user-id attr val] - (with-connection db + (with-connection *db* (update-values "users" ["user_id = ?" user-id] {attr val}))) (defn download-avatar [session url] @@ -430,7 +424,7 @@ (let [is-image (is-image? content) qry (str "INSERT INTO messages (user_id, room_id, content, is_image) " "VALUES (?, ?, ?, ?) RETURNING message_id")] - (with-connection db + (with-connection *db* ((first (do-select [qry user-id room-id content is-image])) :message_id)))) diff --git a/src/utils.clj b/src/utils.clj index 3ffd54b..33a247f 100755 --- a/src/utils.clj +++ b/src/utils.clj @@ -7,11 +7,11 @@ (let [db-host "localhost" db-port 5432 db-name "dumpfm"] - (def db {:classname "org.postgresql.Driver" - :subprotocol "postgresql" - :subname (str "//" db-host ":" db-port "/" db-name) - :user "postgres" - :password "root"})) + (def *db* {:classname "org.postgresql.Driver" + :subprotocol "postgresql" + :subname (str "//" db-host ":" db-port "/" db-name) + :user "postgres" + :password "root"})) ;; JSON responses @@ -30,12 +30,12 @@ ;; Database (defn do-select [query] - (with-connection db + (with-connection *db* (with-query-results rs query (doall rs)))) (defn do-count [query] - ((first (with-connection db + ((first (with-connection *db* (with-query-results rs query (doall rs)))) :count)) @@ -72,4 +72,12 @@ (defn validated-stats [session params] (if (session :is_admin) (stats session params) - (resp-error "BAD_REQUEST"))) \ No newline at end of file + (resp-error "BAD_REQUEST"))) + +;; Parsing + +(defn maybe-parse-int [s f] + (if s (Integer/parseInt s) f)) + +(defn maybe-parse-long [s f] + (if s (Long/parseLong s) f)) \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 6e8cef2a8b409c10e898b48c5c7293b0ad45d88b Mon Sep 17 00:00:00 2001 From: Scott Ostler Date: Thu, 25 Feb 2010 08:22:11 -0500 Subject: Added serve-template --- src/site.clj | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index fcd2930..60f07d7 100755 --- a/src/site.clj +++ b/src/site.clj @@ -204,13 +204,17 @@ ;; Templates -(defn fetch-template [template-name session] - (let [st (.getInstanceOf template-group template-name)] - (if (and st (session :nick)) +;; TODO: avoid exception +(defn fetch-template [template session] + (let [st (.getInstanceOf template-group template)] + (if (session :nick) (do (.setAttribute st "user_nick" (session :nick)) (.setAttribute st "isadmin" (session :is_admin)))) st)) +(defn serve-template [template session] + (.toString (fetch-template template session))) + ;; Login code (defn session-map-from-db @@ -590,7 +594,7 @@ (defroutes pichat (GET "/" (no-cache (landing session))) (GET "/favicon.ico" (serve-static "static" "favicon.ico")) - (GET "/u/:nick" (profile session (params :nick) "0")) + (GET "/u/:nick" (profile session (params :nick) "0")) (GET "/u/:nick/" (profile session (params :nick) "0")) (GET "/u/:nick/:offset" (profile session (params :nick) @@ -615,6 +619,11 @@ (POST "/msg" (validated-msg session params)) (POST "/submit-registration" (register session params)) (POST "/update-profile" (update-profile session params)) + (GET "/about_us" (serve-template "about_us" session)) + (GET "/goodies" (serve-template "goodies" session)) + (GET "/help" (serve-template "help" session)) + (GET "/privacy" (serve-template "privacy" session)) + (GET "/terms" (serve-template "terms" session)) (ANY "*" (unknown-page params))) (defroutes multipart -- cgit v1.2.3-70-g09d2 From 1a543c1a104e885567f1adb296859ead3d098ea4 Mon Sep 17 00:00:00 2001 From: Scott Ostler Date: Thu, 25 Feb 2010 09:42:18 -0500 Subject: Fixed updating avatar-url --- src/site.clj | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 60f07d7..48ba39e 100755 --- a/src/site.clj +++ b/src/site.clj @@ -339,10 +339,10 @@ (with-connection *db* (update-values "users" ["user_id = ?" user-id] {attr val}))) -(defn download-avatar [session url] - (let [url false] - (update-user-db (session :user_id) "avatar" url) - (resp-success url))) +(defn update-avatar [session url] + (update-user-db (session :user_id) "avatar" url) + [(session-assoc :avatar url) + (resp-success url)]) (defn update-profile [session params] (let [user-id (session :user_id) @@ -352,7 +352,7 @@ (cond (not user-id) (resp-error "MUST_LOGIN") (not (and user-id attr val)) (resp-error "BAD_REQUEST") (not (contains? attr-set attr)) (resp-error "BAD_REQUEST") - (= attr "avatar") (download-avatar session val) + (= attr "avatar") (update-avatar session val) :else (do (update-user-db user-id attr val) (resp-success "OK"))))) -- cgit v1.2.3-70-g09d2 From 4bb4fbe6f3abc01edcd402edd1f2c86bd690c062 Mon Sep 17 00:00:00 2001 From: Scott Ostler Date: Thu, 25 Feb 2010 20:15:53 -0500 Subject: Rearranged profile func --- src/site.clj | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index 48ba39e..cd2b82f 100755 --- a/src/site.clj +++ b/src/site.clj @@ -318,15 +318,16 @@ dump-offset (* offset *dumps-per-page*) dumps (fetch-messages-by-nick profile-nick true dump-offset) dump-count (count-messages-by-nick profile-nick true) - st (fetch-template "profile" session)] + st (fetch-template "profile" session) + dumps (to-array (map process-message-for-output dumps))] (do (.setAttribute st "is_home" is-home) (doseq [a [:nick :avatar :contact :bio]] (let [v (user-info a)] (.setAttribute st (name a) (if (non-empty-string? v) (escape-html v))))) - (.setAttribute st "dumps" - (to-array (map process-message-for-output dumps))) + (if (> (count dumps) 0) + (.setAttribute st "dumps" dumps)) (if (< (+ dump-offset *dumps-per-page*) dump-count) (.setAttribute st "next" (inc offset))) (if (not= offset 0) -- cgit v1.2.3-70-g09d2 From fa8c89b543bb6e23cc7cac5983cb61818a4e3139 Mon Sep 17 00:00:00 2001 From: Scott Ostler Date: Sat, 27 Feb 2010 18:28:06 -0500 Subject: in-progress topics --- src/site.clj | 36 +++++++++++++++++++++++++++++++++--- static/js/pichat.js | 40 ++++++++++++++++++++++++++++++++++++---- template/banner.st | 4 +++- 3 files changed, 72 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/site.clj b/src/site.clj index cd2b82f..28dadcb 100755 --- a/src/site.clj +++ b/src/site.clj @@ -148,10 +148,11 @@ (map process-user (sort-by #(% :nick) (vals @(room :users))))) -(defn updates [room since] +(defn updates [room since] {"users" (prepare-user-list room) "messages" (map process-message-for-json - (new-messages room since))}) + (new-messages room since)) + "topic" @(room :topic)}) (def *dumps-per-page* 20) @@ -200,7 +201,9 @@ :name (room-db :name) :description (room-db :description) :users (ref {}) - :messages (ref (fetch-messages-by-room (room-db :room_id) false))}) + :messages (ref (fetch-messages-by-room (room-db :room_id) false)) + :topic (ref nil) + }) ;; Templates @@ -357,6 +360,32 @@ :else (do (update-user-db user-id attr val) (resp-success "OK"))))) +;; Topics + +(defn valid-topic? [topic] + topic) + +(defn valid-deadline? [deadline] + deadline) + +(defn set-topic! [room topic deadline maker] + (ref-set (room :topic) + {:topic topic + :deadline deadline + :maker maker})) + +(defn validate-set-topic [session params] + (let [room (@rooms (params :room)) + topic (params :topic) + deadline (params :deadline)] + (cond (not (session :is_admin)) (resp-error "NOT_VIP") + (not (valid-topic? topic)) (resp-error "INVALID_TOPIC") + (not (valid-deadline? deadline)) (resp-error "INVALID_DEADLINE") + (not room) (resp-error "INVALID_ROOM") + :else (do + (dosync (set-topic! room topic deadline (session :nick))) + (resp-success "OK"))))) + ;; Chat (defn validate-room-access [room-key session] @@ -620,6 +649,7 @@ (POST "/msg" (validated-msg session params)) (POST "/submit-registration" (register session params)) (POST "/update-profile" (update-profile session params)) + (POST "/set-topic" (validate-set-topic session params)) (GET "/about_us" (serve-template "about_us" session)) (GET "/goodies" (serve-template "goodies" session)) (GET "/help" (serve-template "help" session)) diff --git a/static/js/pichat.js b/static/js/pichat.js index b847f58..8917e7c 100755 --- a/static/js/pichat.js +++ b/static/js/pichat.js @@ -1,8 +1,11 @@ var cache = {} -var pendingMessages = {} +var PendingMessages = {} var MaxImagePosts = 40 +// Utils + + function escapeHtml(txt) { if (!txt) { return ""; } else { return $("").text(txt).html(); } @@ -30,6 +33,8 @@ function linkReplace(url){ } } +// Message Handling + var ImageMsgCount = 0 function removeOldMessages(){ // don't count posts that are all text @@ -73,6 +78,8 @@ function buildUserDiv(user) { } } +// Growl + function buildGrowlDataAndPopDatShit(msg) { var nick = escapeHtml(msg.nick); nick = '' + nick + ':' @@ -95,11 +102,13 @@ function handleMsgError(resp) { } } +// Messages + function submitMessage() { var content = $.trim($('#msgInput').val()); $('#msgInput').val(''); if (content == '') { return; } - pendingMessages[content] = true; + PendingMessages[content] = true; var msg = { 'nick': Nick, 'content': content }; var div = addNewMessage(msg, true); @@ -173,14 +182,34 @@ function updateUI(msgs, users) { } function isDuplicateMessage(m) { - if (m.nick == Nick && m.content in pendingMessages) { - delete pendingMessages[m.content]; + if (m.nick == Nick && m.content in PendingMessages) { + delete PendingMessages[m.content]; return true; } else { return false; } } +var CurrentTopic = null; + +function isSameTopic(curTopic, newTopic) { + if (!!curTopic != !!newTopic) { return false; } + else if (!curTopic) { return false; } // => !newTopic also + else { + return curTopic.topic == newTopic.topic && + curTopic.deadline == newTopic.deadline && + curTopic.maker == newTopic.maker; + } +} + +function updateTopic(newTopic) { + if (isSameTopic(CurrentTopic, newTopic)) { return; } + alert('new topic'); + CurrentTopic = newTopic; + $('#topic').text(topic.topic); + +} + function refresh() { var onSuccess = function(json) { try { @@ -192,6 +221,9 @@ function refresh() { if (typeof UnseenMsgCounter !== 'undefined' && !HasFocus) { UnseenMsgCounter += messages.length; } + if (json.topic) { + updateTopic(json.topic); + } } catch(e) { if (IsAdmin && window.console) { console.error(e); diff --git a/template/banner.st b/template/banner.st index 557a0e0..dd7a7b3 100755 --- a/template/banner.st +++ b/template/banner.st @@ -28,7 +28,9 @@ - + +
+ $if(isadmin)$
★ VIP ★ -- cgit v1.2.3-70-g09d2