PageRenderTime 49ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/src/rssminer/handlers/subscriptions.clj

https://github.com/shenfeng/rssminer
Clojure | 52 lines | 44 code | 7 blank | 1 comment | 4 complexity | 8768b47745e6626949ac40bb95b99369 MD5 | raw file
  1. (ns rssminer.handlers.subscriptions
  2. (:use (rssminer [redis :only [fetch-rss]]
  3. [util :only [now-seconds defhandler valid-url?]])
  4. [rssminer.database :only [mysql-insert-and-return]]
  5. [clojure.tools.logging :only [info]])
  6. (:require [rssminer.db.subscription :as db]
  7. [rssminer.db.feed :as fdb]
  8. [clojure.string :as str]))
  9. (defn subscribe [url uid title group-name]
  10. (when (and url (valid-url? url))
  11. (let [sub (or (db/fetch-rss-link-by-url url)
  12. (mysql-insert-and-return :rss_links {:url url
  13. :user_id uid}))]
  14. (fetch-rss sub)
  15. (if-let [us (db/fetch-subscription uid (:id sub))]
  16. us
  17. (mysql-insert-and-return :user_subscription
  18. {:user_id uid
  19. :group_name group-name
  20. :title title
  21. :rss_link_id (:id sub)})))))
  22. (defhandler polling-fetcher [req rss-id uid] ;; wait for fetcher return
  23. (db/fetch-sub uid rss-id))
  24. (defhandler list-subscriptions [req uid]
  25. (db/fetch-subs uid))
  26. (defhandler unread-count [req uid]
  27. (let [numbers (db/get-numbers uid (- (now-seconds) (* 3600 24 30)))
  28. unread (filter #(> (:unread %) 0) numbers)]
  29. (zipmap (map :id unread)
  30. (map :unread unread))))
  31. (defhandler add-subscription [req uid]
  32. (let [{:keys [link g]} (-> req :body)]
  33. (info (str "user: " uid " add sub: " link))
  34. ;; enqueue, client need to poll for result
  35. (if (valid-url? link)
  36. (subscribe link uid nil g)
  37. {:status 200 :body "not valid url"})))
  38. (defhandler save-sort-order [req uid]
  39. (let [;; [{:g group :ids [id, id, id]}]
  40. data (mapcat (fn [{:keys [ids g]}]
  41. (map (fn [id] {:g g :id id}) ids)) (:body req))]
  42. (db/update-sort-order uid data)
  43. {:status 204}))
  44. (defhandler unsubscribe [req uid rss-id]
  45. (db/delete-subscription uid rss-id))