repo_config.cljs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. (ns frontend.handler.repo-config
  2. "This ns is a system component that encapsulates repo config functionality.
  3. This component only concerns itself with one user-facing repo config file,
  4. logseq/config.edn. In the future it may manage more files. This component
  5. depends on a repo."
  6. (:require [frontend.db :as db]
  7. [frontend.config :as config]
  8. [frontend.state :as state]
  9. [frontend.handler.common.file :as file-common-handler]
  10. [frontend.fs :as fs]
  11. [promesa.core :as p]
  12. [clojure.edn :as edn]
  13. [frontend.spec :as spec]))
  14. (defn- get-repo-config-content
  15. [repo-url]
  16. (db/get-file repo-url (config/get-repo-config-path)))
  17. (defn read-repo-config
  18. "Converts file content to edn"
  19. [content]
  20. (edn/read-string content))
  21. (defn set-repo-config-state!
  22. "Sets repo config state using given file content"
  23. [repo-url content]
  24. (let [config (read-repo-config content)]
  25. (state/set-config! repo-url config)
  26. config))
  27. (defn create-config-file-if-not-exists
  28. "Creates a default logseq/config.edn if it doesn't exist"
  29. [repo-url]
  30. (spec/validate :repos/url repo-url)
  31. (let [repo-dir (config/get-repo-dir repo-url)
  32. app-dir config/app-name
  33. dir (str repo-dir "/" app-dir)]
  34. (p/let [_ (fs/mkdir-if-not-exists dir)]
  35. (let [default-content config/config-default-content
  36. path (str app-dir "/" config/config-file)]
  37. (p/let [file-exists? (fs/create-if-not-exists repo-url repo-dir (str app-dir "/" config/config-file) default-content)]
  38. (when-not file-exists?
  39. (file-common-handler/reset-file! repo-url path default-content)
  40. (set-repo-config-state! repo-url default-content)))))))
  41. (defn restore-repo-config!
  42. "Sets repo config state from db"
  43. ([repo-url]
  44. (restore-repo-config! repo-url (get-repo-config-content repo-url)))
  45. ([repo-url config-content]
  46. (set-repo-config-state! repo-url config-content)))
  47. (defn start
  48. "This component only has one responsibility on start, to manage db and ui state
  49. from repo config. It does not manage the repo directory, logseq/, as that is
  50. loosely done by repo-handler"
  51. [{:keys [repo]}]
  52. (restore-repo-config! repo))