mirror of
https://github.com/unclebob/more-speech.git
synced 2024-09-30 02:21:02 +00:00
The start of the mem type model.
This commit is contained in:
parent
c5b8b712ae
commit
1d75b621af
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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]
|
||||
|
30
src/more_speech/types/profile.clj
Normal file
30
src/more_speech/types/profile.clj
Normal 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]))
|
15
src/more_speech/types/relay.clj
Normal file
15
src/more_speech/types/relay.clj
Normal 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))
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user