diff --git a/backend/deps.edn b/backend/deps.edn
index ddbfbdd87..1d79503cd 100644
--- a/backend/deps.edn
+++ b/backend/deps.edn
@@ -74,6 +74,14 @@
mockery/mockery {:mvn/version "0.1.4"}}
:extra-paths ["tests"]}
+ :fn-media-loader
+ {:fn uxbox.cli.media-loader/run
+ :args {}}
+
+ :fn-fixtures
+ {:fn uxbox.cli.fixtures/run
+ :args {}}
+
:lint
{:main-opts ["-m" "clj-kondo.main"]}
diff --git a/backend/resources/log4j2.xml b/backend/resources/log4j2.xml
index 4c0faf2b1..2bcacbd93 100644
--- a/backend/resources/log4j2.xml
+++ b/backend/resources/log4j2.xml
@@ -29,6 +29,11 @@
+
+
+
+
+
diff --git a/backend/src/uxbox/fixtures.clj b/backend/src/uxbox/cli/fixtures.clj
similarity index 96%
rename from backend/src/uxbox/fixtures.clj
rename to backend/src/uxbox/cli/fixtures.clj
index 3d6dcd5dc..a44cf2b35 100644
--- a/backend/src/uxbox/fixtures.clj
+++ b/backend/src/uxbox/cli/fixtures.clj
@@ -2,9 +2,12 @@
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
-;; Copyright (c) 2019 Andrey Antukh
+;; This Source Code Form is "Incompatible With Secondary Licenses", as
+;; defined by the Mozilla Public License, v. 2.0.
+;;
+;; Copyright (c) 2020 UXBOX Labs SL
-(ns uxbox.fixtures
+(ns uxbox.cli.fixtures
"A initial fixtures."
(:require
[clojure.tools.logging :as log]
@@ -246,7 +249,7 @@
(assign-teams-and-profiles conn teams (map :id profiles))
(run! (partial create-draft-files conn) profiles)))))
-(defn run
+(defn run*
[preset]
(let [preset (if (map? preset)
preset
@@ -257,13 +260,16 @@
preset-small))]
(impl-run preset)))
-(defn -main
- [& args]
+(defn run
+ [{:keys [preset]
+ :or {preset :small}}]
(try
(-> (mount/only #{#'uxbox.config/config
#'uxbox.db/pool
#'uxbox.migrations/migrations})
(mount/start))
- (run (first args))
+ (run* preset)
+ (catch Exception e
+ (log/errorf e "Unhandled exception."))
(finally
(mount/stop))))
diff --git a/backend/src/uxbox/media_loader.clj b/backend/src/uxbox/cli/media_loader.clj
similarity index 84%
rename from backend/src/uxbox/media_loader.clj
rename to backend/src/uxbox/cli/media_loader.clj
index ae619cd45..57159147c 100644
--- a/backend/src/uxbox/media_loader.clj
+++ b/backend/src/uxbox/cli/media_loader.clj
@@ -7,36 +7,27 @@
;;
;; Copyright (c) 2016-2020 Andrey Antukh
-(ns uxbox.media-loader
+(ns uxbox.cli.media-loader
"Media libraries importer (command line helper)."
(:require
[clojure.tools.logging :as log]
[clojure.spec.alpha :as s]
- [clojure.pprint :refer [pprint]]
[clojure.java.io :as io]
- [clojure.edn :as edn]
[mount.core :as mount]
[datoteka.core :as fs]
- [cuerdas.core :as str]
[uxbox.config]
[uxbox.common.spec :as us]
[uxbox.db :as db]
- [uxbox.http]
+ [uxbox.media]
+ [uxbox.media-storage]
[uxbox.migrations]
- [uxbox.util.svg :as svg]
- [uxbox.util.transit :as t]
- [uxbox.util.blob :as blob]
[uxbox.common.uuid :as uuid]
- [uxbox.util.data :as data]
[uxbox.services.mutations.projects :as projects]
[uxbox.services.mutations.files :as files]
[uxbox.services.mutations.colors :as colors]
- [uxbox.services.mutations.media :as media]
- [uxbox.util.storage :as ust])
+ [uxbox.services.mutations.media :as media])
(:import
- java.io.Reader
- java.io.PushbackReader
- org.im4java.core.Info))
+ java.io.PushbackReader))
;; --- Constants & Helpers
@@ -65,7 +56,6 @@
([code]
(System/exit code)))
-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Graphics Importer
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -109,7 +99,7 @@
media-object-id))
(defn- import-graphics
- [conn file-id {:keys [path regex] :as graphics}]
+ [conn file-id {:keys [path regex]}]
(run! (fn [fpath]
(when (re-matches regex (str fpath))
(import-media-object-if-not-exists conn file-id fpath)))
@@ -151,7 +141,7 @@
(if row true false)))
(defn- create-library-file-if-not-exists
- [conn project-id {:keys [name] :as library-file}]
+ [conn project-id {:keys [name]}]
(let [id (uuid/namespaced +colors-uuid-ns+ name)]
(when-not (library-file-exists? conn id)
(log/info "Creating library-file:" name)
@@ -164,7 +154,7 @@
id))
(defn- process-library
- [conn basedir project-id {:keys [name graphics colors] :as library}]
+ [conn basedir project-id {:keys [graphics colors] :as library}]
(us/verify ::import-library library)
(let [library-file-id (create-library-file-if-not-exists conn project-id library)]
(when graphics
@@ -197,45 +187,47 @@
(defn- validate-path
[path]
- (when-not path
- (log/error "No path is provided")
- (exit! -1))
- (when-not (fs/exists? path)
- (log/error "Path does not exists.")
- (exit! -1))
- (when (fs/directory? path)
- (log/error "The provided path is a directory.")
- (exit! -1))
- (fs/path path))
+ (let [path (if (symbol? path) (str path) path)]
+ (log/infof "Trying to load config from '%s'." path)
+ (when-not path
+ (log/error "No path is provided")
+ (exit! -1))
+ (when-not (fs/exists? path)
+ (log/error "Path does not exists.")
+ (exit! -1))
+ (when (fs/directory? path)
+ (log/error "The provided path is a directory.")
+ (exit! -1))
+ (fs/path path)))
(defn- read-file
[path]
- (let [reader (java.io.PushbackReader. (io/reader path))]
+ (let [reader (PushbackReader. (io/reader path))]
[(fs/parent path)
(read reader)]))
-(defn- start-system
- []
- (-> (mount/except #{#'uxbox.http/server})
- (mount/start)))
-
-(defn- stop-system
- []
- (mount/stop))
-
-(defn run
+(defn run*
[path]
(let [[basedir libraries] (read-file path)]
(db/with-atomic [conn db/pool]
(let [project-id (create-project-if-not-exists conn {:name "System libraries"})]
(run! #(process-library conn basedir project-id %) libraries)))))
-(defn -main
- [& [path]]
+(defn run
+ [{:keys [path] :as params}]
+ (log/infof "Starting media loader.")
(let [path (validate-path path)]
- (try
- (start-system)
- (run path)
- (finally
- (stop-system)))))
+
+ (try
+ (-> (mount/only #{#'uxbox.config/config
+ #'uxbox.db/pool
+ #'uxbox.migrations/migrations
+ #'uxbox.media/semaphore
+ #'uxbox.media-storage/media-storage})
+ (mount/start))
+ (run* path)
+ (catch Exception e
+ (log/errorf e "Unhandled exception."))
+ (finally
+ (mount/stop)))))
diff --git a/backend/tests/user.clj b/backend/tests/user.clj
index 1c0e9bae0..62515d6f4 100644
--- a/backend/tests/user.clj
+++ b/backend/tests/user.clj
@@ -85,18 +85,6 @@
{:unresolved-symbol
{:exclude ['(uxbox.services.mutations/defmutation)
'(uxbox.services.queries/defquery)
+ '(uxbox.db/with-atomic)
'(promesa.core/let)]}}}})
(kondo/print!))))
-
-;; (defn red
-;; [items]
-;; (as-> items $$
-;; (reduce (fn [acc item]
-;; (cp/process-changes acc (:changes item)))
-;; cp/default-page-data
-;; $$)))
-
-;; (defn update-page-data
-;; [id data]
-;; (let [data (blob/encode data)]
-;; (db/query-one db/pool ["update page set data=$1 where id=$2" data id])))
diff --git a/backend/tests/uxbox/tests/helpers.clj b/backend/tests/uxbox/tests/helpers.clj
index 4c58df3cf..375bafbe4 100644
--- a/backend/tests/uxbox/tests/helpers.clj
+++ b/backend/tests/uxbox/tests/helpers.clj
@@ -14,9 +14,7 @@
[uxbox.services.mutations.teams :as teams]
[uxbox.services.mutations.files :as files]
[uxbox.services.mutations.pages :as pages]
- ;; [uxbox.services.mutations.icons :as icons]
[uxbox.services.mutations.colors :as colors]
- [uxbox.fixtures :as fixtures]
[uxbox.migrations]
[uxbox.media]
[uxbox.media-storage]
diff --git a/docker/devenv/Dockerfile b/docker/devenv/Dockerfile
index 6e2261a76..84c116e3d 100644
--- a/docker/devenv/Dockerfile
+++ b/docker/devenv/Dockerfile
@@ -4,7 +4,7 @@ LABEL maintainer="Andrey Antukh "
ARG DEBIAN_FRONTEND=noninteractive
ENV NODE_VERSION=v12.18.3 \
- CLOJURE_VERSION=1.10.1.619 \
+ CLOJURE_VERSION=1.10.1.641 \
LANG=en_US.UTF-8 \
LC_ALL=C.UTF-8
diff --git a/docs/01-Development-Environment.md b/docs/01-Development-Environment.md
index 945b5f5bb..1ca7895f2 100644
--- a/docs/01-Development-Environment.md
+++ b/docs/01-Development-Environment.md
@@ -89,29 +89,39 @@ additional tasks.
### Frontend ###
-The frontend build process and the http server is located on the tmux
-**window 1**. **Shadow-cljs** is used for build and serve the frontend
-code. For more information, please refer to `02-Frontend-Developer-Guide.md`.
+The frontend build process is located on the tmux **window 1**.
+**Shadow-cljs** is used for build and serve the frontend code. For
+more information, please refer to `02-Frontend-Developer-Guide.md`.
-By default the **window 1** executes the shadow-cljs watch process, that starts
-a new JVM/Clojure instance if there is no one running. But you may also execute
-`shadow-cljs server`, that starts only the instance. And then, open another
-window with `Ctrl+c` and execute `shadow-cljs watch main` there. This way, the
-process that watches and recompiles connects to it and it restarts faster when
-your code changes.
+By default the **window 1** executes the shadow-cljs watch process,
+that starts a new JVM/Clojure instance if there is no one running.
-Finally, you can start a REPL linked to the instance and the current connected
-browser, by opening a third window with `Ctrl+c` and running
-`shadow-cljs cljs-repl main`.
+Finally, you can start a REPL linked to the instance and the current
+connected browser, by opening a third window with `Ctrl+c` and running
+`npx shadow-cljs cljs-repl main`.
+
+
+### Exporter ###
+
+The exporter app (clojurescript app running in nodejs) is located in
+**window 2**, and you can go directly to it using `ctrl+b 2` shortcut.
+
+There you will found the window split in two slices. On the top slice
+you will have the build process (using shadow-cljs in the same way as
+frontend application), and on the bot slice the script that launeches
+the node process.
+
+If some reason scripts does not stars correctly, you can manually
+execute `node target/app.js ` to start the exporter app.
### Backend ###
-The backend related environment is located in the tmux **window 2**,
+The backend related environment is located in the tmux **window 3**,
and you can go directly to it using `ctrl+b 2` shortcut.
By default the backend will be started in non-interactive mode for
-convenience but you can just press `Ctrl+c` and execute `./bin/repl`
+convenience but you can just press `Ctrl+c` and execute `./scripts/repl`
for start the repl.
On the REPL you have this helper functions:
diff --git a/docs/02-Frontend-Developer-Guide.md b/docs/02-Frontend-Developer-Guide.md
index f5795b5f1..32e31e641 100644
--- a/docs/02-Frontend-Developer-Guide.md
+++ b/docs/02-Frontend-Developer-Guide.md
@@ -3,6 +3,7 @@
This guide intends to explain the essential details of the frontend
application.
+
## Access to clojure from javascript console
The uxbox namespace of the main application is exported, so that is
@@ -15,6 +16,7 @@ console (there is autocompletion for help):
uxbox.main.store.emit_BANG_(uxbox.main.data.workspace.reset_zoom)
```
+
## Visual debug mode and utilities
Debugging a problem in the viewport algorithms for grouping and
@@ -37,6 +39,7 @@ uxbox.util.debug.debug_all()
uxbox.util.debug.debug_none()
```
+
## Debug state and objects
There are also some useful functions to visualize the global state or
diff --git a/docs/03-Backend-Developer-Guide.md b/docs/03-Backend-Developer-Guide.md
index 047e3be56..7ae14dc19 100644
--- a/docs/03-Backend-Developer-Guide.md
+++ b/docs/03-Backend-Developer-Guide.md
@@ -11,12 +11,12 @@ good amount of content (usually used for just test the application or
perform performance tweaks on queries).
In order to load fixtures, enter to the REPL environment executing the
-`bin/repl` script, and then execute `(uxbox.fixtures/run :small)`.
+`bin/repl` script, and then execute `(uxbox.fixtures/run {:preset :small})`.
You also can execute this as a standalone script with:
```bash
-clojure -Adev -m uxbox.fixtures
+clojure -Adev -X:fn-fixtures
```
NOTE: It is an optional step because the application can start with an
@@ -37,3 +37,11 @@ from there:
(require 'uxbox.fixtures)
(uxbox.fixtures/run :small)
```
+
+To access to the running process repl you usually will execute this
+command:
+
+```bash
+rlwrap netcat localhost 5555
+```
+
diff --git a/docs/05-Management-Guide.md b/docs/05-Management-Guide.md
index f755736c6..abc218dd4 100644
--- a/docs/05-Management-Guide.md
+++ b/docs/05-Management-Guide.md
@@ -22,7 +22,7 @@ This is a probably incomplete list of available options (with
respective defaults):
- `UXBOX_HTTP_SERVER_PORT=6060`
-- `UXBOX_PUBLIC_URI=http://localhost:3449/`
+- `UXBOX_PUBLIC_URI=http://localhost:3449`
- `UXBOX_DATABASE_USERNAME=` (default undefined, used from uri)
- `UXBOX_DATABASE_PASSWORD=` (default undefined, used from uri)
- `UXBOX_DATABASE_URI=postgresql://127.0.0.1/uxbox`
@@ -57,6 +57,7 @@ respective defaults):
- `UXBOX_LDAP_AUTH_FULLNAME_ATTRIBUTE=displayName`
- `UXBOX_LDAP_AUTH_AVATAR_ATTRIBUTE=jpegPhoto`
+
## REPL ##
The production environment by default starts a server REPL where you
@@ -95,12 +96,12 @@ has all the material design icon collections).
Then, you need to execute:
```bash
-clojure -Adev -m uxbox.media-loader ../path/to/config.edn
+clojure -Adev -X:fn-media-loader :path ../path/to/config.edn
```
If you have a REPL access to the running process, you can execute it from there:
```clojure
(require 'uxbox.media-loader)
-@(uxbox.media-loader/run "/path/to/config.edn")
+(uxbox.media-loader/run* "/path/to/config.edn")
```