export.cljs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. (ns frontend.worker.export
  2. "Export data"
  3. (:require [datascript.core :as d]
  4. [frontend.common.file.core :as common-file]
  5. [logseq.db :as ldb]
  6. [logseq.graph-parser.property :as gp-property]
  7. [logseq.outliner.tree :as otree]
  8. [cljs-bean.core :as bean]
  9. [logseq.db.sqlite.util :as sqlite-util]))
  10. (defn- safe-keywordize
  11. [block]
  12. (update block :block/properties
  13. (fn [properties]
  14. (when (seq properties)
  15. (->> (filter (fn [[k _v]]
  16. (gp-property/valid-property-name? (str k))) properties)
  17. (into {}))))))
  18. (defn get-all-pages
  19. "Get all pages and their children blocks."
  20. [repo db]
  21. (->> (d/q '[:find (pull ?b [*])
  22. :in $
  23. :where
  24. [?b :block/title]
  25. [?b :block/name]] db)
  26. (map (fn [[page]]
  27. (let [whiteboard? (ldb/whiteboard? page)
  28. blocks (ldb/get-page-blocks db (:db/id page))
  29. blocks' (if whiteboard?
  30. blocks
  31. (map (fn [b]
  32. (let [b' (if (seq (:block/properties b))
  33. (update b :block/title
  34. (fn [content]
  35. (gp-property/remove-properties (:block/format b) content)))
  36. b)]
  37. (safe-keywordize b'))) blocks))
  38. children (if whiteboard?
  39. blocks'
  40. (otree/blocks->vec-tree repo db blocks' (:db/id page)))
  41. page' (safe-keywordize page)]
  42. (assoc page' :block/children children))))))
  43. (defn get-all-page->content
  44. [repo db]
  45. (->> (d/datoms db :avet :block/name)
  46. (map (fn [d]
  47. (let [e (d/entity db (:e d))]
  48. [(:block/title e)
  49. (common-file/block->content repo db (:block/uuid e) {} {})])))))
  50. (defn get-debug-datoms
  51. [conn ^Object db]
  52. (some->> (.exec db #js {:sql "select content from kvs"
  53. :rowMode "array"})
  54. bean/->clj
  55. (mapcat (fn [result]
  56. (let [result (sqlite-util/transit-read (first result))]
  57. (when (map? result)
  58. (:keys result)))))
  59. (map (fn [[e a v t]]
  60. (if (and (contains? #{:block/title :block/name} a)
  61. (let [entity (d/entity @conn e)]
  62. (and (not (:db/ident entity))
  63. (not (ldb/journal? entity)))))
  64. (d/datom e a (str "debug " e) t)
  65. (d/datom e a v t))))))