From 4e363519c1d3a5bead3c1a5308cca3876bad495c Mon Sep 17 00:00:00 2001 From: Tienson Qin Date: Sun, 12 Apr 2020 09:37:00 +0800 Subject: [PATCH] Fix #23 --- web/src/main/frontend/components/sidebar.cljs | 9 +-- web/src/main/frontend/handler.cljs | 72 +++++++++---------- 2 files changed, 37 insertions(+), 44 deletions(-) diff --git a/web/src/main/frontend/components/sidebar.cljs b/web/src/main/frontend/components/sidebar.cljs index df413511b..8251efa1e 100644 --- a/web/src/main/frontend/components/sidebar.cljs +++ b/web/src/main/frontend/components/sidebar.cljs @@ -57,16 +57,13 @@ (files-list file-active?)])) (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)] [:div.max-w-7xl.mx-auto.px-4.sm:px-6.md:px-8 (cond - ;; importing-to-db? - ;; [:div "Parsing files ..."] + importing-to-db? + [:div "Parsing files ..."] (seq latest-journals) (journal/journals latest-journals) diff --git a/web/src/main/frontend/handler.cljs b/web/src/main/frontend/handler.cljs index 29b64cb18..80185a135 100644 --- a/web/src/main/frontend/handler.cljs +++ b/web/src/main/frontend/handler.cljs @@ -72,6 +72,7 @@ (defn load-files [repo-url] + (set-state-kv! :repo/cloning? false) (set-state-kv! :repo/loading-files? true) (util/p-handle (git/list-files repo-url) (fn [files] @@ -84,11 +85,9 @@ (when patterns-content (let [patterns (string/split patterns-content #"\n") files (remove (fn [path] (hidden? path patterns)) files)] - (set-state-kv! :repo/loading-files? false) (db/transact-files! repo-url files))))) (p/promise (do - (set-state-kv! :repo/loading-files? false) (db/transact-files! repo-url files))))))))) @@ -110,36 +109,35 @@ (defn- set-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 [repo-url token] (when (and (nil? (:git/error @state/state)) (nil? (:git/status @state/state))) (let [remote-changed? (atom false) latest-commit (:git/latest-commit @state/state)] - (-> - (util/p-handle - (git/fetch repo-url token) - (fn [result] - (let [{:keys [fetchHead]} (bean/->clj result)] - (when (or - (nil? latest-commit) - (and latest-commit (not= fetchHead latest-commit))) - (reset! remote-changed? true)) - (set-latest-commit! fetchHead) - (git/merge repo-url)))) - (util/p-handle - (fn [merge-result] - (prn {:merge-result merge-result - :remote-changed? @remote-changed?}) - (when @remote-changed? - (-> (load-files repo-url) - (p/then - (fn [] - (load-repo-to-db! repo-url))))))))))) + (p/let [result (git/fetch repo-url token) + {:keys [fetchHead]} (bean/->clj result) + merge-result (do + (when (or + (nil? latest-commit) + (and latest-commit (not= fetchHead latest-commit))) + (reset! remote-changed? true)) + (set-latest-commit! fetchHead) + (git/merge repo-url)) + _ (prn {:merge-result merge-result}) + files (when @remote-changed? + (load-files repo-url)) + load-repo (when @remote-changed? + (load-repo-to-db! repo-url))] + (when (or @remote-changed? + (empty? (:latest-journals @state/state))) + (set-latest-journals!)))))) (defn periodically-pull [repo-url] @@ -189,13 +187,14 @@ (set-state-kv! :repo/cloning? true) (git/clone repo token)) (fn [] - (set-state-kv! :repo/cloning? false) (db/mark-repo-as-cloned repo) (db/set-current-repo! repo) ;; load contents (load-files repo)) (fn [e] (set-state-kv! :repo/cloning? false) + (set-git-status! :clone-failed) + (set-git-error! e) (prn "Clone failed, reason: " e))))) (defn new-notification @@ -329,6 +328,7 @@ (defn load-repo-to-db! [repo-url] + (set-state-kv! :repo/loading-files? false) (set-state-kv! :repo/importing-to-db? true) (load-all-contents! repo-url @@ -379,9 +379,6 @@ (apply str)))) ;; journals -(defn set-latest-journals! - [] - (set-state-kv! :latest-journals (db/get-latest-journals {}))) (defn create-month-journal-if-not-exists [repo-url] @@ -400,18 +397,10 @@ (fn [file-exists?] (when-not file-exists? (prn "create a month journal") - (git-add-commit repo-url path "create a month journal" default-content) - (set-latest-journals!))) + (git-add-commit repo-url path "create a month journal" default-content))) (fn [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! [route] (swap! state/state assoc :route-match route)) @@ -454,6 +443,13 @@ (periodically-pull 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! [content journal] (swap! state/state assoc