|
|
@@ -0,0 +1,38 @@
|
|
|
+(ns logseq.cli.commands.import-edn
|
|
|
+ "Import edn command"
|
|
|
+ (:require ["fs" :as fs]
|
|
|
+ [clojure.edn :as edn]
|
|
|
+ [logseq.cli.util :as cli-util]
|
|
|
+ [logseq.db :as ldb]
|
|
|
+ [logseq.db.common.sqlite-cli :as sqlite-cli]
|
|
|
+ [logseq.db.sqlite.export :as sqlite-export]
|
|
|
+ [logseq.db.sqlite.util :as sqlite-util]
|
|
|
+ [promesa.core :as p]))
|
|
|
+
|
|
|
+(defn- print-success [import-map]
|
|
|
+ (println "Imported" (count (:properties import-map)) "properties,"
|
|
|
+ (count (:classes import-map)) "classes and"
|
|
|
+ (count (:pages-and-blocks import-map)) "pages!"))
|
|
|
+
|
|
|
+(defn- api-import [api-server-token import-map]
|
|
|
+ (-> (p/let [resp (cli-util/api-fetch api-server-token "logseq.cli.import_edn" [(sqlite-util/transit-write import-map)])]
|
|
|
+ (if (= 200 (.-status resp))
|
|
|
+ (print-success import-map)
|
|
|
+ (cli-util/api-handle-error-response resp)))
|
|
|
+ (p/catch cli-util/command-catch-handler)))
|
|
|
+
|
|
|
+(defn- local-import [{:keys [graph]} import-map]
|
|
|
+ (if (and graph (fs/existsSync (cli-util/get-graph-path graph)))
|
|
|
+ (let [conn (apply sqlite-cli/open-db! (cli-util/->open-db-args graph))
|
|
|
+ {:keys [init-tx block-props-tx misc-tx]}
|
|
|
+ (sqlite-export/build-import import-map @conn {})
|
|
|
+ txs (vec (concat init-tx block-props-tx misc-tx))]
|
|
|
+ (ldb/transact! conn txs)
|
|
|
+ (print-success import-map))
|
|
|
+ (cli-util/error "Graph" (pr-str graph) "does not exist")))
|
|
|
+
|
|
|
+(defn import-edn [{{:keys [api-server-token file] :as opts} :opts}]
|
|
|
+ (let [edn (edn/read-string (str (fs/readFileSync file)))]
|
|
|
+ (if api-server-token
|
|
|
+ (api-import api-server-token edn)
|
|
|
+ (local-import opts edn))))
|