;; This Source Code Form is subject to the terms of the Mozilla Public ;; 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) UXBOX Labs SL (ns user (:require [app.common.exceptions :as ex] [app.config :as cfg] [app.main :as main] [app.util.blob :as blob] [app.util.json :as json] [app.util.time :as dt] [app.util.transit :as t] [clojure.java.io :as io] [clojure.pprint :refer [pprint print-table]] [clojure.repl :refer :all] [clojure.spec.alpha :as s] [clojure.spec.gen.alpha :as sgen] [clojure.test :as test] [clojure.test :as test] [clojure.tools.namespace.repl :as repl] [clojure.walk :refer [macroexpand-all]] [criterium.core :refer [quick-bench bench with-progress-reporting]] [integrant.core :as ig])) (repl/disable-reload! (find-ns 'integrant.core)) (defonce system nil) ;; --- Benchmarking Tools (defmacro run-quick-bench [& exprs] `(with-progress-reporting (quick-bench (do ~@exprs) :verbose))) (defmacro run-quick-bench' [& exprs] `(quick-bench (do ~@exprs))) (defmacro run-bench [& exprs] `(with-progress-reporting (bench (do ~@exprs) :verbose))) (defmacro run-bench' [& exprs] `(bench (do ~@exprs))) ;; --- Development Stuff (defn- run-tests ([] (run-tests #"^app.*-test$")) ([o] (repl/refresh) (cond (instance? java.util.regex.Pattern o) (test/run-all-tests o) (symbol? o) (if-let [sns (namespace o)] (do (require (symbol sns)) (test/test-vars [(resolve o)])) (test/test-ns o))))) (defn- start [] (alter-var-root #'system (fn [sys] (when sys (ig/halt! sys)) (-> main/system-config (ig/prep) (ig/init)))) :started) (defn- stop [] (alter-var-root #'system (fn [sys] (when sys (ig/halt! sys)) nil)) :stoped) (defn restart [] (stop) (repl/refresh :after 'user/start)) (defn restart-all [] (stop) (repl/refresh-all :after 'user/start)) (defn compression-bench [data] (print-table [{:v1 (alength (blob/encode data {:version 1})) :v2 (alength (blob/encode data {:version 2})) :v3 (alength (blob/encode data {:version 3}))}])) (defn update-page-1 [data] (letfn [(find-empty-groups [objects] (->> (vals objects) (filter (fn [shape] (and (= :group (:type shape)) (or (empty? (:shapes shape)) (every? (fn [child-id] (not (contains? objects child-id))) (:shapes shape)))))) (map :id))) (update-page [[page-id page]] (let [objects (:objects page) eids (find-empty-groups objects)] (map (fn [id] {:type :del-obj :page-id page-id :id id}) eids)))] (loop [i 0 data data] (let [changes (mapcat update-page (:pages-index data))] (prn "==== loop " i " ====") (clojure.pprint/pprint changes) (if (seq changes) (recur (inc i) (app.common.pages.changes/process-changes data changes)) data)))))