fix: preserve config.file order when updating

This commit is contained in:
Tienson Qin
2020-12-22 23:55:48 +08:00
parent 88b37d2d70
commit bc8463265d
4 changed files with 30 additions and 24 deletions

View File

@@ -183,7 +183,7 @@
(ui/toggle enable-timetracking?
(fn []
(let [value (not enable-timetracking?)]
(repo-handler/set-config! :feature/enable-timetracking? value))))]]]
(config-handler/set-config! :feature/enable-timetracking? value))))]]]
[:hr]

View File

@@ -1,7 +1,27 @@
(ns frontend.handler.config
(:require [frontend.state :as state]
[frontend.handler.repo :as repo-handler]))
[frontend.handler.repo :as repo-handler]
[borkdude.rewrite-edn :as rewrite]
[frontend.config :as config]
[frontend.db :as db]))
(defn set-config!
[k v]
(when-let [repo (state/get-current-repo)]
(let [path (str config/app-name "/" config/config-file)]
(when-let [config (db/get-file-no-sub path)]
(let [config (try
(rewrite/parse-string config)
(catch js/Error e
(println "Parsing config file failed: ")
(js/console.dir e)
{}))
ks (if (vector? k) k [k])
new-config (rewrite/assoc-in config ks v)]
(state/set-config! repo new-config)
(let [new-content (str new-config)]
(repo-handler/set-config-content! repo path new-content)))))))
(defn toggle-ui-show-brackets! []
(let [show-brackets? (state/show-brackets?)]
(repo-handler/set-config! :ui/show-brackets? (not show-brackets?))))
(set-config! :ui/show-brackets? (not show-brackets?))))

View File

@@ -21,7 +21,6 @@
[frontend.handler.common :as common-handler]
[frontend.handler.extract :as extract-handler]
[frontend.ui :as ui]
[cljs.reader :as reader]
[clojure.string :as string]
[frontend.dicts :as dicts]
[frontend.helper :as helper]
@@ -494,26 +493,9 @@
(show-install-error! repo-url (util/format "Failed to clone %s." repo-url)))))))
(defn set-config-content!
[repo path new-config]
(let [new-content (util/pp-str new-config)]
(file-handler/alter-file repo path new-content {:reset? false
:re-render-root? false})))
(defn set-config!
[k v]
(when-let [repo (state/get-current-repo)]
(let [path (str config/app-name "/" config/config-file)]
(when-let [config (db/get-file-no-sub path)]
(let [config (try
(reader/read-string config)
(catch js/Error e
(println "Parsing config file failed: ")
(js/console.dir e)
{}))
ks (if (vector? k) k [k])
new-config (assoc-in config ks v)]
(state/set-config! repo new-config)
(set-config-content! repo path new-config))))))
[repo path new-content]
(file-handler/alter-file repo path new-content {:reset? false
:re-render-root? false}))
(defn remove-repo!
[{:keys [id url] :as repo}]