mirror of
https://github.com/unclebob/more-speech.git
synced 2024-09-30 10:30:56 +00:00
Periodically read in all profiles from relays. Uses user-configuration :import-metadata group.
This commit is contained in:
parent
95188fadd8
commit
2f1a539920
@ -19,9 +19,9 @@
|
||||
:last-time-exported lte}}
|
||||
event-context (atom {:user-configuration uc})]
|
||||
(reset! ui-context {:event-context event-context})
|
||||
(should (should-export? (* 12 86400)))
|
||||
(should (should-export? (* 13 86400)))
|
||||
(should-not (should-export? (* 11 86400))))))
|
||||
(should (should-export-profile? (* 12 86400)))
|
||||
(should (should-export-profile? (* 13 86400)))
|
||||
(should-not (should-export-profile? (* 11 86400))))))
|
||||
|
||||
(it "will export if keys file has changed"
|
||||
(with-redefs [keys-last-modified (fn [] (* 3 86400))]
|
||||
@ -30,9 +30,9 @@
|
||||
:last-time-exported lte}}
|
||||
event-context (atom {:user-configuration uc})]
|
||||
(reset! ui-context {:event-context event-context})
|
||||
(should (should-export? (* 12 86400)))
|
||||
(should (should-export? (* 13 86400)))
|
||||
(should (should-export? (* 11 86400))))))
|
||||
(should (should-export-profile? (* 12 86400)))
|
||||
(should (should-export-profile? (* 13 86400)))
|
||||
(should (should-export-profile? (* 11 86400))))))
|
||||
|
||||
(it "won't export if :export-after-days is :never"
|
||||
(let [lte (* 2 86400)
|
||||
@ -40,9 +40,9 @@
|
||||
:last-time-exported lte}}
|
||||
event-context (atom {:user-configuration uc})]
|
||||
(reset! ui-context {:event-context event-context})
|
||||
(should-not (should-export? (* 12 86400)))
|
||||
(should-not (should-export? (* 13 86400)))
|
||||
(should-not (should-export? (* 11 86400))))))
|
||||
(should-not (should-export-profile? (* 12 86400)))
|
||||
(should-not (should-export-profile? (* 13 86400)))
|
||||
(should-not (should-export-profile? (* 11 86400)))))
|
||||
|
||||
(it "sets the last exported time"
|
||||
(let [lte (* 2 86400)
|
||||
@ -50,10 +50,41 @@
|
||||
:last-time-exported lte}}
|
||||
event-context (atom {:user-configuration uc})]
|
||||
(reset! ui-context {:event-context event-context}))
|
||||
(set-last-time-exported 99)
|
||||
(set-last-time-profile-exported 99)
|
||||
(let [event-context (:event-context @ui-context)]
|
||||
(should= 99 (get-in @event-context
|
||||
[:user-configuration :export-user-profile :last-time-exported])))
|
||||
)
|
||||
)
|
||||
|
||||
(context "gather historical metadata"
|
||||
(it "creates the configuration parameters if not present."
|
||||
(let [uc (validate {})]
|
||||
(should (contains? uc :import-metadata))
|
||||
(should= 30 (get-in uc [:import-metadata :import-after-days]))
|
||||
(should= 0 (get-in uc [:import-metadata :last-time-imported]))))
|
||||
|
||||
(it "decides if it is time to import"
|
||||
(let [lti (* 2 86400)
|
||||
uc {:import-metadata {:import-after-days 10
|
||||
:last-time-imported lti}}
|
||||
event-context (atom {:user-configuration uc})]
|
||||
(reset! ui-context {:event-context event-context})
|
||||
(should (should-import-metadata? (* 12 86400)))
|
||||
(should (should-import-metadata? (* 13 86400)))
|
||||
(should-not (should-import-metadata? (* 11 86400)))))
|
||||
|
||||
(it "sets the last imported time"
|
||||
(let [lti (* 2 86400)
|
||||
uc {:import-metadata {:import-after-days 10
|
||||
:last-time-imported lti}}
|
||||
event-context (atom {:user-configuration uc})]
|
||||
(reset! ui-context {:event-context event-context}))
|
||||
(set-last-time-metadata-imported 99)
|
||||
(let [event-context (:event-context @ui-context)]
|
||||
(should= 99 (get-in @event-context
|
||||
[:user-configuration :import-metadata :last-time-imported])))
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
(def days-to-read 10) ;how many daily message files to read in.
|
||||
|
||||
(def migration-level 8)
|
||||
(def version "202207301434")
|
||||
(def version "202207310819")
|
||||
|
||||
(def test-run? false)
|
||||
;---configuration files
|
||||
|
@ -25,6 +25,11 @@
|
||||
(.format (SimpleDateFormat. "MM/dd/yyyy kk:mm:ss z") date))
|
||||
)
|
||||
|
||||
|
||||
(defn request-metadata [^WebSocket conn id]
|
||||
(send-to conn ["REQ" id {"kinds" [0] "since" 0}])
|
||||
(.request conn 1))
|
||||
|
||||
(defn subscribe
|
||||
([conn id]
|
||||
(subscribe conn id (int (- (quot (System/currentTimeMillis) 1000) 86400))))
|
||||
@ -134,6 +139,16 @@
|
||||
(swap! relays assoc-in [url :connection] connection))))
|
||||
(prn 'relay-connection-attempts-complete))
|
||||
|
||||
|
||||
(defn request-metadata-from-relays [id]
|
||||
(prn 'requesting-metadata)
|
||||
(doseq [url (keys @relays)]
|
||||
(let [conn (get-in @relays [url :connection])
|
||||
read? (get-in @relays [url :read])]
|
||||
(when (and read? (some? conn))
|
||||
(unsubscribe conn id)
|
||||
(request-metadata conn id)))))
|
||||
|
||||
(defn subscribe-to-relays [id subscription-time]
|
||||
(let [date (- subscription-time 100)]
|
||||
(prn 'subscription-date date (format-time date))
|
||||
@ -168,19 +183,23 @@
|
||||
(close-connection conn id)))))
|
||||
|
||||
(defn get-events [event-context subscription-time]
|
||||
(let [id "more-speech"
|
||||
(let [subscription-id "more-speech"
|
||||
metadata-request-id "more-speech-metadata"
|
||||
event-handler (:event-handler @event-context)
|
||||
now-in-seconds (quot (System/currentTimeMillis) 1000)]
|
||||
(connect-to-relays event-context)
|
||||
(subscribe-to-relays id subscription-time)
|
||||
(when (user-configuration/should-import-metadata? now-in-seconds)
|
||||
(request-metadata-from-relays metadata-request-id)
|
||||
(user-configuration/set-last-time-metadata-imported now-in-seconds))
|
||||
(subscribe-to-relays subscription-id subscription-time)
|
||||
(events/update-relay-panel event-handler)
|
||||
(if (user-configuration/should-export? now-in-seconds)
|
||||
(if (user-configuration/should-export-profile? now-in-seconds)
|
||||
(do
|
||||
(user-configuration/set-last-time-exported now-in-seconds)
|
||||
(user-configuration/set-last-time-profile-exported now-in-seconds)
|
||||
(future (events/compose-and-send-metadata-event @event-context)))
|
||||
(println "Not time to export profile yet."))
|
||||
(let [exit-condition (process-send-channel event-context)]
|
||||
(unsubscribe-from-relays id)
|
||||
(unsubscribe-from-relays subscription-id)
|
||||
(Thread/sleep 100)
|
||||
(prn 'done)
|
||||
exit-condition))
|
||||
|
@ -11,15 +11,25 @@
|
||||
(assoc user-configuration :export-user-profile xup))
|
||||
)
|
||||
|
||||
(defn validate-import-metadata [uc]
|
||||
(let [im (get uc :import-metadata {})
|
||||
iad (get im :import-after-days 30)
|
||||
lti (get im :last-time-imported 0)
|
||||
im (assoc im :import-after-days iad
|
||||
:last-time-imported lti)]
|
||||
(assoc uc :import-metadata im)))
|
||||
|
||||
(defn validate [user-configuration]
|
||||
(let [valid-config (validate-export-user-profile user-configuration)]
|
||||
valid-config))
|
||||
(-> user-configuration
|
||||
validate-export-user-profile
|
||||
validate-import-metadata)
|
||||
)
|
||||
|
||||
(defn keys-last-modified []
|
||||
(let [keys-file (clojure.java.io/file @config/keys-filename)]
|
||||
(quot (.lastModified keys-file) 1000)))
|
||||
|
||||
(defn should-export? [now-in-seconds]
|
||||
(defn should-export-profile? [now-in-seconds]
|
||||
(let [user-configuration (:user-configuration @(:event-context @ui-context))
|
||||
xad (get-in user-configuration [:export-user-profile :export-after-days])
|
||||
lte (get-in user-configuration [:export-user-profile :last-time-exported])]
|
||||
@ -28,9 +38,23 @@
|
||||
(>= (keys-last-modified) lte))))
|
||||
)
|
||||
|
||||
(defn set-last-time-exported [export-time]
|
||||
(defn set-last-time-profile-exported [export-time]
|
||||
(let [event-context (:event-context @ui-context)]
|
||||
(swap! event-context
|
||||
assoc-in
|
||||
[:user-configuration :export-user-profile :last-time-exported]
|
||||
export-time)))
|
||||
|
||||
(defn should-import-metadata? [now-in-seconds]
|
||||
(let [user-configuration (:user-configuration @(:event-context @ui-context))
|
||||
iad (get-in user-configuration [:import-metadata :import-after-days])
|
||||
lti (get-in user-configuration [:import-metadata :last-time-imported])]
|
||||
(and (number? iad)
|
||||
(>= now-in-seconds (+ lti (* 86400 iad))))))
|
||||
|
||||
(defn set-last-time-metadata-imported [import-time]
|
||||
(let [event-context (:event-context @ui-context)]
|
||||
(swap! event-context
|
||||
assoc-in
|
||||
[:user-configuration :import-metadata :last-time-imported]
|
||||
import-time)))
|
Loading…
Reference in New Issue
Block a user