1
0

pipeline.cljs 4.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. (ns frontend.modules.outliner.pipeline
  2. (:require [clojure.string :as string]
  3. [datascript.core :as d]
  4. [frontend.config :as config]
  5. [frontend.db :as db]
  6. [frontend.db.react :as react]
  7. [frontend.fs :as fs]
  8. [frontend.handler.ui :as ui-handler]
  9. [frontend.state :as state]
  10. [frontend.util :as util]
  11. [logseq.common.path :as path]))
  12. (defn- update-editing-block-title-if-changed!
  13. [tx-data]
  14. (when-let [editing-block (state/get-edit-block)]
  15. (let [editing-title (state/get-edit-content)]
  16. (when-let [new-title (some (fn [d] (when (and (= (:e d) (:db/id editing-block))
  17. (= (:a d) :block/title)
  18. (not= (string/trim editing-title) (string/trim (:v d)))
  19. (:added d))
  20. (:v d))) tx-data)]
  21. (state/set-edit-content! new-title)))))
  22. (defn invoke-hooks
  23. [{:keys [_request-id repo tx-meta tx-data deleted-block-uuids deleted-assets affected-keys blocks]}]
  24. ;; (prn :debug
  25. ;; :request-id request-id
  26. ;; :tx-meta tx-meta
  27. ;; :tx-data tx-data)
  28. (let [{:keys [from-disk? new-graph? initial-pages? end?]} tx-meta
  29. tx-report {:tx-meta tx-meta
  30. :tx-data tx-data}]
  31. (when (= repo (state/get-current-repo))
  32. (when (seq deleted-block-uuids)
  33. (let [ids (map (fn [id] (:db/id (db/entity [:block/uuid id]))) deleted-block-uuids)]
  34. (state/sidebar-remove-deleted-block! ids)))
  35. (let [conn (db/get-db repo false)]
  36. (cond
  37. initial-pages?
  38. (do
  39. (util/profile "transact initial-pages" (d/transact! conn tx-data tx-meta))
  40. (when end?
  41. (state/pub-event! [:init/commands])
  42. (ui-handler/re-render-root!)))
  43. (or from-disk? new-graph?)
  44. (do
  45. (d/transact! conn tx-data tx-meta)
  46. (ui-handler/re-render-root!))
  47. :else
  48. (do
  49. (state/set-state! :db/latest-transacted-entity-uuids
  50. {:updated-ids (set (map :block/uuid blocks))
  51. :deleted-ids (set deleted-block-uuids)})
  52. (let [tx-data' (concat
  53. (map
  54. (fn [id]
  55. [:db/retractEntity [:block/uuid id]])
  56. deleted-block-uuids)
  57. (if (contains? #{:create-property-text-block :insert-blocks} (:outliner-op tx-meta))
  58. (let [update-blocks-fully-loaded (keep (fn [datom] (when (= :block/uuid (:a datom))
  59. {:db/id (:e datom)
  60. :block.temp/fully-loaded? true})) tx-data)]
  61. (concat update-blocks-fully-loaded tx-data))
  62. tx-data))]
  63. (d/transact! conn tx-data' tx-meta))
  64. (update-editing-block-title-if-changed! tx-data)
  65. (when (seq deleted-assets)
  66. (doseq [asset deleted-assets]
  67. (fs/unlink! repo (path/path-join (config/get-current-repo-assets-root) (str (:block/uuid asset) "." (:ext asset))) {})))
  68. (state/set-state! :editor/start-pos nil)
  69. (when-not (:graph/importing @state/state)
  70. (react/refresh! repo affected-keys)
  71. (when (and state/lsp-enabled?
  72. (seq blocks)
  73. (<= (count blocks) 1000))
  74. (state/pub-event! [:plugin/hook-db-tx
  75. {:blocks blocks
  76. :deleted-assets deleted-assets
  77. :deleted-block-uuids deleted-block-uuids
  78. :tx-data (:tx-data tx-report)
  79. :tx-meta (:tx-meta tx-report)}])))))))
  80. (when (= (:outliner-op tx-meta) :delete-page)
  81. (state/pub-event! [:page/deleted repo (:deleted-page tx-meta) (:file-path tx-meta) tx-meta]))
  82. (when (= (:outliner-op tx-meta) :rename-page)
  83. (state/pub-event! [:page/renamed repo (:data tx-meta)]))))