|
@@ -1,6 +1,5 @@
|
|
|
(ns frontend.db
|
|
|
(:require [datascript.core :as d]
|
|
|
- [frontend.util :as util]
|
|
|
[frontend.date :as date]
|
|
|
[medley.core :as medley]
|
|
|
[datascript.transit :as dt]
|
|
@@ -11,9 +10,7 @@
|
|
|
[clojure.string :as string]
|
|
|
[clojure.set :as set]
|
|
|
[frontend.utf8 :as utf8]
|
|
|
- [cljs-bean.core :as bean]
|
|
|
[frontend.config :as config]
|
|
|
- [goog.object :as gobj]
|
|
|
["localforage" :as localforage]
|
|
|
[promesa.core :as p]
|
|
|
[cljs.reader :as reader]
|
|
@@ -22,17 +19,16 @@
|
|
|
[clojure.walk :as walk]
|
|
|
[frontend.util :as util :refer-macros [profile]]
|
|
|
[frontend.extensions.sci :as sci]
|
|
|
- [goog.array :as garray]
|
|
|
[frontend.db-schema :as db-schema]
|
|
|
[clojure.core.async :as async]))
|
|
|
|
|
|
;; offline db
|
|
|
(def store-name "dbs")
|
|
|
(.config localforage
|
|
|
- (bean/->js
|
|
|
+ #js
|
|
|
{:name "logseq-datascript"
|
|
|
:version 1.0
|
|
|
- :storeName store-name}))
|
|
|
+ :storeName store-name})
|
|
|
|
|
|
(defonce localforage-instance (.createInstance localforage store-name))
|
|
|
|
|
@@ -40,6 +36,7 @@
|
|
|
;; TODO: replace with LRUCache, only keep the latest 20 or 50 items?
|
|
|
(defonce query-state (atom {}))
|
|
|
|
|
|
+; FIXME: Unused?
|
|
|
(defonce async-chan (atom nil))
|
|
|
|
|
|
;; (defn clear-store!
|
|
@@ -111,7 +108,6 @@
|
|
|
|
|
|
;; transit serialization
|
|
|
|
|
|
-
|
|
|
(defn db->string [db]
|
|
|
(dt/write-transit-str db))
|
|
|
|
|
@@ -159,8 +155,8 @@
|
|
|
(swap! query-state assoc k {:query query
|
|
|
:inputs inputs
|
|
|
:result result-atom
|
|
|
- :query-fn query-fn
|
|
|
:transform-fn transform-fn
|
|
|
+ :query-fn query-fn
|
|
|
:inputs-fn inputs-fn})
|
|
|
result-atom)
|
|
|
|
|
@@ -176,16 +172,16 @@
|
|
|
|
|
|
(defn remove-query-component!
|
|
|
[component]
|
|
|
- (let [ks (->> (filter (fn [[_ components]]
|
|
|
- (contains? (set components) component))
|
|
|
- @query-components)
|
|
|
- (map first))]
|
|
|
- (doseq [k ks]
|
|
|
- (swap! query-components update k (fn [components]
|
|
|
- (remove #(= component %) components)))
|
|
|
- (when (zero? (count (get @query-components k))) ; no subscribed components
|
|
|
- (swap! query-components dissoc k)
|
|
|
- (remove-q! k)))))
|
|
|
+ (reset!
|
|
|
+ query-components
|
|
|
+ (->> (for [[k components] @query-components
|
|
|
+ :let [new-components (remove #(= component %) components)]]
|
|
|
+ (if (empty? new-components) ; no subscribed components
|
|
|
+ (do (remove-q! k)
|
|
|
+ nil)
|
|
|
+ [k new-components]))
|
|
|
+ (keep identity)
|
|
|
+ (into {}))))
|
|
|
|
|
|
(defn get-page-blocks-cache-atom
|
|
|
[repo page-id]
|
|
@@ -305,10 +301,9 @@
|
|
|
|
|
|
:else
|
|
|
(case key
|
|
|
- (list :block/change :block/insert)
|
|
|
- (when (seq data)
|
|
|
- (let [blocks data
|
|
|
- pre-block? (:block/pre-block? (first blocks))
|
|
|
+ (:block/change :block/insert)
|
|
|
+ (when-let [blocks (seq data)]
|
|
|
+ (let [pre-block? (:block/pre-block? (first blocks))
|
|
|
current-priority (get-current-priority)
|
|
|
current-marker (get-current-marker)
|
|
|
current-page-id (:db/id (get-current-page))
|
|
@@ -480,7 +475,7 @@
|
|
|
[blocks]
|
|
|
(some->> blocks
|
|
|
(group-by :block/page)
|
|
|
- (sort-by (fn [[p blocks]] (:page/last-modified-at p)) >)))
|
|
|
+ (sort-by (fn [[p _blocks]] (:page/last-modified-at p)) >)))
|
|
|
|
|
|
(defn- with-repo
|
|
|
[repo blocks]
|
|
@@ -557,10 +552,6 @@
|
|
|
(group-by-page result)))
|
|
|
result)))
|
|
|
|
|
|
-;; (defn get-repo-tx-id [repo]
|
|
|
-;; (when-let [db (get-conn repo)]
|
|
|
-;; ))
|
|
|
-
|
|
|
(defn get-tx-id [tx-report]
|
|
|
(get-in tx-report [:tempids :db/current-tx]))
|
|
|
|
|
@@ -694,7 +685,7 @@
|
|
|
:where
|
|
|
[?page :page/tags ?e]
|
|
|
[?e :tag/name ?tag]
|
|
|
- [?tag-page :page/name ?tag]
|
|
|
+ [_ :page/name ?tag]
|
|
|
[?page :page/name ?page-name]]
|
|
|
(get-conn repo)))
|
|
|
|
|
@@ -711,7 +702,7 @@
|
|
|
'[:find ?page-name
|
|
|
:where
|
|
|
[?page :page/original-name ?page-name]]
|
|
|
- (get-conn))
|
|
|
+ (get-conn repo))
|
|
|
(map first)))
|
|
|
|
|
|
(defn get-sync-metadata
|
|
@@ -745,7 +736,6 @@
|
|
|
'[:find ?page-name ?modified-at
|
|
|
:where
|
|
|
[?page :page/original-name ?page-name]
|
|
|
- [(get-else $ ?page :page/journal? false) ?journal]
|
|
|
[(get-else $ ?page :page/last-modified-at 0) ?modified-at]]
|
|
|
(get-conn repo))
|
|
|
(seq)
|
|
@@ -806,7 +796,7 @@
|
|
|
(defn get-files-blocks
|
|
|
[repo-url paths]
|
|
|
(let [paths (set paths)
|
|
|
- pred (fn [db e]
|
|
|
+ pred (fn [_db e]
|
|
|
(contains? paths e))]
|
|
|
(-> (d/q '[:find ?block
|
|
|
:in $ ?pred
|
|
@@ -1573,7 +1563,7 @@
|
|
|
pages)))))
|
|
|
|
|
|
(defn me-tx
|
|
|
- [db {:keys [name email avatar repos]}]
|
|
|
+ [db {:keys [name email avatar]}]
|
|
|
(util/remove-nils {:me/name name
|
|
|
:me/email email
|
|
|
:me/avatar avatar}))
|
|
@@ -1664,8 +1654,8 @@
|
|
|
[?ref-page :page/name ?ref-page-name]]
|
|
|
'[:find ?page ?ref-page-name
|
|
|
:where
|
|
|
- [?p :page/name ?page]
|
|
|
[?p :page/journal? false]
|
|
|
+ [?p :page/name ?page]
|
|
|
[?block :block/page ?p]
|
|
|
[?block :block/ref-pages ?ref-page]
|
|
|
[?ref-page :page/name ?ref-page-name]])]
|
|
@@ -1919,19 +1909,18 @@
|
|
|
(defn- build-nodes
|
|
|
[dark? current-page edges nodes]
|
|
|
(mapv (fn [p]
|
|
|
- (cond->
|
|
|
- {:id p
|
|
|
- :name p
|
|
|
- :val (get-connections p edges)
|
|
|
- :autoColorBy "group"
|
|
|
- :group (js/Math.ceil (* (js/Math.random) 12))
|
|
|
- :color "#222222"}
|
|
|
- dark?
|
|
|
- (assoc :color "#8abbbb")
|
|
|
- (= p current-page)
|
|
|
- (assoc :color (if dark?
|
|
|
- "#ffffff"
|
|
|
- "#045591"))))
|
|
|
+ (let [current-page? (= p current-page)
|
|
|
+ color (case [dark? current-page?]
|
|
|
+ [false false] "#222222"
|
|
|
+ [false true] "#045591"
|
|
|
+ [true false] "#8abbbb"
|
|
|
+ [true true] "#ffffff")] ; FIXME: Put it into CSS
|
|
|
+ {:id p
|
|
|
+ :name p
|
|
|
+ :val (get-connections p edges)
|
|
|
+ :autoColorBy "group"
|
|
|
+ :group (js/Math.ceil (* (js/Math.random) 12))
|
|
|
+ :color color}))
|
|
|
(set (flatten nodes))))
|
|
|
|
|
|
(defn normalize-page-name
|
|
@@ -2195,8 +2184,8 @@
|
|
|
(d/q
|
|
|
'[:find ?content
|
|
|
:where
|
|
|
- [?h :block/content ?content]
|
|
|
- [?h :block/collapsed? true]]
|
|
|
+ [?h :block/collapsed? true]
|
|
|
+ [?h :block/content ?content]]
|
|
|
(get-conn)))
|
|
|
|
|
|
(defn get-block-parent
|
|
@@ -2302,7 +2291,7 @@
|
|
|
(let [f (async/<! chan)]
|
|
|
(f))
|
|
|
(recur))
|
|
|
- (reset! async-chan chan)
|
|
|
+ (reset! async-chan chan) ; FIXME: Unused?
|
|
|
chan))
|
|
|
|
|
|
(defonce blocks-count-cache (atom nil))
|