listener.cljs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. (ns electron.listener
  2. (:require [frontend.state :as state]
  3. [frontend.context.i18n :refer [t]]
  4. [frontend.handler.route :as route-handler]
  5. [frontend.handler.ui :as ui-handler]
  6. [cljs-bean.core :as bean]
  7. [frontend.fs.watcher-handler :as watcher-handler]
  8. [frontend.fs.sync :as sync]
  9. [frontend.db :as db]
  10. [datascript.core :as d]
  11. [electron.ipc :as ipc]
  12. [frontend.ui :as ui]
  13. [frontend.handler.notification :as notification]
  14. [frontend.handler.repo :as repo-handler]
  15. [frontend.handler.user :as user]))
  16. (defn persist-dbs!
  17. []
  18. ;; only persist current db!
  19. ;; TODO rename the function and event to persist-db
  20. (repo-handler/persist-db! {:before #(notification/show!
  21. (ui/loading (t :graph/persist))
  22. :warning)
  23. :on-success #(ipc/ipc "persistent-dbs-saved")
  24. :on-error #(ipc/ipc "persistent-dbs-error")}))
  25. (defn listen-persistent-dbs!
  26. []
  27. ;; TODO: move "file-watcher" to electron.ipc.channels
  28. (js/window.apis.on
  29. "persistent-dbs"
  30. (fn [_req]
  31. (persist-dbs!))))
  32. (defn listen-to-electron!
  33. []
  34. ;; TODO: move "file-watcher" to electron.ipc.channels
  35. (js/window.apis.on "file-watcher"
  36. (fn [data]
  37. (let [{:keys [type payload]} (bean/->clj data)]
  38. (watcher-handler/handle-changed! type payload)
  39. (sync/file-watch-handler type payload))))
  40. (js/window.apis.on "notification"
  41. (fn [data]
  42. (let [{:keys [type payload]} (bean/->clj data)
  43. type (keyword type)
  44. comp [:div (str payload)]]
  45. (notification/show! comp type false))))
  46. (js/window.apis.on "graphUnlinked"
  47. (fn [data]
  48. (let [repo (bean/->clj data)]
  49. (repo-handler/remove-repo! repo))))
  50. (js/window.apis.on "setGitUsernameAndEmail"
  51. (fn []
  52. (state/pub-event! [:modal/set-git-username-and-email])))
  53. (js/window.apis.on "getCurrentGraph"
  54. (fn []
  55. (when-let [graph (state/get-current-repo)]
  56. (ipc/ipc "setCurrentGraph" graph))))
  57. (js/window.apis.on "redirect"
  58. (fn [data]
  59. (let [{:keys [payload]} (bean/->clj data)
  60. payload (update payload :to keyword)]
  61. (route-handler/redirect! payload))))
  62. (js/window.apis.on "dbsync"
  63. (fn [data]
  64. (let [{:keys [graph tx-data]} (bean/->clj data)
  65. tx-data (db/string->db (:data tx-data))]
  66. (when-let [conn (db/get-conn graph false)]
  67. (d/transact! conn tx-data {:dbsync? true}))
  68. (ui-handler/re-render-root!))))
  69. (js/window.apis.on "persistGraph"
  70. ;; electron is requesting window for persisting a graph in it's db
  71. (fn [data]
  72. (let [repo (bean/->clj data)
  73. before-f #(notification/show!
  74. (ui/loading (t :graph/persist))
  75. :warning)
  76. after-f #(ipc/ipc "persistGraphDone" repo)
  77. error-f (fn []
  78. (after-f)
  79. (notification/show!
  80. (t :graph/persist-error)
  81. :error))
  82. handlers {:before before-f
  83. :on-success after-f
  84. :on-error error-f}]
  85. (repo-handler/persist-db! repo handlers))))
  86. (js/window.apis.on "loginCallback"
  87. (fn [code]
  88. (user/login-callback code))))
  89. (defn listen!
  90. []
  91. (listen-to-electron!)
  92. (listen-persistent-dbs!))