mirror of
https://github.com/logseq/logseq.git
synced 2026-06-01 19:01:22 +00:00
enhance(plugins): load web plugins asynchronously
This commit is contained in:
@@ -779,11 +779,11 @@
|
||||
(rum/defc lsp-indicator < rum/reactive
|
||||
[]
|
||||
(let [text (state/sub :plugin/indicator-text)]
|
||||
(when-not (= text "END")
|
||||
[:div.flex.align-items.justify-center.h-screen.w-full.preboot-loading
|
||||
[:span.flex.items-center.justify-center.flex-col
|
||||
[:small.scale-250.opacity-70.mb-10.animate-pulse (svg/logo)]
|
||||
[:small.block.text-sm.relative.opacity-50 {:style {:right "-8px"}} text]]])))
|
||||
[:div.flex.align-items.justify-center.h-screen.w-full.preboot-loading
|
||||
[:span.flex.items-center.justify-center.flex-col
|
||||
[:small.scale-250.opacity-50.mb-10.animate-pulse (svg/logo)]
|
||||
[:small.block.text-sm.relative.opacity-50 {:style {:right "-8px" :min-height "24px"}}
|
||||
(str text)]]]))
|
||||
|
||||
(defn ^:large-vars/cleanup-todo init-plugins!
|
||||
[callback]
|
||||
@@ -813,7 +813,9 @@
|
||||
|
||||
(.on "beforeload"
|
||||
(fn [^js pl]
|
||||
(state/set-state! :plugin/indicator-text (util/format "Load plugin: %s..." (.-id pl)))))
|
||||
(let [text (if (util/electron?)
|
||||
(util/format "Load plugin: %s..." (.-id pl)) "Loading")]
|
||||
(state/set-state! :plugin/indicator-text text))))
|
||||
|
||||
(.on "reloaded"
|
||||
(fn [^js pl]
|
||||
@@ -891,14 +893,25 @@
|
||||
(state/pub-event! [:plugin/loader-perf-tip (bean/->clj perf)])))))))))
|
||||
|
||||
default-plugins (get-user-default-plugins)
|
||||
|
||||
_ (.register js/LSPluginCore (bean/->js (if (seq default-plugins) default-plugins [])) true)])
|
||||
[plugins0, plugins-async] (if (and (seq default-plugins)
|
||||
(not (util/electron?)))
|
||||
((juxt (fn [its] (filterv #(:theme %) its))
|
||||
(fn [its] (filterv #(not (:theme %)) its)))
|
||||
default-plugins)
|
||||
[default-plugins])
|
||||
_ (.register js/LSPluginCore (bean/->js (if (seq plugins0) plugins0 [])) true)]
|
||||
plugins-async)
|
||||
|
||||
(p/then
|
||||
(fn []
|
||||
(state/set-state! :plugin/indicator-text "END")
|
||||
(fn [plugins-async]
|
||||
(state/set-state! :plugin/indicator-text nil)
|
||||
;; wait for the plugin register async messages
|
||||
(js/setTimeout #(callback) 64)))
|
||||
(js/setTimeout
|
||||
(fn [] (callback)
|
||||
(some-> (seq plugins-async)
|
||||
(p/delay 16)
|
||||
(p/then #(.register js/LSPluginCore (bean/->js plugins-async) true))))
|
||||
(if (util/electron?) 64 0))))
|
||||
(p/catch
|
||||
(fn [^js e]
|
||||
(log/error :setup-plugin-system-error e)
|
||||
|
||||
Reference in New Issue
Block a user