enhance: shortcut install process

pull/2158/head
Weihua Lu 2021-06-10 17:26:09 +08:00 committed by Tienson Qin
parent b2b71b3b34
commit 362e65671a
6 changed files with 44 additions and 31 deletions

View File

@ -11,6 +11,7 @@
[frontend.handler.export :as export-handler]
[frontend.handler.web.nfs :as nfs-handler]
[frontend.handler.page :as page-handler]
[frontend.modules.shortcut.core :as shortcut]
[frontend.util :as util]
[frontend.config :as config]
[reitit.frontend.easy :as rfe]
@ -84,6 +85,10 @@
"Unlink"]]]))]]
(widgets/add-graph)))))
(defn refresh-cb []
(repo-handler/create-today-journal!)
(shortcut/refresh!))
(rum/defc sync-status < rum/reactive
{:did-mount (fn [state]
(js/setTimeout common-handler/check-changed-files-status 1000)
@ -96,8 +101,7 @@
(let [syncing? (state/sub :graph/syncing?)]
[:div.ml-3.mr-1.mt-1.opacity-30.refresh.hover:opacity-100 {:class (if syncing? "loader" "initial")}
[:a
{:on-click #(nfs-handler/refresh! repo
repo-handler/create-today-journal!)
{:on-click #(nfs-handler/refresh! repo refresh-cb)
:title (str "Import files from the local directory: " (config/get-local-dir repo) ".\nVersion: "
version/version)}
svg/refresh]])
@ -217,6 +221,7 @@
(state/set-current-repo! url)
;; load config
(common-handler/reset-config! url nil)
(shortcut/refresh!)
(when-not (= :draw (state/get-current-route))
(route-handler/redirect-to-home!))
(when on-click

View File

@ -84,6 +84,10 @@
(ui-handler/add-style-if-exists!))))
(p/then
(fn []
;; install after config is restored
(shortcut/refresh!)
(cond
(and (not logged?)
(not (seq (db/get-files config/local-repo)))
@ -190,7 +194,6 @@
(reset! db/*sync-search-indice-f search/sync-search-indice!)
(db/run-batch-txs!)
(file-handler/run-writes-chan!)
(shortcut/install-shortcuts!)
(when (util/electron?)
(el/listen!))))

View File

@ -13,6 +13,7 @@
[frontend.handler.web.nfs :as web-nfs]
[frontend.handler.notification :as notification]
[frontend.handler.config :as config-handler]
[frontend.modules.shortcut.core :as shortcut]
[frontend.handler.ui :as ui-handler]
[frontend.modules.outliner.file :as outliner-file]
[frontend.modules.outliner.core :as outliner-core]
@ -379,7 +380,8 @@
[]
(web-nfs/ls-dir-files-with-handler!
(fn []
(init-commands!))))
(init-commands!)
(shortcut/refresh!))))
;; TODO: add use :file/last-modified-at
(defn get-pages-with-modified-at

View File

@ -35,11 +35,11 @@
(.setAlwaysPreventDefault handler prevent-default?)
;; register shortcuts
;; TODO add try catch for register conflicts
(doseq [[id _] shortcut-map]
;; (log/info :shortcut/install-shortcut {:id id :shortcut (dh/shortcut-binding id)})
(doseq [k (dh/shortcut-binding id)]
(try
(log/debug :shortcut/register-shortcut {:id id :binding k})
(.registerShortcut handler (util/keyname id) k)
(catch js/Object e
(log/error :shortcut/register-shortcut {:id id
@ -64,19 +64,19 @@
install-id)))
(defn install-shortcuts!
(defn- install-shortcuts!
[]
(install-shortcut! :shortcut.handler/misc {:skip-installed? true})
(->> [:shortcut.handler/editor-global
(->> [:shortcut.handler/misc
:shortcut.handler/editor-global
:shortcut.handler/global-non-editing-only
:shortcut.handler/global-prevent-default]
(map #(install-shortcut! % {}))
doall))
(defn uninstall-shortcut! [install-id]
(let [handler
(-> (get @*installed install-id)
:handler)]
(defn- uninstall-shortcut! [install-id]
(when-let
[handler (-> (get @*installed install-id)
:handler)]
(.dispose ^js handler)
(swap! *installed dissoc install-id)))
@ -109,11 +109,13 @@
(dissoc state :shortcut-key))})
(defn unlisten-all []
(doseq [{:keys [handler]} (vals @*installed)]
(doseq [{:keys [handler group]} (vals @*installed)
:when (not= group :shortcut.handler/misc)]
(.removeAllListeners handler)))
(defn listen-all []
(doseq [{:keys [handler dispatch-fn]} (vals @*installed)]
(doseq [{:keys [handler group dispatch-fn]} (vals @*installed)
:when (not= group :shortcut.handler/misc)]
(events/listen handler EventType/SHORTCUT_TRIGGERED dispatch-fn)))
(defn disable-all-shortcuts []
@ -126,3 +128,11 @@
(fn [state]
(listen-all)
state)})
(defn refresh!
"Always use this function to refresh shortcuts"
[]
(log/info :shortcut/refresh @*installed)
(doseq [id (keys @*installed)]
(uninstall-shortcut! id))
(install-shortcuts!))

View File

@ -4,11 +4,11 @@
[frontend.state :as state]
[frontend.util :as util]
[lambdaisland.glogi :as log]))
(defonce binding-map
(defonce default-binding
(->> (vals config/default-config)
(apply merge)
(into {})
(map (fn [[k {:keys [binding]}]]
{k (or (state/get-shortcut k) binding)}))
{k binding}))
(into {})))
(defn- mod-key [shortcut]
@ -17,7 +17,8 @@
(defn shortcut-binding
[id]
(let [shortcut (get binding-map id)]
(let [shortcut (get (state/shortcuts) id
(get default-binding id))]
(cond
(nil? shortcut)
(log/error :shortcut/binding-not-found {:id id})
@ -36,9 +37,8 @@
(defn binding-by-category [name]
(let [dict (->> (vals config/default-config)
(apply merge)
(map (fn [[k {:keys [i18n]}]]
{k {:binding (get binding-map k)
:i18n i18n}}))
(map (fn [[k _]]
{k {:binding (shortcut-binding k)}}))
(into {}))]
(->> (config/category name)
(mapv (fn [k] [k (k dict)])))))

View File

@ -906,13 +906,8 @@
[repo-url value]
(swap! state assoc-in [:git/status repo-url] value))
(defn get-shortcut
([key]
(get-shortcut (get-current-repo) key))
([repo key]
(or
(get (storage/get (str repo "-shortcuts")) key)
(get-in @state [:config repo :shortcuts key]))))
(defn shortcuts []
(get-in @state [:config (get-current-repo) :shortcuts]))
(defn get-me
[]
@ -1056,9 +1051,7 @@
(defn set-config!
[repo-url value]
(set-state! [:config repo-url] value)
(let [shortcuts (or (:shortcuts value) {})]
(storage/set (str repo-url "-shortcuts") shortcuts)))
(set-state! [:config repo-url] value))
(defn get-git-auto-push?
([]