The start of the mem type model.

This commit is contained in:
Robert C. Martin 2023-06-16 13:00:56 -05:00
parent c5b8b712ae
commit 1d75b621af
6 changed files with 138 additions and 71 deletions

View File

@ -1,7 +1,8 @@
(ns more-speech.nostr.relays-spec
(:require [clojure.spec.alpha :as s]
[more-speech.mem :refer :all]
[more-speech.nostr.relays :refer :all :as relays]
[more-speech.nostr.relays :refer :all]
[more-speech.types.relay :as relay-type]
[speclj.core :refer :all]))
(describe "Relays"
@ -10,31 +11,31 @@
(set-mem :relays {})
(load-relays nil)
(should= {} (get-mem :relays))
(should (s/conform ::relays/relays (get-mem :relays))))
(should= nil (s/explain-data ::relay-type/relays (get-mem :relays))))
(it "loads an empty file"
(load-relays "")
(should= (get-mem :relays) {})
(should (s/conform ::relays/relays (get-mem :relays))))
(should= nil (s/explain-data ::relay-type/relays (get-mem :relays))))
(it "loads a relay file with one relay"
(load-relays "{\"relay-url\" {:read true :write true}}")
(load-relays "{\"relay-url\" {:read :read-all :write true}}")
(should= (get-mem :relays)
{"relay-url"
{:read true :write true :connection nil :subscribed false}})
(should (s/conform ::relays/relays (get-mem :relays))))
{:read :read-all :write true :connection nil :subscribed false}})
(should= nil (s/explain-data ::relay-type/relays (get-mem :relays))))
(it "loads a relay file with more than one relay"
(load-relays (str "{\"relay-url-1\" {:read true :write true}\n"
"\"relay-url-2\" {:read false :write false}}")
(load-relays (str "{\"relay-url-1\" {:read :read-all :write true}\n"
"\"relay-url-2\" {:read :read-none :write false}}")
)
(should= {"relay-url-1"
{:read true :write true :connection nil :subscribed false}
{:read :read-all :write true :connection nil :subscribed false}
"relay-url-2"
{:read false :write false :connection nil :subscribed false}}
{:read :read-none :write false :connection nil :subscribed false}}
(get-mem :relays))
(should (s/conform ::relays/relays (get-mem :relays)))))
(should= nil (s/explain-data ::relay-type/relays (get-mem :relays)))))
)
(describe "relays-for-writing"

View File

@ -1,50 +1,83 @@
(ns more-speech.mem
(:require [clojure.spec.alpha :as s]))
(:require [clojure.spec.alpha :as s]
[more-speech.types.relay :as relay-type]
[more-speech.types.profile :as profile-type]))
(s/def ::id number?)
(s/def ::pubkey number?)
(s/def ::created-at number?)
(s/def ::content string?)
(s/def ::sig number?)
(s/def ::tag (s/tuple keyword? number?))
(s/def ::tags (s/coll-of ::tag))
(s/def ::references (s/coll-of number?))
(s/def ::relay-url string?)
(s/def ::relays (s/coll-of ::relay-url))
(s/def ::event (s/keys :req-un [::id
::pubkey
::created-at
::content
::sig
::tags
::references]
:opt-un [::relays]))
;(s/def ::id number?)
;(s/def ::created-at number?)
;(s/def ::content string?)
;(s/def ::sig number?)
;(s/def ::tag (s/tuple keyword? number?))
;(s/def ::tags (s/coll-of ::tag))
;(s/def ::references (s/coll-of number?))
;(s/def ::relay-url string?)
;(s/def ::relays (s/coll-of ::relay-url))
;(s/def ::event (s/keys :req-un [::id
; ::pubkey
; ::created-at
; ::content
; ::sig
; ::tags
; ::references]
; :opt-un [::relays]))
;
;(s/def ::text-event-map (s/map-of :id :event))
;
(s/def ::text-event-map (s/map-of :id :event))
;(s/def ::profiles (s/map-of ::id ::profile))
;(s/def ::public-key string?)
;(s/def ::private-key string?)
;(s/def ::keys (s/keys :req-un [::name ::about ::picture ::public-key ::private-key]))
;(s/def ::selected (s/coll-of ::id))
;(s/def ::blocked (s/coll-of ::id))
;(s/def ::tab (s/keys :req-un [::name ::selected ::blocked]))
;(s/def ::tabs-list (s/coll-of ::tab))
;(s/def ::selected-event ::id)
;(s/def ::event-history (s/coll-of (s/tuple number? ::id)))
;(s/def ::back-count number?)
;(s/def ::backing-up boolean?)
;
;
;(s/def ::id number?)
;(s/def ::orphaned-references (s/map-of ::id (s/coll-of ::id :kind set?)))
(s/def ::name string?)
(s/def ::about string?)
(s/def ::picture string?)
(s/def ::profile (s/keys :req-un [::name ::about ::picture]))
(s/def ::profiles (s/map-of ::id ::profile))
(s/def ::public-key string?)
(s/def ::private-key string?)
(s/def ::keys (s/keys :req-un [::name ::about ::picture ::public-key ::private-key]))
(s/def ::selected (s/coll-of ::id))
(s/def ::blocked (s/coll-of ::id))
(s/def ::tab (s/keys :req-un [::name ::selected ::blocked]))
(s/def ::tabs-list (s/coll-of ::tab))
(s/def ::selected-event ::id)
(s/def ::event-history (s/coll-of (s/tuple number? ::id)))
(s/def ::back-count number?)
(s/def ::backing-up boolean?)
(s/def ::id number?)
(s/def ::orphaned-references (s/map-of ::id (s/coll-of ::id :kind set?)))
(s/def ::pubkey number?) ;The public key of the user
(s/def ::keys ::profile-type/profile)
(s/def ::mem (s/keys :req-un [::relay-type/relays
::pubkey
::keys]
:opt-un [::request-hours-ago
::websocket-backlog
::active-subscriptions
::tabs-list
::tab-tree-map
::frame
::selected-event
::selected-tab
::node-map
::days-changed
::earliest-loaded-time
::user-configuration
::orphaned-replies
::backing-up
::event-history
::event-counter
::back-count
::send-chan
::article-window
::article-panel
::refresh-main-window
::relay-manager-frame
::tabs-window
::user-window
::event-handler]))
(def memory (atom nil))
(defn conform-mem []
(when-let [error (s/explain-data ::mem @memory)]
(prn 'conform-mem error)))
(defn get-mem
([]
memory)

View File

@ -1,25 +1,9 @@
(ns more-speech.nostr.relays
(:require [clojure.spec.alpha :as s]
[clojure.string :as string]
(more-speech
[config :as config]
[relay :as relay]
[websocket-relay :as ws-relay])
(:require [clojure.string :as string]
[more-speech.config :as config]
[more-speech.logger.default :refer [log-pr]]
[more-speech.mem :refer :all]))
(defn- connection? [c]
(= (::relay/type c) ::ws-relay/websocket))
(s/def ::read #{:read-all :read-trusted :read-web-of-trust :read-none})
(s/def ::write boolean?)
(s/def ::retries integer?)
(s/def ::retrying boolean?)
(s/def ::subscribed boolean?)
(s/def ::connection (s/nilable connection?))
(s/def ::relay (s/keys :req-un [::read ::write ::subscribed ::connection]
:req-opt [::retries ::retrying]))
(s/def ::relays (s/map-of string? ::relay))
(defn set-relay-defaults [relays]
(loop [urls (keys relays)
relays relays]

View File

@ -0,0 +1,30 @@
(ns more-speech.types.profile
(:require [clojure.spec.alpha :as s]))
(s/def ::public-key #(re-matches #"[0-9a-f]{64}" %))
(s/def ::private-key #(re-matches #"[0-9a-f]{64}" %))
(s/def ::name string?)
(s/def ::about string?)
(s/def ::picture string?)
(s/def ::lud16 string?)
(s/def ::lud06 string?)
(s/def ::banner string?)
(s/def ::display-name string?)
(s/def ::website string?)
(s/def ::created-at number?)
(s/def ::wallet-connect string?)
(s/def ::password string?)
(s/def ::profile (s/keys :req-un [::name
::about
::picture
::public-key
::private-key]
:req-opt [::lud16
::lud06
::banner
::display-name
::website
::nip05
::created-at
::wallet-connect
::password]))

View File

@ -0,0 +1,15 @@
(ns more-speech.types.relay
(:require [clojure.spec.alpha :as s]))
(defn- connection? [c]
(= (:more-speech.relay/type c) :more-speech.websocket-relay/websocket))
(s/def ::read #{:read-all :read-trusted :read-web-of-trust :read-none})
(s/def ::write boolean?)
(s/def ::retries integer?)
(s/def ::retrying boolean?)
(s/def ::subscribed boolean?)
(s/def ::connection (s/nilable connection?))
(s/def ::relay (s/keys :req-un [::read ::write ]
:req-opt [::connection ::subscribed ::retries ::retrying]))
(s/def ::relays (s/map-of string? ::relay))

View File

@ -2,7 +2,7 @@
(:require [clojure.core.async :as async]
[more-speech.config :as config] ;break cycle.
[more-speech.logger.default :refer [log-pr]]
[more-speech.mem :refer :all]
[more-speech.mem :refer :all :as mem]
[more-speech.nostr.event-dispatcher :as handlers]
[more-speech.ui.swing.article-panel :as article-panel]
[more-speech.ui.swing.profile-window :as profile-window]
@ -104,6 +104,8 @@
(defn setup-main-timer []
(let [main-timer (Timer. "main timer")
spec-task (proxy [TimerTask] []
(run [] (mem/conform-mem)))
prune-tabs-task (proxy [TimerTask] []
(run [] (tabs/prune-tabs)))
repaint-task (proxy [TimerTask] []
@ -116,7 +118,9 @@
(long prune-tabs-frequency)
(long prune-tabs-frequency))
(.schedule main-timer repaint-task 3000 3000)
(.schedule main-timer reload-article-task 1000 1000)))
(.schedule main-timer reload-article-task 1000 1000)
(when (config/is-test-run?)
(.schedule main-timer spec-task 5000 5000))))
(defn setup-main-window []
(setup-main-timer)