persistent storage for simple chat app
This commit is contained in:
parent
a416bf279d
commit
8a1d690518
|
@ -44,7 +44,7 @@
|
|||
|
||||
(defn init-protocol
|
||||
"Required [handler ethereum-rpc-url storage]
|
||||
Optional [whisper-identity - if not passed a new identity is created automatically
|
||||
Optional [identity - if not passed a new identity is created automatically
|
||||
active-group-ids - list of active group ids]
|
||||
|
||||
(fn handler [{:keys [event-type...}])
|
||||
|
@ -58,7 +58,7 @@
|
|||
:delivery-failed [msg-id]
|
||||
:new-group-chat [from group-id]
|
||||
:group-chat-invite-acked [ack-msg-id from group-id]
|
||||
:group-new-participant [identity group-id]
|
||||
:group-new-participant [identity group-id from msg-id]
|
||||
:group-removed-participant [from identity group-id]
|
||||
:removed-from-group [from group-id]
|
||||
:participant-left-group [from group-id]
|
||||
|
|
|
@ -93,7 +93,8 @@
|
|||
(add-identity store group-topic identity)
|
||||
(invoke-user-handler :group-new-participant {:identity identity
|
||||
:group-id group-topic
|
||||
:from from})))
|
||||
:from from
|
||||
:msg-id msg-id})))
|
||||
(log/warn "Ignoring group-new-participant for group" group-topic "from a non group-admin user" from))))
|
||||
|
||||
(defn handle-group-removed-participant [web3 from {:keys [keypair group-topic msg-id removed-identity]}]
|
||||
|
|
|
@ -9,7 +9,10 @@
|
|||
[goog.events.KeyCodes]
|
||||
[goog.events.KeyHandler]
|
||||
[goog.events.KeyHandler.EventType :as key-handler-events]
|
||||
[syng-im.protocol.state.storage :as st])
|
||||
[syng-im.protocol.state.storage :as st]
|
||||
[goog.storage.Storage :as gstore]
|
||||
[goog.storage.mechanism.HTML5LocalStorage :as html5localstore]
|
||||
[cljs.reader :refer [read-string]])
|
||||
(:import [goog.events EventType]
|
||||
[goog.events KeyCodes]))
|
||||
|
||||
|
@ -21,20 +24,25 @@
|
|||
;; (swap! app-state update-in [:__figwheel_counter] inc)
|
||||
)
|
||||
|
||||
(defrecord MapStore [m]
|
||||
(defn local-storage []
|
||||
(let [mech (goog.storage.mechanism.HTML5LocalStorage.)
|
||||
store (goog.storage.Storage. mech)]
|
||||
store))
|
||||
|
||||
(defrecord MapStore [local prefix]
|
||||
st/Storage
|
||||
(put [this key value]
|
||||
(swap! m assoc key value))
|
||||
(get [this key]
|
||||
(get @m key))
|
||||
(put [_ key value]
|
||||
(.set local (str prefix key) (pr-str value)))
|
||||
(get [_ key]
|
||||
(some-> (.get local (str prefix key))
|
||||
(read-string)))
|
||||
(contains-key? [this key]
|
||||
(contains? @m key))
|
||||
(delete [this key]
|
||||
(swap! m dissoc key)))
|
||||
(st/get this key))
|
||||
(delete [_ key]
|
||||
(.remove local (str prefix key))))
|
||||
|
||||
(defonce state (atom {:group-id nil
|
||||
:group-identities nil
|
||||
:storage (map->MapStore {:m (atom {})})}))
|
||||
:group-identities nil}))
|
||||
|
||||
(defn shorten [s]
|
||||
(subs s 0 6))
|
||||
|
@ -72,10 +80,14 @@
|
|||
|
||||
(defn start []
|
||||
(let [rpc-url (-> (g/getElement "rpc-url")
|
||||
(f/getValue))]
|
||||
(f/getValue))
|
||||
storage (map->MapStore {:local (local-storage)
|
||||
:prefix rpc-url})
|
||||
identity (st/get storage :identity)]
|
||||
(p/init-protocol
|
||||
{:ethereum-rpc-url rpc-url
|
||||
:storage (:storage @state)
|
||||
:storage storage
|
||||
:identity identity
|
||||
:handler (fn [{:keys [event-type] :as event}]
|
||||
(log/info "Event:" (clj->js event))
|
||||
(case event-type
|
||||
|
@ -86,6 +98,7 @@
|
|||
(add-to-chat "chat" ":" (str "Message " msg-id " was acked")))
|
||||
:initialized (let [{:keys [identity]} event]
|
||||
(add-to-chat "chat" ":" (str "Initialized, identity is " identity))
|
||||
(st/put storage :identity identity)
|
||||
(-> (g/getElement "my-identity")
|
||||
(f/setValue identity)))
|
||||
:delivery-failed (let [{:keys [msg-id]} event]
|
||||
|
@ -219,7 +232,7 @@
|
|||
|
||||
(require '[syng-im.protocol.web3 :as w])
|
||||
(def web3 (w/make-web3 "http://localhost:4546"))
|
||||
(.newIdentity (w/whisper web3) (fn [error result]
|
||||
(.newIdentity (w/whisp er web3) (fn [error result]
|
||||
(println error result)))
|
||||
|
||||
(.sendAsync (.-currentProvider web3)
|
||||
|
|
Loading…
Reference in New Issue