0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-11 01:28:30 -05:00

Merge pull request #3600 from penpot/palba-fix-fixes

🐛 Upgrade the fixes functions to avoid corner cases
This commit is contained in:
Andrey Antukh 2023-09-05 16:38:10 +02:00 committed by GitHub
commit 74be76c914
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -101,7 +101,9 @@
(defn fix-components-shaperefs (defn fix-components-shaperefs
([file] ([file]
(if-not (contains? (:features file) "components/v2") (if-not (contains? (:features file) "components/v2")
(prn " This file is not v2") (do
(prn " This file is not v2")
file)
(let [libs (->> (files/get-file-libraries app.srepl.helpers/*conn* (:id file)) (let [libs (->> (files/get-file-libraries app.srepl.helpers/*conn* (:id file))
(cons file) (cons file)
(map #(files/get-file app.srepl.helpers/*conn* (:id %) (:features file))) (map #(files/get-file app.srepl.helpers/*conn* (:id %) (:features file)))
@ -147,7 +149,7 @@
copies (->> objects copies (->> objects
vals vals
(filter #(and (ctk/instance-head? %) (not (ctk/main-instance? %))))) (filter #(and (ctk/instance-head? %) (not (ctk/main-instance? %)))))
updates (reduce fc [] copies) updates (reduce fc [] copies)
updated-page (reduce (fn [p [id shape-ref]] updated-page (reduce (fn [p [id shape-ref]]
(assoc-in p [:objects id :shape-ref] shape-ref)) (assoc-in p [:objects id :shape-ref] shape-ref))
page page
@ -156,23 +158,23 @@
updated-page))] updated-page))]
(prn (str "Updating " (:name file) " " (:id file))) (prn (str "Updating " (:name file) " " (:id file)))
(update file :data h/update-pages update-page)))) (-> file
(update :data h/update-pages update-page)
(assoc ::updated true)))))
([file save?] ([file save?]
(let [file (-> file (let [file (-> file
(update :data blob/decode) (update :data blob/decode)
(fix-components-shaperefs))] (fix-components-shaperefs))]
(when save? (when (and save? (::updated file))
(let [features (db/create-array h/*conn* "text" (:features file)) (let [data (blob/encode (:data file))]
data (blob/encode (:data file))]
(db/update! h/*conn* :file (db/update! h/*conn* :file
{:data data {:data data
;; :revn (:revn file) ;; :revn (:revn file)
:features features} }
{:id (:id file)}) {:id (:id file)})
(when (contains? (:features file) "storage/pointer-map") (files/persist-pointers! h/*conn* (:id file)))))))
(files/persist-pointers! h/*conn* (:id file))))))))
(defn fix-component-root (defn fix-component-root
([file] ([file]
@ -198,22 +200,22 @@
(update :data blob/decode) (update :data blob/decode)
(fix-component-root))] (fix-component-root))]
(when save? (when save?
(let [features (db/create-array h/*conn* "text" (:features file)) (let [data (blob/encode (:data file))]
data (blob/encode (:data file))]
(db/update! h/*conn* :file (db/update! h/*conn* :file
{:data data {:data data
;; :revn (:revn file) ;; :revn (:revn file)
:features features} }
{:id (:id file)}) {:id (:id file)})
(when (contains? (:features file) "storage/pointer-map") (files/persist-pointers! h/*conn* (:id file)))))))
(files/persist-pointers! h/*conn* (:id file))))))))
(defn update-near-components (defn update-near-components
([file] ([file]
(prn (str "Updating " (:name file) " " (:id file))) (prn (str "Updating " (:name file) " " (:id file)))
(if-not (contains? (:features file) "components/v2") (if-not (contains? (:features file) "components/v2")
(prn " This file is not v2") (do
(prn " This file is not v2")
file)
(let [libs (->> (files/get-file-libraries h/*conn* (:id file)) (let [libs (->> (files/get-file-libraries h/*conn* (:id file))
(cons file) (cons file)
(map #(files/get-file h/*conn* (:id %) (:features file))) (map #(files/get-file h/*conn* (:id %) (:features file)))
@ -262,20 +264,20 @@
(prn (str "Page " (:name page))) (prn (str "Page " (:name page)))
(h/update-shapes page (partial update-shape page)))] (h/update-shapes page (partial update-shape page)))]
(update file :data h/update-pages update-page)))) (-> file
(update :data h/update-pages update-page)
(assoc ::updated true)))))
([file save?] ([file save?]
(let [file (-> file (let [file (-> file
(update :data blob/decode) (update :data blob/decode)
(update-near-components))] (update-near-components))]
(when save? (when (and save? (::updated file))
(let [features (db/create-array h/*conn* "text" (:features file)) (let [data (blob/encode (:data file))]
data (blob/encode (:data file))]
(db/update! h/*conn* :file (db/update! h/*conn* :file
{:data data {:data data
;; :revn (:revn file) ;; :revn (:revn file)
:features features} }
{:id (:id file)}) {:id (:id file)})
(when (contains? (:features file) "storage/pointer-map") (files/persist-pointers! h/*conn* (:id file)))))))
(files/persist-pointers! h/*conn* (:id file))))))))