Merge branch 'feat/db' into feat/capacitor-new

This commit is contained in:
charlie
2025-04-23 09:29:12 +08:00
13 changed files with 72 additions and 38 deletions

View File

@@ -5,7 +5,7 @@
:sha "5d672bf84ed944414b9f61eeb83808ead7be9127"}
datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
:sha "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"}
:sha "4b1f15f05a6b4a718a62c247956206480e361ea6"}
datascript-transit/datascript-transit {:mvn/version "0.3.0"}
borkdude/rewrite-edn {:mvn/version "0.4.7"}

2
deps/db/deps.edn vendored
View File

@@ -1,7 +1,7 @@
{:deps
;; These deps are kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
{datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
:sha "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"}
:sha "4b1f15f05a6b4a718a62c247956206480e361ea6"}
datascript-transit/datascript-transit {:mvn/version "0.3.0"
:exclusions [datascript/datascript]}
cljs-bean/cljs-bean {:mvn/version "1.5.0"}

View File

@@ -285,14 +285,14 @@
(defn get-recent-updated-pages
[db]
(->> (d/datoms db :avet :block/updated-at)
vec
rseq
(keep (fn [datom]
(let [e (d/entity db (:e datom))]
(when (and (common-entity-util/page? e) (not (entity-util/hidden? e)))
e))))
(take 30)))
(some->>
(d/datoms db :avet :block/updated-at)
rseq
(keep (fn [datom]
(let [e (d/entity db (:e datom))]
(when (and (common-entity-util/page? e) (not (entity-util/hidden? e)))
e))))
(take 30)))
(defn get-initial-data
"Returns current database schema and initial data.

View File

@@ -110,7 +110,7 @@
(def private-tags
"Built-in classes that are private and should not be used by a user directly.
These used to be in block/type"
(set/union internal-tags
(set/union (disj internal-tags :logseq.class/Root)
#{:logseq.class/Journal :logseq.class/Whiteboard}))
(def hidden-tags

View File

@@ -37,7 +37,7 @@
(map (juxt :major :minor)
[(parse-schema-version x) (parse-schema-version y)])))
(def version (parse-schema-version "64.5"))
(def version (parse-schema-version "64.6"))
(defn major-version
"Return a number.

View File

@@ -1,7 +1,7 @@
{:deps
;; External deps should be kept in sync with https://github.com/logseq/nbb-logseq/blob/main/bb.edn
{datascript/datascript {:git/url "https://github.com/logseq/datascript" ;; fork
:sha "3a41bbcdbe66b328bff36d9efd7548bad47f55b6"}
:sha "4b1f15f05a6b4a718a62c247956206480e361ea6"}
logseq/db {:local/root "../db"}
logseq/graph-parser {:local/root "../db"}
com.cognitect/transit-cljs {:mvn/version "0.8.280"}

View File

@@ -2365,7 +2365,7 @@
query (:logseq.property/query block)
advanced-query? (and query? (= :code (:logseq.property.node/display-type query)))
show-query? (and *show-query? @*show-query?)]
[:div
[:div.w-full
{:class (if (and query? blank?)
"inline-flex"
"inline")

View File

@@ -103,24 +103,22 @@
[:div
[:a.font-medium {:on-click #(export/export-repo-as-zip! current-repo)}
(t :export-zip)]])
(when db-based?
[:div
[:a.font-medium {:on-click #(db-export-handler/export-repo-as-db-edn! current-repo)}
(t :export-db-edn)]])
(when db-based?
(when-not (mobile-util/native-platform?)
[:div
[:a.font-medium {:on-click #(export/export-repo-as-debug-transit! current-repo)}
"Export debug transit file"]
[:p.text-sm.opacity-70 "Any sensitive data will be removed in the exported transit file, you can send it to us for debugging."]])
[:a.font-medium {:on-click #(export-text/export-repo-as-markdown! current-repo)}
(t :export-markdown)]])
(when (util/electron?)
[:div
[:a.font-medium {:on-click #(export/download-repo-as-html! current-repo)}
(t :export-public-pages)]])
(when-not (or (mobile-util/native-platform?) db-based?)
[:div
[:a.font-medium {:on-click #(export-text/export-repo-as-markdown! current-repo)}
(t :export-markdown)]])
(when-not (or (mobile-util/native-platform?) db-based?)
[:div
[:a.font-medium {:on-click #(export-opml/export-repo-as-opml! current-repo)}
@@ -129,6 +127,11 @@
[:div
[:a.font-medium {:on-click #(export/export-repo-as-roam-json! current-repo)}
(t :export-roam-json)]])
(when db-based?
[:div
[:a.font-medium {:on-click #(export/export-repo-as-debug-transit! current-repo)}
"Export debug transit file"]
[:p.text-sm.opacity-70.mb-0 "Any sensitive data will be removed in the exported transit file, you can send it to us for debugging."]])
(when (and db-based? util/web-platform? (utils/nfsSupported))
[:div

View File

@@ -195,12 +195,13 @@
(state/<invoke-db-worker :thread-api/export-get-debug-datoms repo))
(defn <get-all-page->content
[repo]
(state/<invoke-db-worker :thread-api/export-get-all-page->content repo))
[repo options]
(state/<invoke-db-worker :thread-api/export-get-all-page->content repo options))
(defn <get-file-contents
[repo suffix]
(p/let [page->content (<get-all-page->content repo)]
(p/let [page->content (<get-all-page->content repo
{:export-bullet-indentation (state/get-export-bullet-indentation)})]
(clojure.core/map (fn [[page-title content]]
{:path (str page-title "." suffix)
:content content

View File

@@ -1,6 +1,5 @@
(ns frontend.handler.export.text
"export blocks/pages as text"
(:refer-clojure :exclude [map filter mapcat concat remove newline])
(:require [clojure.string :as string]
[frontend.config :as config]
[frontend.db :as db]
@@ -545,9 +544,9 @@
(defn export-repo-as-markdown!
"TODO: indent-style and remove-options"
[repo]
(p/let [files (util/profile :get-file-content (common/<get-file-contents repo "md"))]
(when (seq files)
(let [files (export-files-as-markdown files nil)
(p/let [files* (util/profile :get-file-content (common/<get-file-contents repo "md"))]
(when (seq files*)
(let [files (export-files-as-markdown files* nil)
repo' (if (config/db-based-graph? repo)
(string/replace repo config/db-version-prefix "")
(path/basename repo))

View File

@@ -661,6 +661,29 @@
[:db/add (:e view-datom) :logseq.property.view/group-by-property block-page-prop-id])
list-views)))
(defn- cardinality-one-multiple-values
[conn _search-db]
(let [db @conn
attrs (keep (fn [[k v]]
(when (and (keyword? k)
(not= :db.cardinality/many (:db/cardinality v))
(not= :db.cardinality/many (:db/cardinality (d/entity db k)))
(or (get db-schema/schema k)
(ldb/property? (d/entity db k))))
k)) (:schema db))
block-ids (map :e (d/datoms db :avet :block/uuid))]
(->>
(mapcat
(fn [id]
(mapcat (fn [attr]
(let [datoms (d/datoms db :eavt id attr)]
(when (> (count datoms) 1)
(map (fn [datom]
[:db/retract (:e datom) (:a datom) (:v datom)])
(butlast datoms))))) attrs))
block-ids)
(remove nil?))))
(def ^:large-vars/cleanup-todo schema-version->updates
"A vec of tuples defining datascript migrations. Each tuple consists of the
schema version integer and a migration map. A migration map can have keys of :properties, :classes
@@ -769,7 +792,8 @@
["64.3" {:properties [:logseq.property/used-template :logseq.property/template-applied-to]
:classes [:logseq.class/Template]}]
["64.4" {:properties [:logseq.property/created-by-ref]}]
["64.5" {:fix add-group-by-property-for-list-views}]])
["64.5" {:fix add-group-by-property-for-list-views}]
["64.6" {:fix cardinality-one-multiple-values}]])
(let [[major minor] (last (sort (map (comp (juxt :major :minor) db-schema/parse-schema-version first)
schema-version->updates)))

View File

@@ -731,9 +731,9 @@
(worker-export/get-all-pages repo @conn)))
(def-thread-api :thread-api/export-get-all-page->content
[repo]
[repo options]
(when-let [conn (worker-state/get-datascript-conn repo)]
(worker-export/get-all-page->content repo @conn)))
(worker-export/get-all-page->content repo @conn options)))
(def-thread-api :thread-api/undo
[repo _page-block-uuid-str]

View File

@@ -6,7 +6,8 @@
[logseq.db :as ldb]
[logseq.db.sqlite.util :as sqlite-util]
[logseq.graph-parser.property :as gp-property]
[logseq.outliner.tree :as otree]))
[logseq.outliner.tree :as otree]
[logseq.db.sqlite.create-graph :as sqlite-create-graph]))
(defn- safe-keywordize
[block]
@@ -45,12 +46,18 @@
(assoc page' :block/children children))))))
(defn get-all-page->content
[repo db]
(->> (d/datoms db :avet :block/name)
(map (fn [d]
(let [e (d/entity db (:e d))]
[repo db options]
(let [filter-fn (if (ldb/db-based-graph? db)
(fn [ent]
(or (not (:logseq.property/built-in? ent))
(contains? sqlite-create-graph/built-in-pages-names (:block/title ent))))
(constantly true))]
(->> (d/datoms db :avet :block/name)
(map #(d/entity db (:e %)))
(filter filter-fn)
(map (fn [e]
[(:block/title e)
(common-file/block->content repo db (:block/uuid e) {} {})])))))
(common-file/block->content repo db (:block/uuid e) {} options)])))))
(defn get-debug-datoms
[conn ^Object db]