enhance(plugin): improve route handling and UI component structure

This commit is contained in:
charlie
2025-11-24 11:31:43 +08:00
parent 5153b0ba83
commit 465392599a
4 changed files with 60 additions and 56 deletions

View File

@@ -71,8 +71,8 @@
[theme]
(when theme
(cond-> theme
(util/electron?)
(update :url #(some-> % (string/replace-first "assets://" "file://"))))))
(util/electron?)
(update :url #(some-> % (string/replace-first "assets://" "file://"))))))
(defn load-plugin-preferences
[]
@@ -108,7 +108,7 @@
(if-let [res (and res (bean/->clj res))]
(let [pkgs (:packages res)
pkgs (if (util/electron?) pkgs
(some->> pkgs (filterv #(or (true? (:web %)) (not (true? (:effect %)))))))]
(some->> pkgs (filterv #(or (true? (:web %)) (not (true? (:effect %)))))))]
(state/set-state! :plugin/marketplace-pkgs pkgs)
(resolve pkgs))
(reject nil)))]
@@ -131,8 +131,8 @@
:plugin/marketplace-stats
(into {} (map (fn [[k stat]]
[k (assoc stat
:total_downloads
(reduce (fn [a b] (+ a (get b 2))) 0 (:releases stat)))])
:total_downloads
(reduce (fn [a b] (+ a (get b 2))) 0 (:releases stat)))])
res)))
(resolve nil))
(reject nil)))]
@@ -153,7 +153,7 @@
(p/then (fn [manifests]
(let [mft (some #(when (= (:id %) id) %) manifests)
opts (merge (dissoc pkg :logger) mft)]
;;TODO: (throw (js/Error. [:not-found-in-marketplace id]))
;;TODO: (throw (js/Error. [:not-found-in-marketplace id]))
(if (util/electron?)
(ipc/ipc :updateMarketPlugin opts)
(plugin-common-handler/async-install-or-update-for-web! opts)))
@@ -229,7 +229,7 @@
(p/then
(.reload pl)
#(do
;;(if theme (select-a-plugin-theme id))
;;(if theme (select-a-plugin-theme id))
(when (not (util/electron?))
(set! (.-version (.-options pl)) (:version web-pkg))
(set! (.-webPkg (.-options pl)) (bean/->js web-pkg))
@@ -293,8 +293,8 @@
(defn- normalize-plugin-metadata
[metadata]
(cond-> metadata
(not (string? (:author metadata)))
(assoc :author (or (get-in metadata [:author :name]) ""))))
(not (string? (:author metadata)))
(assoc :author (or (get-in metadata [:author :name]) ""))))
(defn register-plugin
[plugin-metadata]
@@ -441,13 +441,19 @@
([type *providers] (create-local-renderer-getter type *providers false))
([type *providers many?]
(fn [key]
(when-let [key (and (seq @*providers) key (keyword key))]
(when-let [rs (->> @*providers
(map (fn [pid] (state/get-plugin-resource pid type key)))
(remove nil?)
(flatten)
(seq))]
(if many? rs (first rs)))))))
(when (seq @*providers)
(if key
(when-let [rs (->> @*providers
(map (fn [pid] (state/get-plugin-resource pid type key)))
(remove nil?)
(flatten)
(seq))]
(if many? rs (first rs)))
(->> @*providers
(mapcat (fn [pid]
(some-> (state/get-plugin-resources-with-type pid type)
(vals))))
(seq)))))))
(defonce *fenced-code-providers (atom #{}))
(def register-fenced-code-renderer
@@ -469,11 +475,13 @@
(create-local-renderer-getter
:extensions-enhancers *extensions-enhancer-providers true))
(def *route-renderer-providers (atom #{}))
(defonce *route-renderer-providers (atom #{}))
(def register-route-renderer
;; [pid key payload]
(create-local-renderer-register
:route-renderers *route-renderer-providers))
(def get-route-renderers
;; [key] optional
(create-local-renderer-getter
:route-renderers *route-renderer-providers true))
@@ -496,9 +504,9 @@
(defn update-plugin-settings-state
[id settings]
(state/set-state! [:plugin/installed-plugins id :settings]
;; TODO: force settings related ui reactive
;; Sometimes toggle to `disable` not working
;; But related-option data updated?
;; TODO: force settings related ui reactive
;; Sometimes toggle to `disable` not working
;; But related-option data updated?
(assoc settings :disabled (boolean (:disabled settings)))))
(defn open-settings-file-in-default-app!
@@ -813,8 +821,8 @@
:theme theme?
:web-pkg (cond-> package
(not github?)
(assoc :installedFromUserWebUrl url))}}))
(not github?)
(assoc :installedFromUserWebUrl url))}}))
url)))
;; components
@@ -896,8 +904,8 @@
(.on "theme-selected" (fn [^js theme]
(let [theme (bean/->clj theme)
theme (assets-theme-to-file theme)
url (:url theme)
mode (or (:mode theme) (state/sub :ui/theme))]
url (:url theme)
mode (or (:mode theme) (state/sub :ui/theme))]
(when mode
(state/set-custom-theme! mode theme)
(state/set-theme-mode! mode))
@@ -909,7 +917,7 @@
custom-theme (dissoc themes :mode)
mode (:mode themes)]
(state/set-custom-theme! {:light (if (nil? (:light custom-theme)) {:mode "light"} (:light custom-theme))
:dark (if (nil? (:dark custom-theme)) {:mode "dark"} (:dark custom-theme))})
:dark (if (nil? (:dark custom-theme)) {:mode "dark"} (:dark custom-theme))})
(state/set-theme-mode! mode))))
(.on "settings-changed" (fn [id ^js settings]
@@ -926,9 +934,9 @@
(when-let [end (and (some-> v (.-o) (.-disabled) (not))
(.-e v))]
(when (and (number? end)
;; valid end time
;; valid end time
(> end 0)
;; greater than 6s
;; greater than 6s
(> (- end (.-s v)) 6000))
v))))
((fn [perfs]
@@ -947,9 +955,9 @@
(p/then
(fn [plugins-async]
;; true indicate for preboot finished
;; true indicate for preboot finished
(state/set-state! :plugin/indicator-text true)
;; wait for the plugin register async messages
;; wait for the plugin register async messages
(js/setTimeout
(fn []
(some-> (seq plugins-async)
@@ -969,8 +977,8 @@
(init-plugins!)))
(comment
{:pending (count (:plugin/updates-pending @state/state))
:auto-checking? (boolean (:plugin/updates-auto-checking? @state/state))
:coming (count (:plugin/updates-coming @state/state))
:installing (:plugin/installing @state/state)
:downloading? (boolean (:plugin/updates-downloading? @state/state))})
{:pending (count (:plugin/updates-pending @state/state))
:auto-checking? (boolean (:plugin/updates-auto-checking? @state/state))
:coming (count (:plugin/updates-coming @state/state))
:installing (:plugin/installing @state/state)
:downloading? (boolean (:plugin/updates-downloading? @state/state))})