summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsostler <sbostler@gmail.com>2009-12-18 21:56:51 -0500
committersostler <sbostler@gmail.com>2009-12-18 21:56:51 -0500
commit704efb06cd424de7411f198bc4c6ce6b99a9dcbe (patch)
tree076c19e5c97264948f4d94f32b6869c5dd396f60 /src
parent5a8312ca25868679df1acb3b3fc208482460ee0e (diff)
Checkin before leaving
Diffstat (limited to 'src')
-rw-r--r--src/site.clj48
1 files changed, 28 insertions, 20 deletions
diff --git a/src/site.clj b/src/site.clj
index cc7dfd3..7fdd5ed 100644
--- a/src/site.clj
+++ b/src/site.clj
@@ -1,5 +1,3 @@
-; site.clj
-
(ns pichat
(:import java.lang.System
java.text.SimpleDateFormat
@@ -25,7 +23,7 @@
(.setRefreshInterval template-group 3)
(defstruct user-struct :user-id :nick :last-seen)
-(defstruct message-struct :nick :avatar :content :created_on)
+(defstruct message-struct :nick :content :created_on)
(def users (ref {}))
(def messages (ref []))
@@ -101,7 +99,6 @@
(defn process-message-for-output [d]
(let [avatar (d :avatar)]
{"nick" (encode-html-entities (d :nick))
- "avatar" (if avatar (encode-html-entities avatar) nil)
"created_on" (.format formatter (d :created_on))
"content" (encode-html-entities (d :content))}))
@@ -118,17 +115,18 @@
"messages" (map process-message-for-json (new-messages since))}))
(defn fetch-messages-by-room [room-id]
- (let [query (str "SELECT m.content, m.created_on, u.nick, u.avatar "
+ (let [query (str "SELECT m.content, m.created_on, u.nick "
"FROM messages m, users u "
"WHERE room_id = ? AND m.user_id = u.user_id "
"ORDER BY created_on DESC "
"LIMIT 20")]
(do-select [query room-id])))
-(defn fetch-messages-by-nick [nick]
- (let [query (str "SELECT m.content, m.created_on, u.nick, u.avatar "
+(defn fetch-messages-by-nick [nick image-only]
+ (let [query (str "SELECT m.content, m.created_on, u.nick "
"FROM messages m, users u "
"WHERE m.user_id = u.user_id AND u.nick = ? "
+ (if image-only "AND m.is_image = true " "")
"ORDER BY created_on DESC "
"LIMIT 20")]
(do-select [query nick])))
@@ -151,7 +149,7 @@
(defn landing [session]
(let [nick (session :nick)]
(if nick
- (redirect-to (str "/u/" nick))
+ (redirect-to "/chat")
(serve-file "static" "index.html"))))
(defn login [session params]
@@ -198,7 +196,7 @@
(let [nick (session :nick)
is-home (and nick (= nick profile-nick))
has-avatar (non-empty-string? (user-info :avatar))
- dumps (fetch-messages-by-nick profile-nick)
+ dumps (fetch-messages-by-nick profile-nick true)
st (fetch-template "profile" session)]
(do
(.setAttribute st "is_home" is-home)
@@ -264,26 +262,36 @@
; TODO: session should store room-id of anon. users
(resp-error "NOT_IN_CHAT"))))
+;; http://snippets.dzone.com/posts/show/6995
+(def url-regex #"((http\:\/\/|https\:\/\/|ftp\:\/\/)|(www\.))+(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?")
+(def pic-regex #"^.*\.(jpg|jpeg|png|gif|bmp)$")
+
+(defn is-image? [content]
+ (let [lower-content (.toLowerCase content)]
+ (if (and (re-matches url-regex lower-content)
+ (re-matches pic-regex lower-content))
+ true false)))
+
(defn msg-transaction [nick msg]
(dosync
- (if (contains? (ensure users) nick)
- (do (alter messages (swap cons) msg)
- true)
- false)))
+ (and (contains? (ensure users) nick)
+ (do (alter messages (swap cons) msg)
+ true))))
(defn msg-db [user-id room-id msg]
- (with-connection db
- (insert-values :messages
- [:user_id :room_id :content]
- [user-id room-id (msg :content)])))
+ (let [content (msg :content)
+ is-image (is-image? content)]
+ (with-connection db
+ (insert-values :messages
+ [:user_id :room_id :content :is_image]
+ [user-id room-id content is-image]))))
(defn msg [session params]
(let [user-id (session :user-id)
nick (session :nick)
- avatar (session :avatar)
- content (params :content)
+ content (.trim (params :content))
now (new Date)
- msg (struct message-struct nick avatar content now)]
+ msg (struct message-struct nick content now)]
(if (msg-transaction nick msg)
(do
(msg-db user-id 1 msg)