mirror of https://github.com/logseq/logseq
enhance: display a loading button when importing files from the disk
parent
3d80dc2310
commit
d55b381e2e
|
@ -54,13 +54,13 @@
|
|||
(defn- get-files
|
||||
[path]
|
||||
(let [result (->> (map
|
||||
(fn [path]
|
||||
(let [stat (fs/statSync path)]
|
||||
(when-not (.isDirectory stat)
|
||||
{:path (fix-win-path! path)
|
||||
:content (read-file path)
|
||||
:stat stat})))
|
||||
(readdir path))
|
||||
(fn [path]
|
||||
(let [stat (fs/statSync path)]
|
||||
(when-not (.isDirectory stat)
|
||||
{:path (fix-win-path! path)
|
||||
:content (read-file path)
|
||||
:stat stat})))
|
||||
(readdir path))
|
||||
(remove nil?))]
|
||||
(vec (cons {:path (fix-win-path! path)} result))))
|
||||
|
||||
|
@ -69,6 +69,9 @@
|
|||
(let [result (.showOpenDialogSync dialog (bean/->js
|
||||
{:properties ["openDirectory"]}))
|
||||
path (first result)]
|
||||
(.. window -webContents
|
||||
(send "open-dir-confirmed"
|
||||
(bean/->js {:opened? true})))
|
||||
(get-files path)))
|
||||
|
||||
(defmethod handle :getFiles [window [_ path]]
|
||||
|
@ -86,44 +89,45 @@
|
|||
|
||||
(defn watch-dir!
|
||||
[win dir]
|
||||
(let [watcher (.watch watcher dir
|
||||
(clj->js
|
||||
{:ignored (fn [path]
|
||||
(or
|
||||
(some #(string/starts-with? path (str dir "/" %))
|
||||
["." "assets" "node_modules"])
|
||||
(some #(string/ends-with? path (str dir "/" %))
|
||||
[".swap" ".crswap" ".tmp"])))
|
||||
:ignoreInitial true
|
||||
:persistent true
|
||||
:awaitWriteFinish true}))]
|
||||
(.on watcher "add"
|
||||
(fn [path]
|
||||
(send-file-watcher! win "add"
|
||||
{:dir (fix-win-path! dir)
|
||||
:path (fix-win-path! path)
|
||||
:content (read-file path)
|
||||
:stat (fs/statSync path)})))
|
||||
(.on watcher "change"
|
||||
(fn [path]
|
||||
(send-file-watcher! win "change"
|
||||
{:dir (fix-win-path! dir)
|
||||
:path (fix-win-path! path)
|
||||
:content (read-file path)
|
||||
:stat (fs/statSync path)})))
|
||||
(.on watcher "unlink"
|
||||
(fn [path]
|
||||
(send-file-watcher! win "unlink"
|
||||
{:dir (fix-win-path! dir)
|
||||
:path (fix-win-path! path)})))
|
||||
(.on watcher "error"
|
||||
(fn [path]
|
||||
(println "Watch error happened: "
|
||||
{:path path})))
|
||||
(when (fs/existsSync dir)
|
||||
(let [watcher (.watch watcher dir
|
||||
(clj->js
|
||||
{:ignored (fn [path]
|
||||
(or
|
||||
(some #(string/starts-with? path (str dir "/" %))
|
||||
["." "assets" "node_modules"])
|
||||
(some #(string/ends-with? path (str dir "/" %))
|
||||
[".swap" ".crswap" ".tmp"])))
|
||||
:ignoreInitial true
|
||||
:persistent true
|
||||
:awaitWriteFinish true}))]
|
||||
(.on watcher "add"
|
||||
(fn [path]
|
||||
(send-file-watcher! win "add"
|
||||
{:dir (fix-win-path! dir)
|
||||
:path (fix-win-path! path)
|
||||
:content (read-file path)
|
||||
:stat (fs/statSync path)})))
|
||||
(.on watcher "change"
|
||||
(fn [path]
|
||||
(send-file-watcher! win "change"
|
||||
{:dir (fix-win-path! dir)
|
||||
:path (fix-win-path! path)
|
||||
:content (read-file path)
|
||||
:stat (fs/statSync path)})))
|
||||
(.on watcher "unlink"
|
||||
(fn [path]
|
||||
(send-file-watcher! win "unlink"
|
||||
{:dir (fix-win-path! dir)
|
||||
:path (fix-win-path! path)})))
|
||||
(.on watcher "error"
|
||||
(fn [path]
|
||||
(println "Watch error happened: "
|
||||
{:path path})))
|
||||
|
||||
(.on app "quit" #(.close watcher))
|
||||
(.on app "quit" #(.close watcher))
|
||||
|
||||
true))
|
||||
true)))
|
||||
|
||||
(defmethod handle :addDirWatcher [window [_ dir]]
|
||||
(when dir
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
(ns electron.listener
|
||||
(:require [frontend.state :as state]
|
||||
[frontend.handler.route :as route-handler]
|
||||
[cljs-bean.core :as bean]
|
||||
[frontend.fs.watcher-handler :as watcher-handler]))
|
||||
|
||||
(defn listen-to-open-dir!
|
||||
[]
|
||||
(js/window.apis.on "open-dir-confirmed"
|
||||
(fn []
|
||||
(state/set-loading-files! true)
|
||||
(when-not (state/home?)
|
||||
(route-handler/redirect-to-home!)))))
|
||||
|
||||
(defn run-dirs-watcher!
|
||||
[]
|
||||
;; TODO: move "file-watcher" to electron.ipc.channels
|
||||
(js/window.apis.on "file-watcher"
|
||||
(fn [data]
|
||||
(let [{:keys [type payload]} (bean/->clj data)]
|
||||
(watcher-handler/handle-changed! type payload)))))
|
||||
|
||||
(defn listen!
|
||||
[]
|
||||
(listen-to-open-dir!)
|
||||
(run-dirs-watcher!))
|
|
@ -7,7 +7,6 @@
|
|||
[frontend.handler.route :as route-handler]
|
||||
[cljs-time.coerce :as tc]
|
||||
[frontend.config :as config]
|
||||
[cljs-bean.core :as bean]
|
||||
[frontend.db :as db]
|
||||
[frontend.state :as state]
|
||||
[clojure.string :as string]))
|
||||
|
@ -58,11 +57,3 @@
|
|||
:else
|
||||
(log/error :fs/watcher-no-handler {:type type
|
||||
:payload payload})))))
|
||||
|
||||
(defn run-dirs-watcher!
|
||||
[]
|
||||
;; TODO: move "file-watcher" to electron.ipc.channels
|
||||
(js/window.apis.on "file-watcher"
|
||||
(fn [data]
|
||||
(let [{:keys [type payload]} (bean/->clj data)]
|
||||
(handle-changed! type payload)))))
|
||||
|
|
|
@ -23,7 +23,8 @@
|
|||
[goog.object :as gobj]
|
||||
[frontend.idb :as idb]
|
||||
[lambdaisland.glogi :as log]
|
||||
[frontend.handler.common :as common-handler]))
|
||||
[frontend.handler.common :as common-handler]
|
||||
[electron.listener :as el]))
|
||||
|
||||
(defn- watch-for-date!
|
||||
[]
|
||||
|
@ -159,4 +160,4 @@
|
|||
(file-handler/run-writes-chan!)
|
||||
(editor-handler/periodically-save!)
|
||||
(when (util/electron?)
|
||||
(fs-watcher-handler/run-dirs-watcher!))))
|
||||
(el/listen!))))
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
[frontend.handler.common :as common-handler]
|
||||
["/frontend/utils" :as utils]
|
||||
[frontend.handler.repo :as repo-handler]
|
||||
[frontend.handler.route :as route-handler]
|
||||
[frontend.idb :as idb]
|
||||
[frontend.state :as state]
|
||||
[clojure.string :as string]
|
||||
|
@ -108,6 +109,8 @@
|
|||
(when nfs?
|
||||
(swap! path-handles assoc path handle))))
|
||||
_ (state/set-loading-files! true)
|
||||
_ (when-not (state/home?)
|
||||
(route-handler/redirect-to-home!))
|
||||
root-handle (first result)
|
||||
dir-name (if nfs?
|
||||
(gobj/get root-handle "name")
|
||||
|
@ -144,7 +147,6 @@
|
|||
(:file/content file))]
|
||||
(assoc file :file/content content))) markup-files))
|
||||
(p/then (fn [result]
|
||||
_ (state/set-loading-files! false)
|
||||
(let [files (map #(dissoc % :file/file) result)]
|
||||
(repo-handler/start-repo-db-if-not-exists! repo {:db-type :local-native-fs})
|
||||
(repo-handler/load-repo-to-db! repo
|
||||
|
@ -152,13 +154,15 @@
|
|||
:nfs-files files})
|
||||
|
||||
(state/add-repo! {:url repo :nfs? true})
|
||||
(state/set-loading-files! false)
|
||||
(and ok-handler (ok-handler))
|
||||
(when (util/electron?)
|
||||
(fs/watch-dir! dir-name)))))
|
||||
(p/catch (fn [error]
|
||||
(log/error :nfs/load-files-error error)))))
|
||||
(p/catch (fn [error]
|
||||
(when (not= "AbortError" (gobj/get error "name"))
|
||||
(if (contains? #{"AbortError" "Error"} (gobj/get error "name"))
|
||||
(state/set-loading-files! false)
|
||||
(log/error :nfs/open-dir-error error)))))))
|
||||
|
||||
(defn get-local-repo
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
:repo/sync-status {}
|
||||
:repo/changed-files nil
|
||||
:nfs/user-granted? {}
|
||||
:nfs/loading-files? nil
|
||||
:nfs/refreshing? nil
|
||||
;; TODO: how to detect the network reliably?
|
||||
:network/online? true
|
||||
|
@ -113,6 +112,10 @@
|
|||
[]
|
||||
(get-in (get-route-match) [:data :name]))
|
||||
|
||||
(defn home?
|
||||
[]
|
||||
(= :home (get-current-route)))
|
||||
|
||||
(defn get-current-page
|
||||
[]
|
||||
(and
|
||||
|
|
|
@ -237,7 +237,7 @@
|
|||
(if (util/ios?) (.add cl "is-ios"))
|
||||
(if (util/mobile?) (.add cl "is-mobile"))
|
||||
(if (util/safari?) (.add cl "is-safari"))
|
||||
(if (util/electron?)
|
||||
(when (util/electron?)
|
||||
(js/window.apis.on "full-screen" #(js-invoke cl (if (= % "enter") "add" "remove") "is-fullscreen")))))
|
||||
|
||||
(defn inject-dynamic-style-node!
|
||||
|
|
Loading…
Reference in New Issue