|
|
@@ -773,6 +773,46 @@
|
|
|
(when config/lsp-enabled?
|
|
|
(hook-plugin-app (str :after-command-invoked type) nil))))
|
|
|
|
|
|
+(defn load-plugin-from-web-url!
|
|
|
+ [url]
|
|
|
+ (if (not (and (string? url) (string/starts-with? url "http")))
|
|
|
+ (p/rejected (js/Error. "Invalid web url"))
|
|
|
+ (p/let [_ (p/delay 1000)
|
|
|
+ url (string/replace url #"/+$" "")
|
|
|
+ github? (string/includes? url "github.com")
|
|
|
+ github-repo (when github?
|
|
|
+ (some-> (re-find #"github.com/([^/]+/[^/]+)" url) (last)))
|
|
|
+ package-url (if github?
|
|
|
+ (some-> github-repo
|
|
|
+ (plugin-common-handler/get-web-plugin-checker-url!))
|
|
|
+ (str url "/package.json"))
|
|
|
+ ^js res (js/window.fetch package-url)
|
|
|
+ package (if (and (.-ok res)
|
|
|
+ (= (.-status res) 200))
|
|
|
+ (-> (.json res)
|
|
|
+ (p/then bean/->clj))
|
|
|
+ (throw (js/Error. (.text res))))
|
|
|
+ logseq (or (:logseq package)
|
|
|
+ (throw (js/Error. "Illegal logseq package")))]
|
|
|
+ (let [id (if github?
|
|
|
+ (some-> github-repo (string/replace "/" "_"))
|
|
|
+ (or (:id logseq) (:name package)))
|
|
|
+ repo (or github-repo id)
|
|
|
+ theme? (some? (or (:theme logseq) (:themes logseq)))]
|
|
|
+
|
|
|
+ (plugin-common-handler/emit-lsp-updates!
|
|
|
+ {:status :completed
|
|
|
+ :only-check false
|
|
|
+ :payload {:id id
|
|
|
+ :repo repo
|
|
|
+ :dst repo
|
|
|
+ :theme theme?
|
|
|
+ :web-pkg (cond-> package
|
|
|
+
|
|
|
+ (not github?)
|
|
|
+ (assoc :installedFromUserWebUrl url))}}))
|
|
|
+ url)))
|
|
|
+
|
|
|
;; components
|
|
|
(rum/defc lsp-indicator < rum/reactive
|
|
|
[]
|