diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2012-04-10 17:35:38 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2012-04-10 17:35:38 +0200 |
commit | d22a61311a7d19667e781e6d8026e24395ef3087 (patch) | |
tree | 23546530cfd2266464f50966e33bdd7a2bca69fd /src/mulk/benki/lazychat.clj | |
parent | 9a31ff37a5d57e113cc0500b84a3f22a6bdda4b0 (diff) |
Lafargue: Add XMPP notification capability.
Diffstat (limited to 'src/mulk/benki/lazychat.clj')
-rw-r--r-- | src/mulk/benki/lazychat.clj | 40 |
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))) |