mirror of
https://github.com/penpot/penpot.git
synced 2025-02-10 09:08:31 -05:00
✨ Add color libraries importer.
This commit is contained in:
parent
555210175e
commit
61cfebb7ba
2 changed files with 86 additions and 10 deletions
|
@ -30,6 +30,7 @@
|
||||||
[uxbox.util.blob :as blob]
|
[uxbox.util.blob :as blob]
|
||||||
[uxbox.util.uuid :as uuid]
|
[uxbox.util.uuid :as uuid]
|
||||||
[uxbox.util.data :as data]
|
[uxbox.util.data :as data]
|
||||||
|
[uxbox.services.mutations.colors :as colors]
|
||||||
[uxbox.services.mutations.icons :as icons]
|
[uxbox.services.mutations.icons :as icons]
|
||||||
[uxbox.services.mutations.images :as images]
|
[uxbox.services.mutations.images :as images]
|
||||||
[uxbox.util.storage :as ust])
|
[uxbox.util.storage :as ust])
|
||||||
|
@ -40,22 +41,32 @@
|
||||||
|
|
||||||
;; --- Constants & Helpers
|
;; --- Constants & Helpers
|
||||||
|
|
||||||
(def ^:const +images-uuid-ns+ #uuid "3642a582-565f-4070-beba-af797ab27a6e")
|
(def ^:const +images-uuid-ns+ #uuid "3642a582-565f-4070-beba-af797ab27a6a")
|
||||||
(def ^:const +icons-uuid-ns+ #uuid "3642a582-565f-4070-beba-af797ab27a6f")
|
(def ^:const +icons-uuid-ns+ #uuid "3642a582-565f-4070-beba-af797ab27a6b")
|
||||||
|
(def ^:const +colors-uuid-ns+ #uuid "3642a582-565f-4070-beba-af797ab27a6c")
|
||||||
|
|
||||||
|
(s/def ::id ::us/uuid)
|
||||||
(s/def ::name ::us/string)
|
(s/def ::name ::us/string)
|
||||||
(s/def ::path ::us/string)
|
(s/def ::path ::us/string)
|
||||||
(s/def ::regex #(instance? java.util.regex.Pattern %))
|
(s/def ::regex #(instance? java.util.regex.Pattern %))
|
||||||
(s/def ::import-item
|
|
||||||
|
(s/def ::colors (s/every ::us/color :kind set?))
|
||||||
|
|
||||||
|
(s/def ::import-item-media
|
||||||
(s/keys :req-un [::name ::path ::regex]))
|
(s/keys :req-un [::name ::path ::regex]))
|
||||||
|
|
||||||
|
(s/def ::import-item-color
|
||||||
|
(s/keys :req-un [::name ::id ::colors]))
|
||||||
|
|
||||||
(defn exit!
|
(defn exit!
|
||||||
([] (exit! 0))
|
([] (exit! 0))
|
||||||
([code]
|
([code]
|
||||||
(System/exit code)))
|
(System/exit code)))
|
||||||
|
|
||||||
|
|
||||||
;; --- Icons Libraries Importer
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Icons Libraries Importer
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defn- icon-library-exists?
|
(defn- icon-library-exists?
|
||||||
[conn id]
|
[conn id]
|
||||||
|
@ -73,7 +84,6 @@
|
||||||
:id id
|
:id id
|
||||||
:name name})))
|
:name name})))
|
||||||
|
|
||||||
|
|
||||||
(defn- create-icons-library-if-not-exists
|
(defn- create-icons-library-if-not-exists
|
||||||
[conn {:keys [name] :as item}]
|
[conn {:keys [name] :as item}]
|
||||||
(let [id (uuid/namespaced +icons-uuid-ns+ name)]
|
(let [id (uuid/namespaced +icons-uuid-ns+ name)]
|
||||||
|
@ -128,7 +138,7 @@
|
||||||
|
|
||||||
(defn- process-icons-library
|
(defn- process-icons-library
|
||||||
[conn basedir {:keys [path regex] :as item}]
|
[conn basedir {:keys [path regex] :as item}]
|
||||||
(s/assert ::import-item item)
|
(s/assert ::import-item-media item)
|
||||||
(-> (create-icons-library-if-not-exists conn item)
|
(-> (create-icons-library-if-not-exists conn item)
|
||||||
(p/then (fn [library-id]
|
(p/then (fn [library-id]
|
||||||
(->> (assoc item :path (fs/join basedir path))
|
(->> (assoc item :path (fs/join basedir path))
|
||||||
|
@ -213,13 +223,77 @@
|
||||||
|
|
||||||
(defn- process-images-library
|
(defn- process-images-library
|
||||||
[conn basedir {:keys [path regex] :as item}]
|
[conn basedir {:keys [path regex] :as item}]
|
||||||
(s/assert ::import-item item)
|
(s/assert ::import-item-media item)
|
||||||
(-> (create-images-library-if-not-exists conn item)
|
(-> (create-images-library-if-not-exists conn item)
|
||||||
(p/then (fn [library-id]
|
(p/then (fn [library-id]
|
||||||
(->> (assoc item :path (fs/join basedir path))
|
(->> (assoc item :path (fs/join basedir path))
|
||||||
(import-images conn library-id))))))
|
(import-images conn library-id))))))
|
||||||
|
|
||||||
;; --- Entry Point
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Colors Libraries Importer
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
(defn- color-library-exists?
|
||||||
|
[conn id]
|
||||||
|
(s/assert ::us/uuid id)
|
||||||
|
(let [sql "select id from color_library where id = $1"]
|
||||||
|
(-> (db/query-one conn [sql id])
|
||||||
|
(p/then (fn [row] (if row true false))))))
|
||||||
|
|
||||||
|
(defn- create-colors-library
|
||||||
|
[conn {:keys [name] :as item}]
|
||||||
|
(let [id (uuid/namespaced +colors-uuid-ns+ name)]
|
||||||
|
(log/info "Creating color library:" name)
|
||||||
|
(colors/create-library conn {:id id
|
||||||
|
:team-id uuid/zero
|
||||||
|
:name name})))
|
||||||
|
|
||||||
|
|
||||||
|
(defn- create-colors-library-if-not-exists
|
||||||
|
[conn {:keys [name] :as item}]
|
||||||
|
(let [id (uuid/namespaced +colors-uuid-ns+ name)]
|
||||||
|
(-> (color-library-exists? conn id)
|
||||||
|
(p/then (fn [exists?]
|
||||||
|
(when-not exists?
|
||||||
|
(create-colors-library conn item))))
|
||||||
|
(p/then (constantly id)))))
|
||||||
|
|
||||||
|
(defn- create-color
|
||||||
|
[conn library-id content]
|
||||||
|
(s/assert ::us/uuid library-id)
|
||||||
|
(s/assert ::us/color content)
|
||||||
|
|
||||||
|
(let [color-id (uuid/namespaced +colors-uuid-ns+ (str library-id content))]
|
||||||
|
(log/info "Creating color" content color-id)
|
||||||
|
(-> (colors/create-color conn {:id color-id
|
||||||
|
:library-id library-id
|
||||||
|
:name content
|
||||||
|
:content content})
|
||||||
|
(p/then' (constantly color-id)))))
|
||||||
|
|
||||||
|
(defn- prune-colors
|
||||||
|
[conn library-id]
|
||||||
|
(-> (db/query-one conn ["delete from color where library_id=$1" library-id])
|
||||||
|
(p/then (constantly nil))))
|
||||||
|
|
||||||
|
(defn- import-colors
|
||||||
|
[conn library-id {:keys [colors] :as item}]
|
||||||
|
(us/verify ::import-item-color item)
|
||||||
|
(p/do!
|
||||||
|
(prune-colors conn library-id)
|
||||||
|
(p/run! #(create-color conn library-id %) colors)))
|
||||||
|
|
||||||
|
(defn- process-colors-library
|
||||||
|
[conn {:keys [name id colors] :as item}]
|
||||||
|
(us/verify ::import-item-color item)
|
||||||
|
(-> (create-colors-library-if-not-exists conn item)
|
||||||
|
(p/then #(import-colors conn % item))))
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Entry Point
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(defn- validate-path
|
(defn- validate-path
|
||||||
[path]
|
[path]
|
||||||
|
@ -253,10 +327,12 @@
|
||||||
(defn- importer
|
(defn- importer
|
||||||
[conn basedir data]
|
[conn basedir data]
|
||||||
(let [images (:images data)
|
(let [images (:images data)
|
||||||
icons (:icons data)]
|
icons (:icons data)
|
||||||
|
colors (:colors data)]
|
||||||
(p/do!
|
(p/do!
|
||||||
(p/run! #(process-images-library conn basedir %) images)
|
(p/run! #(process-images-library conn basedir %) images)
|
||||||
(p/run! #(process-icons-library conn basedir %) icons)
|
(p/run! #(process-icons-library conn basedir %) icons)
|
||||||
|
(p/run! #(process-colors-library conn %) colors)
|
||||||
nil)))
|
nil)))
|
||||||
|
|
||||||
(defn -main
|
(defn -main
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
values ($1, $2, $3)
|
values ($1, $2, $3)
|
||||||
returning *;")
|
returning *;")
|
||||||
|
|
||||||
(defn- create-library
|
(defn create-library
|
||||||
[conn {:keys [id team-id name]}]
|
[conn {:keys [id team-id name]}]
|
||||||
(let [id (or id (uuid/next))]
|
(let [id (or id (uuid/next))]
|
||||||
(db/query-one conn [sql:create-library id team-id name])))
|
(db/query-one conn [sql:create-library id team-id name])))
|
||||||
|
|
Loading…
Add table
Reference in a new issue