pull/645/head
Tienson Qin 2020-04-12 09:37:00 +08:00
parent 42a905c14d
commit 4e363519c1
2 changed files with 37 additions and 44 deletions

View File

@ -57,16 +57,13 @@
(files-list file-active?)])) (files-list file-active?)]))
(rum/defc main-content < rum/reactive (rum/defc main-content < rum/reactive
{:will-mount (fn [state]
(handler/set-latest-journals!)
state)}
[] []
(let [{:repo/keys [cloning? loading-files?] (let [{:repo/keys [cloning? loading-files? importing-to-db?]
:keys [latest-journals]} (rum/react state/state)] :keys [latest-journals]} (rum/react state/state)]
[:div.max-w-7xl.mx-auto.px-4.sm:px-6.md:px-8 [:div.max-w-7xl.mx-auto.px-4.sm:px-6.md:px-8
(cond (cond
;; importing-to-db? importing-to-db?
;; [:div "Parsing files ..."] [:div "Parsing files ..."]
(seq latest-journals) (seq latest-journals)
(journal/journals latest-journals) (journal/journals latest-journals)

View File

@ -72,6 +72,7 @@
(defn load-files (defn load-files
[repo-url] [repo-url]
(set-state-kv! :repo/cloning? false)
(set-state-kv! :repo/loading-files? true) (set-state-kv! :repo/loading-files? true)
(util/p-handle (git/list-files repo-url) (util/p-handle (git/list-files repo-url)
(fn [files] (fn [files]
@ -84,11 +85,9 @@
(when patterns-content (when patterns-content
(let [patterns (string/split patterns-content #"\n") (let [patterns (string/split patterns-content #"\n")
files (remove (fn [path] (hidden? path patterns)) files)] files (remove (fn [path] (hidden? path patterns)) files)]
(set-state-kv! :repo/loading-files? false)
(db/transact-files! repo-url files))))) (db/transact-files! repo-url files)))))
(p/promise (p/promise
(do (do
(set-state-kv! :repo/loading-files? false)
(db/transact-files! repo-url files))))))))) (db/transact-files! repo-url files)))))))))
@ -110,36 +109,35 @@
(defn- set-git-error! (defn- set-git-error!
[value] [value]
(set-state-kv! :git/error value) (set-state-kv! :git/error value)
(storage/set :git/error value)) (storage/set :git/error (pr-str value)))
(defn set-latest-journals!
[]
(set-state-kv! :latest-journals (db/get-latest-journals {})))
;; TODO: Maybe replace with fetch?
;; TODO: callback hell
(defn pull (defn pull
[repo-url token] [repo-url token]
(when (and (nil? (:git/error @state/state)) (when (and (nil? (:git/error @state/state))
(nil? (:git/status @state/state))) (nil? (:git/status @state/state)))
(let [remote-changed? (atom false) (let [remote-changed? (atom false)
latest-commit (:git/latest-commit @state/state)] latest-commit (:git/latest-commit @state/state)]
(-> (p/let [result (git/fetch repo-url token)
(util/p-handle {:keys [fetchHead]} (bean/->clj result)
(git/fetch repo-url token) merge-result (do
(fn [result]
(let [{:keys [fetchHead]} (bean/->clj result)]
(when (or (when (or
(nil? latest-commit) (nil? latest-commit)
(and latest-commit (not= fetchHead latest-commit))) (and latest-commit (not= fetchHead latest-commit)))
(reset! remote-changed? true)) (reset! remote-changed? true))
(set-latest-commit! fetchHead) (set-latest-commit! fetchHead)
(git/merge repo-url)))) (git/merge repo-url))
(util/p-handle _ (prn {:merge-result merge-result})
(fn [merge-result] files (when @remote-changed?
(prn {:merge-result merge-result (load-files repo-url))
:remote-changed? @remote-changed?}) load-repo (when @remote-changed?
(when @remote-changed? (load-repo-to-db! repo-url))]
(-> (load-files repo-url) (when (or @remote-changed?
(p/then (empty? (:latest-journals @state/state)))
(fn [] (set-latest-journals!))))))
(load-repo-to-db! repo-url)))))))))))
(defn periodically-pull (defn periodically-pull
[repo-url] [repo-url]
@ -189,13 +187,14 @@
(set-state-kv! :repo/cloning? true) (set-state-kv! :repo/cloning? true)
(git/clone repo token)) (git/clone repo token))
(fn [] (fn []
(set-state-kv! :repo/cloning? false)
(db/mark-repo-as-cloned repo) (db/mark-repo-as-cloned repo)
(db/set-current-repo! repo) (db/set-current-repo! repo)
;; load contents ;; load contents
(load-files repo)) (load-files repo))
(fn [e] (fn [e]
(set-state-kv! :repo/cloning? false) (set-state-kv! :repo/cloning? false)
(set-git-status! :clone-failed)
(set-git-error! e)
(prn "Clone failed, reason: " e))))) (prn "Clone failed, reason: " e)))))
(defn new-notification (defn new-notification
@ -329,6 +328,7 @@
(defn load-repo-to-db! (defn load-repo-to-db!
[repo-url] [repo-url]
(set-state-kv! :repo/loading-files? false)
(set-state-kv! :repo/importing-to-db? true) (set-state-kv! :repo/importing-to-db? true)
(load-all-contents! (load-all-contents!
repo-url repo-url
@ -379,9 +379,6 @@
(apply str)))) (apply str))))
;; journals ;; journals
(defn set-latest-journals!
[]
(set-state-kv! :latest-journals (db/get-latest-journals {})))
(defn create-month-journal-if-not-exists (defn create-month-journal-if-not-exists
[repo-url] [repo-url]
@ -400,18 +397,10 @@
(fn [file-exists?] (fn [file-exists?]
(when-not file-exists? (when-not file-exists?
(prn "create a month journal") (prn "create a month journal")
(git-add-commit repo-url path "create a month journal" default-content) (git-add-commit repo-url path "create a month journal" default-content)))
(set-latest-journals!)))
(fn [error] (fn [error]
(prn error)))))) (prn error))))))
(defn clone-and-pull
[repo]
(p/then (clone repo)
(fn []
(periodically-pull repo)
(create-month-journal-if-not-exists repo))))
(defn set-route-match! (defn set-route-match!
[route] [route]
(swap! state/state assoc :route-match route)) (swap! state/state assoc :route-match route))
@ -454,6 +443,13 @@
(periodically-pull repo-url) (periodically-pull repo-url)
(periodically-push-tasks repo-url)) (periodically-push-tasks repo-url))
(defn clone-and-pull
[repo]
(p/then (clone repo)
(fn []
(periodically-pull-and-push repo)
(create-month-journal-if-not-exists repo))))
(defn edit-journal! (defn edit-journal!
[content journal] [content journal]
(swap! state/state assoc (swap! state/state assoc