From ba55d657a4cb334c8878c6fef610801b95894908 Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Wed, 14 Feb 2024 17:34:50 +0100 Subject: [PATCH] :sparkles: Prevent adding object map to not loaded pointer-map containers --- backend/src/app/features/fdata.clj | 19 ++++++++++++++----- backend/src/app/util/pointer_map.clj | 4 ++-- common/src/app/common/data.cljc | 9 ++++++++- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/backend/src/app/features/fdata.clj b/backend/src/app/features/fdata.clj index 8a57a1aa1..6f918bb53 100644 --- a/backend/src/app/features/fdata.clj +++ b/backend/src/app/features/fdata.clj @@ -22,12 +22,21 @@ (defn enable-objects-map [file] - (let [update-fn #(d/update-when % :objects omap/wrap)] + (let [update-container + (fn [container] + (if (and (pmap/pointer-map? container) + (not (pmap/loaded? container))) + container + (d/update-when container :objects omap/wrap))) + + update-data + (fn [fdata] + (-> fdata + (update :pages-index d/update-vals update-container) + (d/update-when :components d/update-vals update-container)))] + (-> file - (update :data (fn [fdata] - (-> fdata - (update :pages-index update-vals update-fn) - (d/update-when :components update-vals update-fn)))) + (update :data update-data) (update :features conj "fdata/objects-map")))) (defn process-objects diff --git a/backend/src/app/util/pointer_map.clj b/backend/src/app/util/pointer_map.clj index bb7b25293..f5933ecd6 100644 --- a/backend/src/app/util/pointer_map.clj +++ b/backend/src/app/util/pointer_map.clj @@ -68,6 +68,7 @@ (get-id [_]) (load! [_]) (modified? [_]) + (loaded? [_]) (clone [_])) (deftype PointerMap [id mdata @@ -90,6 +91,7 @@ (or odata {})) (modified? [_] modified?) + (loaded? [_] loaded?) (get-id [_] id) (clone [this] @@ -210,8 +212,6 @@ (defn create ([] (let [id (uuid/next) - - mdata (assoc *metadata* :created-at (dt/now)) pmap (PointerMap. id mdata {} true true)] (some-> *tracked* (swap! assoc id pmap)) diff --git a/common/src/app/common/data.cljc b/common/src/app/common/data.cljc index bcfd55648..0dcf23e7e 100644 --- a/common/src/app/common/data.cljc +++ b/common/src/app/common/data.cljc @@ -7,7 +7,7 @@ (ns app.common.data "A collection if helpers for working with data structures and other data resources." - (:refer-clojure :exclude [read-string hash-map merge name + (:refer-clojure :exclude [read-string hash-map merge name update-vals parse-double group-by iteration concat mapcat parse-uuid max min]) #?(:cljs @@ -403,6 +403,13 @@ [coll] (partial get coll)) +(defn update-vals + [m f] + (reduce-kv (fn [acc k v] + (assoc acc k (f v))) + m + m)) + (defn update-in-when [m key-seq f & args] (let [found (get-in m key-seq sentinel)]