summaryrefslogtreecommitdiff
path: root/src/mulk/benki/lazychat.clj
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2012-04-10 17:35:38 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2012-04-10 17:35:38 +0200
commitd22a61311a7d19667e781e6d8026e24395ef3087 (patch)
tree23546530cfd2266464f50966e33bdd7a2bca69fd /src/mulk/benki/lazychat.clj
parent9a31ff37a5d57e113cc0500b84a3f22a6bdda4b0 (diff)
Lafargue: Add XMPP notification capability.
Diffstat (limited to 'src/mulk/benki/lazychat.clj')
-rw-r--r--src/mulk/benki/lazychat.clj40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/mulk/benki/lazychat.clj b/src/mulk/benki/lazychat.clj
index e2caaf8..ecc4ac1 100644
--- a/src/mulk/benki/lazychat.clj
+++ b/src/mulk/benki/lazychat.clj
@@ -21,7 +21,8 @@
[lamina.core :as lamina]
[aleph.http :as ahttp]
[aleph.formats :as aformats]
- [clojure.data.json :as json])
+ [clojure.data.json :as json]
+ [mulk.benki.xmpp :as xmpp])
(:import [org.apache.abdera Abdera]))
@@ -29,6 +30,29 @@
(defonce lafargue-events (channel))
+(defmethod xmpp/format-message ::lafargue-message
+ [message]
+ (fmt nil "<~A>\n\n~A" (:first_name message) (:content message)))
+
+(defn determine-targets [message]
+ (letfn [(protected-targets []
+ (with-dbt
+ (map :id (query "SELECT id FROM users WHERE status IN ('admin', 'approved')"))))]
+ (into #{}
+ (concat (:targets message)
+ (case (keyword (:visibility message))
+ :personal nil
+ :protected (protected-targets)
+ :public (cons nil (protected-targets)))))))
+
+(defn push-message-to-xmpp [msg]
+ (let [targets (filter integer? (determine-targets msg))]
+ (enqueue xmpp/messages {:message msg,
+ :targets targets})))
+
+(defn start-xmpp-pump []
+ (receive-all lafargue-events push-message-to-xmpp))
+
(defn create-lazychat-message! [{content :content, visibility :visibility
format :format, targets :targets,
referees :referees, id :id}]
@@ -53,10 +77,12 @@
[:message :target]
[id (int target)]))
(enqueue lafargue-events
- {:content content, :visibility visibility,
- :format format, :targets targets,
- :referees referees, :id id,
- :author *user*, :date (java.util.Date.)})))))
+ (with-meta
+ {:content content, :visibility visibility,
+ :format format, :targets targets,
+ :referees referees, :id id,
+ :author *user*, :date (java.util.Date.)}
+ {:type ::lafargue-message}))))))
(defn select-message [id]
(let [message (query1 "SELECT author, content, format, visibility, date
@@ -231,3 +257,7 @@
(with-auth
(response/json
(with-dbt (query1 "SELECT NEXTVAL('lazychat_messages_id_seq')")))))
+
+(defn init-lazychat! []
+ (future
+ (receive-all lafargue-events push-message-to-xmpp)))