Repaint main window every second so that when new profile events come in, the names are re-rendered.

Set up the user window for the same thing.
This commit is contained in:
Robert C. Martin 2023-04-20 09:59:04 -05:00
parent 208c8b529d
commit 3cc57090c8
7 changed files with 55 additions and 23 deletions

View File

@ -18,6 +18,8 @@
(def migration-level 10)
(def version "2023-04-19T14:41")
(def kinds-not-to-validate [7])
(def subscription-id-base "ms")
(def test-run? (atom false))

View File

@ -8,8 +8,8 @@
[more-speech.nostr.elliptic-signature :as ecc]
[more-speech.nostr.events :as events]
[more-speech.nostr.relays :as relays]
[more-speech.nostr.zaps :as zaps]
[more-speech.nostr.util :refer :all :as util])
[more-speech.nostr.util :refer :all :as util]
[more-speech.nostr.zaps :as zaps])
(:import (ecdhJava SECP256K1)))
(defprotocol event-handler
@ -113,9 +113,11 @@
(defn process-event [event url]
(let [db (get-db)
{:keys [id pubkey _created-at kind _tags _content sig]} event
valid? (ecc/do-verify (util/num->bytes 32 id)
(util/num->bytes 32 pubkey)
(util/num->bytes 64 sig))]
valid? (if (contains? config/kinds-not-to-validate kind)
true
(ecc/do-verify (util/num->bytes 32 id)
(util/num->bytes 32 pubkey)
(util/num->bytes 64 sig)))]
(if (not valid?)
(log-pr 1 'signature-verification-failed url event)
(condp = kind

View File

@ -18,13 +18,16 @@
date (Date. (long time))]
(.format (SimpleDateFormat. "MM/dd/yyyy kk:mm:ss z") date)))
(defn request-metadata-and-contacts-for-user [author]
(doseq [url (keys @relays)]
(when (not= :read-none (get-in @relays [url :read]))
(let [relay (:connection (get @relays url))]
(when (some? relay)
(relay/send relay
["REQ" "ms-author" {"kinds" [0 3] "authors" [(util/hexify author)]}]))))))
(defn request-profiles-and-contacts-for [authors]
(let [authors (if (coll? authors) authors [authors])
hexified-authors (map util/hexify authors)
r (rand-int 1000000)]
(doseq [url (keys @relays)]
(when (not= :read-none (get-in @relays [url :read]))
(let [relay (:connection (get @relays url))]
(when (some? relay)
(relay/send relay
["REQ" (str "ms-authors-" r) {"kinds" [0 3] "authors" hexified-authors}])))))))
(defn request-contact-lists [relay]
(let [now (quot (System/currentTimeMillis) 1000)
@ -261,6 +264,8 @@
check-open-task (proxy [TimerTask] []
(run [] (check-all-active-relays)))
s60 (long 60000)]
(doseq [kind [0 1 2 3 4 7 9735]]
(set-mem [:event-counter :kinds kind] 0))
(.schedule timer check-open-task s60 s60)))

View File

@ -263,7 +263,7 @@
zap-items (map format-zap (:zaps event))
event-id (select main-frame [:#id-label])
author-name-label (select main-frame [:#author-name-label])]
(protocol/request-metadata-and-contacts-for-user (:pubkey event))
(protocol/request-profiles-and-contacts-for (:pubkey event))
(text! reactions-label (str reactions))
(if reacted?
(do

View File

@ -81,15 +81,23 @@
(show! main-frame)
(log-pr 2 'make-main-window 'shown)))
(defn repaint-main-window []
(let [frame (get-mem :frame)]
(when (some? frame)
(.repaint frame))))
(defn setup-main-timer []
(let [main-timer (Timer. "main timer")
prune-tabs-task (proxy [TimerTask] []
(run [] (tabs/prune-tabs)))
repaint-task (proxy [TimerTask] []
(run [] (repaint-main-window)))
prune-tabs-frequency (* config/prune-tabs-frequency-in-minutes 60 1000)]
(.schedule main-timer
prune-tabs-task
(long prune-tabs-frequency)
(long prune-tabs-frequency))))
(long prune-tabs-frequency))
(.schedule main-timer repaint-task 1000 1000)))
(defn setup-main-window []
(setup-main-timer)

View File

@ -214,7 +214,9 @@
(config! relays-menu :enabled? false)
(set-mem :relay-manager-frame relay-frame)
(config! relay-frame :content relay-box)
(listen relay-frame :window-closing close-relay-manager)
(listen relay-frame :window-closing (partial
close-relay-manager
relay-manager-timer))
(scroll-to-top relay-box)
(show! relay-frame)
(.schedule relay-manager-timer relay-manager-task 1000 1000)
@ -240,7 +242,8 @@
(.startsWith (config field :text) "<"))
(config! field :text "wss://"))))
(defn close-relay-manager [_e]
(defn close-relay-manager [timer _e]
(.cancel timer)
(set-mem :relay-manager-frame nil)
(let [relays-menu (select (get-mem :frame) [:#relays-menu])]
(config! relays-menu :enabled? true)))

View File

@ -16,9 +16,11 @@
[more-speech.ui.swing.article-panel :as article-panel]
[more-speech.ui.swing.tabs :as tabs])
(:use (seesaw [core]))
(:import (java.awt Point)))
(:import (java.awt Point)
(java.util Timer TimerTask)))
(defn close-users-frame [users-menu _e]
(defn close-users-frame [users-menu timer _e]
(.cancel timer)
(config! users-menu :enabled? true)
(when (get-mem [:user-window :contact-list-changed])
(when-not (config/is-test-run?)
@ -47,13 +49,15 @@
(set (get-mem [:user-window :trusted-users])))
recent-user-items (make-sorted-listbox-items recent-users)]
(set-mem [:user-window :recent-users] recent-users)
(set-mem [:user-window :recent-user-items] recent-user-items)))
(set-mem [:user-window :recent-user-items] recent-user-items)
(protocol/request-profiles-and-contacts-for recent-users)))
(defn load-trusted-users []
(let [trusted-users (contact-list/get-trustees)]
(set-mem [:user-window :trusted-users] trusted-users)
(set-mem [:user-window :trusted-user-items]
(make-sorted-listbox-items trusted-users))))
(make-sorted-listbox-items trusted-users))
(protocol/request-profiles-and-contacts-for trusted-users)))
(defn load-web-of-trust-users []
(let [web-of-trust-ids (contact-list/get-web-of-trust)
@ -62,7 +66,8 @@
(set (get-mem [:user-window :trusted-users])))]
(set-mem [:user-window :web-of-trust-users] reduced-web-of-trust-users)
(set-mem [:user-window :web-of-trust-items]
(make-sorted-listbox-items reduced-web-of-trust-users))))
(make-sorted-listbox-items reduced-web-of-trust-users))
(protocol/request-profiles-and-contacts-for reduced-web-of-trust-users)))
(defn load-user-window-data []
(load-trusted-users)
@ -164,6 +169,9 @@
)
)
(defn- repaint-user-window [frame]
(.repaint frame))
(defn make-users-frame [_e]
(let [users-menu (select (get-mem :frame) [:#users-menu])
users-frame (frame :title "Users")
@ -201,15 +209,19 @@
users-panel (horizontal-panel :items [trusted-users-panel
(vertical-panel :items [trust-button
untrust-button])
selection-panel])]
selection-panel])
user-window-timer (Timer. "User window timer")
user-window-repaint-task (proxy [TimerTask] []
(run [] repaint-user-window users-frame))]
(set-mem [:user-window :selection-group] :recent-user-items)
(load-user-window-data)
(config! trusted-users-listbox :model (get-mem [:user-window :trusted-user-items]))
(config! selected-listbox :model (get-mem [:user-window :recent-user-items]))
(config! users-frame :content users-panel)
(listen users-frame :window-closing (partial close-users-frame users-menu))
(listen users-frame :window-closing (partial close-users-frame users-menu user-window-timer))
(listen trusted-users-listbox :mouse-pressed (partial listbox-click trusted-users-listbox))
(listen selected-listbox :mouse-pressed (partial listbox-click selected-listbox))
(config! users-menu :enabled? false)
(.schedule user-window-timer user-window-repaint-task 1000 1000)
(pack! users-frame)
(show! users-frame)))