Save and read message file. Set subscription time to just before last message time. Migration 3 creates messages directory and message-file.

This commit is contained in:
Robert C. Martin 2022-06-17 10:30:11 -05:00
parent 89868f3d0d
commit 672c5ce69a
6 changed files with 71 additions and 27 deletions

View File

@ -12,6 +12,8 @@
(reset! config/relays-filename "tmp/relays")
(reset! config/read-event-ids-filename "tmp/read-event-ids")
(reset! config/tabs-filename "tmp/tabs")
(reset! config/messages-directory "tmp/messages")
(reset! config/messages-filename "tmp/messages/message-file")
(.mkdir (io/file "tmp"))
)
@ -22,6 +24,8 @@
(delete-file "tmp/relays")
(delete-file "tmp/read-event-ids")
(delete-file "tmp/tabs")
(delete-file "tmp/messages/message-file")
(delete-file "tmp/messages")
)
@ -113,7 +117,15 @@
4 "dud-12"
5 "dud-12"
6 "dudx-12"}
nicknames))
)))
nicknames))))))
(context "migration 3"
(it "adds messages directory and empty message-file"
(migration-3-add-messages-directory)
(should (file-exists? @config/messages-directory))
(should (is-directory? @config/messages-directory))
(should (file-exists? @config/messages-filename))
(should= {} (read-string (slurp @config/messages-filename)))
)
)
)

View File

@ -6,9 +6,9 @@
(def article-width 120)
(def subscribe-days-ago 4) ;get n days worth of events from the relays.
(def subscribe-days-ago 10) ;get n days worth of events from the relays.
(def migration-level 2)
(def migration-level 3)
;---configuration files
(def private-directory (atom "private"))
(def migration-filename (atom "private/migration"))
@ -17,6 +17,8 @@
(def relays-filename (atom "private/relays"))
(def read-event-ids-filename (atom "private/read-event-ids"))
(def tabs-filename (atom "private/tabs"))
(def messages-directory (atom "private/messages"))
(def messages-filename (atom "private/messages/message-file"))
(def user-name-pattern #"\@[\w\-]+")
(def user-name-chars #"[\w\-]+")

View File

@ -17,7 +17,8 @@
(declare more-speech
setup-jframe
set-event-handler)
set-event-handler
read-old-events)
(defn ^:export -main [& _args]
(migrator/migrate-to config/migration-level)
@ -36,7 +37,8 @@
handler (swing/setup-main-window)
]
(swap! event-context set-event-handler handler)
(protocol/get-events event-context)
(let [latest-old-message-time (read-old-events event-context handler)]
(protocol/get-events event-context latest-old-message-time))
(spit @config/nicknames-filename
(with-out-str
(clojure.pprint/pprint (:nicknames @event-context))))
@ -46,11 +48,22 @@
(spit @config/relays-filename
(with-out-str
(clojure.pprint/pprint (relays/relays-for-writing))))
(spit @config/messages-filename
(with-out-str
(clojure.pprint/pprint (:text-event-map @event-context))))
(System/exit 1)))
(defn set-event-handler [event-state handler]
(assoc event-state :event-handler handler))
(defn set-event-handler [event-state handler]
(assoc event-state :event-handler handler))
(defn read-old-events [event-context handler]
(let [old-events (vals (read-string (slurp @config/messages-filename)))]
(doseq [event old-events]
(let [url (first (:relays event))]
(swap! event-context events/add-event event url)
(events/handle-text-event handler event))
)
(apply max (map :created-at old-events))))

View File

@ -11,6 +11,9 @@
(defn file-exists? [fname]
(.exists (io/file fname)))
(defn is-directory? [fname]
(.isDirectory (io/file fname)))
(defn delete-file [fname]
(when (file-exists? fname)
(io/delete-file fname)))
@ -60,9 +63,20 @@
(spit @config/nicknames-filename fixed-nicknames)
))
(defn migration-3-add-messages-directory []
(when-not (file-exists? @config/messages-directory)
(.mkdir (io/file @config/messages-directory))
(spit @config/messages-filename {}))
)
;---------- The Migrations List -------
(def migrations (atom {1 initial-migration
2 migration-2-fix-names}))
2 migration-2-fix-names
3 migration-3-add-messages-directory
}))
;--------------------------------------
(defn set-migration-level [n]
(spit @migration-filename {:migration-level n}))

View File

@ -94,7 +94,8 @@
(declare translate-event
process-text-event
process-name-event
process-server-recommendation)
process-server-recommendation
process-like)
(defn process-event [{:keys [nicknames] :as event-state} event url]
(let [_name-of (fn [pubkey] (get nicknames pubkey pubkey))
@ -112,10 +113,13 @@
0 (process-name-event event-state event)
1 (process-text-event event-state event url)
2 (process-server-recommendation event-state event)
7 (do (prn 'process-event 'like event) event-state)
7 (process-like event-state event)
(do #_(prn "unknown event: " url event)
event-state)))))
(defn process-like [event-state _event]
event-state)
(declare fix-name)
(defn process-name-event [event-state {:keys [_id pubkey _created-at _kind _tags content _sig] :as event}]
(try

View File

@ -81,12 +81,9 @@
(onBinary [_this _webSocket _data _last]
(prn 'binary))
(onPing [_this webSocket message]
(prn 'ping url)
(.sendPong webSocket message)
(.request webSocket 1)
(prn 'sent-pong))
(.request webSocket 1))
(onPong [_this webSocket _message]
(prn 'pong url)
(.request webSocket 1))
(onClose [_this _webSocket statusCode reason]
(prn 'close url statusCode reason))
@ -119,13 +116,8 @@
(let [connection (connect-to-relay url event-context)]
(swap! relays assoc-in [url :connection] connection))))
(defn subscribe-to-relays [id]
(let [
date (-> (t/local-date-time)
(t/minus (t/days config/subscribe-days-ago))
(t/adjust (t/local-time 0)))
date (.toEpochSecond date ZoneOffset/UTC)
]
(defn subscribe-to-relays [id subscription-time]
(let [date (- subscription-time 100)]
(prn 'subscription-date date (format-time date))
(doseq [url (keys @relays)]
(let [conn (get-in @relays [url :connection])
@ -156,15 +148,22 @@
(prn 'closing url)
(close-connection conn id)))))
(defn get-events [event-context]
(defn get-events [event-context subscription-time]
(let [id "more-speech"
event-handler (:event-handler @event-context)]
(connect-to-relays event-context)
(subscribe-to-relays id)
(subscribe-to-relays id subscription-time)
(events/update-relay-panel event-handler)
(future (events/compose-and-send-metadata-event @event-context))
(process-send-channel event-context)
(unsubscribe-from-relays id))
(Thread/sleep 100)
(prn 'done)
)
)
(defn calc-subscription-date []
(let [date (-> (t/local-date-time)
(t/minus (t/days config/subscribe-days-ago))
(t/adjust (t/local-time 0)))
date (.toEpochSecond date ZoneOffset/UTC)]
date))