aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2023-03-23 17:56:29 +0000
committers-ol <s+removethis@s-ol.nu>2023-03-23 18:01:46 +0000
commit697c1d7b4602f516c6f01105f19f6daa68708065 (patch)
treeef99f0f6882334ca8d720180bc2ff820cad2360b /src
parentadd Dockerfile, build support (diff)
downloadelectric-sudoku-697c1d7b4602f516c6f01105f19f6daa68708065.tar.gz
electric-sudoku-697c1d7b4602f516c6f01105f19f6daa68708065.zip
persist state using duratom
Diffstat (limited to 'src')
-rw-r--r--src/app/sudoku.cljc20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/app/sudoku.cljc b/src/app/sudoku.cljc
index 2137bba..dcbafb1 100644
--- a/src/app/sudoku.cljc
+++ b/src/app/sudoku.cljc
@@ -4,11 +4,13 @@
(:require [hyperfiddle.electric :as e]
[hyperfiddle.electric-dom2 :as dom]
[hyperfiddle.electric-ui4 :as ui]
- [clojure.string :as string]))
+ [clojure.string :as string]
+ #?(:clj [duratom.core :refer [duratom]])))
;;; logic
;;;;;;;;;
+
(defn map2dv [f]
(mapv #(mapv (partial f %) (range 9)) (range 9)))
@@ -34,16 +36,30 @@
(if (number? v) #{v} v))
; (and (not notes) (set? v) (= 1 (count v))) (first v)
+
;;; app state
;;;;;;;;;;;;;
+
; dynamic def for sharing state between server/client
(e/def state)
+#?(:clj (defn make-atom [init-val]
+ (let [state-file-path (System/getenv "SUDOKU_STATE_FILE")]
+ (if state-file-path
+ (do
+ (println "storing state in" state-file-path)
+ (duratom :local-file
+ :file-path state-file-path
+ :init init-val))
+ (atom init-val)))))
+
; server-side atom for actual storage
-(def !state #?(:clj (atom (make-sudoku 64))))
+(def !state #?(:clj (make-atom (make-sudoku 64))))
+
;;; view stuff
;;;;;;;;;;;;;;
+
(defn i->num [v]
(inc (+ v (quot v 3))))