|
|
@@ -76,61 +76,73 @@
|
|
|
|
|
|
(defn invoke-hooks
|
|
|
[repo conn {:keys [db-before db-after] :as tx-report} context]
|
|
|
- (when-not (:pipeline-replace? (:tx-meta tx-report))
|
|
|
- (let [tx-meta (:tx-meta tx-report)
|
|
|
- {:keys [from-disk? new-graph?]} tx-meta]
|
|
|
- (if (or from-disk? new-graph?)
|
|
|
- {:tx-report tx-report}
|
|
|
- (let [{:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report)
|
|
|
- _ (when (sqlite-util/local-file-based-graph? repo)
|
|
|
- (let [page-ids (distinct (map :db/id pages))]
|
|
|
- (doseq [page-id page-ids]
|
|
|
- (when (d/entity @conn page-id)
|
|
|
- (file/sync-to-file repo page-id tx-meta)))))
|
|
|
- deleted-block-uuids (set (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report)))
|
|
|
- replace-tx (concat
|
|
|
+ (let [tx-meta (:tx-meta tx-report)
|
|
|
+ {:keys [from-disk? new-graph?]} tx-meta
|
|
|
+ now-batch-processing? (:editor/tx-batch-mode? (d/entity db-after :logseq.kv/tx-batch-mode?))]
|
|
|
+ (cond
|
|
|
+ now-batch-processing?
|
|
|
+ (do
|
|
|
+ (batch-tx/conj-batch-txs! (:tx-data tx-report))
|
|
|
+ nil)
|
|
|
+
|
|
|
+ (or from-disk? new-graph?)
|
|
|
+ {:tx-report tx-report}
|
|
|
+
|
|
|
+ :else
|
|
|
+ (let [exiting-batch-mode? (:editor/tx-batch-mode? (d/entity db-before :logseq.kv/tx-batch-mode?))
|
|
|
+ db-before (if exiting-batch-mode?
|
|
|
+ (batch-tx/get-batch-db-before)
|
|
|
+ (:db-before tx-report))
|
|
|
+ tx-data (if exiting-batch-mode?
|
|
|
+ (batch-tx/get-batch-txs)
|
|
|
+ (:tx-data tx-report))
|
|
|
+ tx-report (assoc tx-report
|
|
|
+ :db-before db-before
|
|
|
+ :tx-data tx-data)
|
|
|
+ {:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report)
|
|
|
+ _ (when (sqlite-util/local-file-based-graph? repo)
|
|
|
+ (let [page-ids (distinct (map :db/id pages))]
|
|
|
+ (doseq [page-id page-ids]
|
|
|
+ (when (d/entity @conn page-id)
|
|
|
+ (file/sync-to-file repo page-id tx-meta)))))
|
|
|
+ deleted-block-uuids (set (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report)))
|
|
|
+ replace-tx (concat
|
|
|
;; block path refs
|
|
|
- (set (compute-block-path-refs-tx tx-report blocks))
|
|
|
+ (set (compute-block-path-refs-tx tx-report blocks))
|
|
|
|
|
|
;; delete empty property parent block
|
|
|
- (when (seq deleted-block-uuids)
|
|
|
- (delete-property-parent-block-if-empty tx-report deleted-block-uuids))
|
|
|
+ (when (seq deleted-block-uuids)
|
|
|
+ (delete-property-parent-block-if-empty tx-report deleted-block-uuids))
|
|
|
|
|
|
;; update block/tx-id
|
|
|
- (let [updated-blocks (remove (fn [b] (contains? (set deleted-block-uuids) (:block/uuid b))) blocks)
|
|
|
- tx-id (get-in tx-report [:tempids :db/current-tx])]
|
|
|
- (->>
|
|
|
- (map (fn [b]
|
|
|
- (when-let [db-id (:db/id b)]
|
|
|
- {:db/id db-id
|
|
|
- :block/tx-id tx-id})) updated-blocks)
|
|
|
- (remove nil?))))
|
|
|
- tx-report' (or
|
|
|
- (when (seq replace-tx)
|
|
|
+ (let [updated-blocks (remove (fn [b] (contains? (set deleted-block-uuids) (:block/uuid b)))
|
|
|
+ (concat pages blocks))
|
|
|
+ tx-id (get-in tx-report [:tempids :db/current-tx])]
|
|
|
+ (->>
|
|
|
+ (map (fn [b]
|
|
|
+ (when-let [db-id (:db/id b)]
|
|
|
+ {:db/id db-id
|
|
|
+ :block/tx-id tx-id})) updated-blocks)
|
|
|
+ (remove nil?))))
|
|
|
+ tx-report' (or
|
|
|
+ (when (seq replace-tx)
|
|
|
;; TODO: remove this since transact! is really slow
|
|
|
- (ldb/transact! conn replace-tx {:replace? true
|
|
|
- :pipeline-replace? true}))
|
|
|
- (do
|
|
|
- (d/store @conn)
|
|
|
- tx-report))
|
|
|
- fix-tx-data (validate-and-fix-db! repo conn tx-report context)
|
|
|
- before-batch-mode? (:editor/tx-batch-mode? (d/entity db-before :logseq.kv/tx-batch-mode?))
|
|
|
- now-batch-processing? (:editor/tx-batch-mode? (d/entity db-after :logseq.kv/tx-batch-mode?))
|
|
|
- exiting-batch-mode? (and before-batch-mode? (not now-batch-processing?))
|
|
|
- full-tx-data (concat (:tx-data tx-report)
|
|
|
+ (ldb/transact! conn replace-tx {:replace? true
|
|
|
+ :pipeline-replace? true}))
|
|
|
+ (do
|
|
|
+ (d/store @conn)
|
|
|
+ tx-report))
|
|
|
+ fix-tx-data (validate-and-fix-db! repo conn tx-report context)
|
|
|
+ full-tx-data (if exiting-batch-mode?
|
|
|
+ (:tx-data tx-report)
|
|
|
+ (concat (:tx-data tx-report)
|
|
|
fix-tx-data
|
|
|
- (:tx-data tx-report')
|
|
|
- (when exiting-batch-mode?
|
|
|
- (batch-tx/get-batch-txs)))
|
|
|
- final-tx-report (assoc tx-report'
|
|
|
- :tx-data full-tx-data
|
|
|
- :db-before (:db-before tx-report))
|
|
|
- affected-query-keys (when-not (or (:importing? context) now-batch-processing?)
|
|
|
- (worker-react/get-affected-queries-keys final-tx-report))]
|
|
|
- (when now-batch-processing?
|
|
|
- (batch-tx/conj-batch-txs! full-tx-data))
|
|
|
- {:tx-report final-tx-report
|
|
|
- :affected-keys affected-query-keys
|
|
|
- :deleted-block-uuids deleted-block-uuids
|
|
|
- :pages pages
|
|
|
- :blocks blocks})))))
|
|
|
+ (:tx-data tx-report')))
|
|
|
+ final-tx-report (assoc tx-report' :tx-data full-tx-data)
|
|
|
+ affected-query-keys (when-not (:importing? context)
|
|
|
+ (worker-react/get-affected-queries-keys final-tx-report))]
|
|
|
+ {:tx-report final-tx-report
|
|
|
+ :affected-keys affected-query-keys
|
|
|
+ :deleted-block-uuids deleted-block-uuids
|
|
|
+ :pages pages
|
|
|
+ :blocks blocks}))))
|