Files
logseq/src/main/frontend/search/plugin.cljs
Tienson Qin b134954e2c Move all search related impl to worker
This commit also introduced a new ns `frontend.db.async` for
async queries.
2023-12-25 17:05:44 +08:00

45 lines
1.7 KiB
Clojure

(ns frontend.search.plugin
"Plugin service implementation of search protocol"
(:require [frontend.state :as state]
[frontend.handler.plugin :as plugin-handler]
[frontend.search.protocol :as protocol]
[cljs-bean.core :as bean]))
(defn call-service!
([service event payload] (call-service! service event payload false))
([service event payload reply?]
(when-let [^js pl (plugin-handler/get-plugin-inst (:pid service))]
(let [{:keys [pid name]} service
hookEvent (str "service:" event ":" name)]
(.call (.-caller pl) hookEvent (bean/->js (merge {:graph (state/get-current-repo)} payload)))
(when reply?
(.once (.-caller pl) (str hookEvent ":reply")
(fn [^js e]
(state/update-plugin-search-engine pid name #(assoc % :result (bean/->clj e))))))))))
(deftype Plugin [service repo]
protocol/Engine
(query [_this q opts]
(call-service! service "search:query" (merge {:q q} opts) true))
(rebuild-blocks-indice! [_this]
;; Not pushing all data for performance temporarily
;;(let [blocks (search-db/build-blocks-indice repo)])
(call-service! service "search:rebuildBlocksIndice" {}))
(rebuild-pages-indice! [_this]
(call-service! service "search:rebuildPagesIndice" {}))
(transact-blocks! [_this data]
(let [{:keys [blocks-to-remove-set blocks-to-add]} data]
(call-service! service "search:transactBlocks"
{:data {:added blocks-to-add
:removed blocks-to-remove-set}})))
(truncate-blocks! [_this]
(call-service! service "search:truncateBlocks" {}))
(remove-db! [_this]
(call-service! service "search:removeDb" {})))