From cd3455d7235c23a8de0aa3bc817abe9981c4a71d Mon Sep 17 00:00:00 2001 From: "Robert C. Martin" Date: Fri, 26 May 2023 07:59:37 -0500 Subject: [PATCH] Don't redraw frame unless new name/contact/zap/reaction data has arrived. --- src/more_speech/config.clj | 2 +- src/more_speech/nostr/contact_list.clj | 1 + src/more_speech/nostr/event_dispatcher.clj | 2 + src/more_speech/nostr/zaps.clj | 1 + src/more_speech/ui/formatters.clj | 45 ++++++++++++---------- src/more_speech/ui/swing/main_window.clj | 16 ++++---- 6 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/more_speech/config.clj b/src/more_speech/config.clj index b9cecca..07f4b85 100644 --- a/src/more_speech/config.clj +++ b/src/more_speech/config.clj @@ -22,7 +22,7 @@ (def subscription-id-base "ms") -(def auto-thanks :dm) ;{:dm :note :off} +(def auto-thanks :off) ;{:dm :note :off} (def auto-thanks-fortune :normal) ;{:off :normal :markov :insane} (def test-run? (atom false)) diff --git a/src/more_speech/nostr/contact_list.clj b/src/more_speech/nostr/contact_list.clj index 6752868..5f4793c 100644 --- a/src/more_speech/nostr/contact_list.clj +++ b/src/more_speech/nostr/contact_list.clj @@ -27,6 +27,7 @@ [pubkey contacts])) (defn process-contact-list [db event] + (set-mem :refresh-main-window true) (let [[pubkey contacts] (unpack-contact-list-event event)] (when (seq contacts) (gateway/add-contacts db pubkey contacts)))) diff --git a/src/more_speech/nostr/event_dispatcher.clj b/src/more_speech/nostr/event_dispatcher.clj index c34a685..c6a499c 100644 --- a/src/more_speech/nostr/event_dispatcher.clj +++ b/src/more_speech/nostr/event_dispatcher.clj @@ -38,6 +38,7 @@ (recur pubkey (str name (inc (rand-int max))) (* 10 max)))))) (defn process-name-event [db {:keys [_id pubkey created-at _kind _tags content _sig] :as event}] + (set-mem :refresh-main-window true) (try (let [profile (json/read-str content) name (get profile "name") @@ -111,6 +112,7 @@ target-id (unhexify (second last-e-tag)) reactor (:pubkey event)] (when (gateway/event-exists? db target-id) + (set-mem :refresh-main-window true) (gateway/add-reaction db target-id reactor content))) (catch Exception _e)) ) diff --git a/src/more_speech/nostr/zaps.clj b/src/more_speech/nostr/zaps.clj index 4d406ec..8da8ab1 100644 --- a/src/more_speech/nostr/zaps.clj +++ b/src/more_speech/nostr/zaps.clj @@ -353,6 +353,7 @@ (let [{:keys [id amount comment]} transaction sats (/ amount 1000)] (log-pr 2 'got-zap-receipt (util/hexify id) sats 'sats comment) + (set-mem :refresh-main-window true) (gateway/add-zap-to-event (get-db) id {:lnurl receipt-invoice :created-at (util/get-now) diff --git a/src/more_speech/ui/formatters.clj b/src/more_speech/ui/formatters.clj index 26a1b63..8d3504e 100644 --- a/src/more_speech/ui/formatters.clj +++ b/src/more_speech/ui/formatters.clj @@ -136,27 +136,30 @@ ([event] (format-header event :long)) - ([{:keys [pubkey created-at tags zaps] :as event} opt] - (if (nil? event) - "nil" - (let [format-spec (if (= opt :long) - "%s%s %20s %s %s%s%s\n" - "%s%s %s %s %s%s%s") - content (replace-references event) - content (replace-nostr-references content) - name (format-user-id pubkey) - time (format-time created-at) - subject (get-subject tags) - [reply-id _ _] (events/get-references event) - reply-mark (if (some? reply-id) "^" " ") - dm-mark (if (= 4 (:kind event)) (make-dm-mark event) "") - zap-mark (if (some? zaps) "❗⚡ " "") - reaction-mark (make-reaction-mark event) - header-text (-> content (string/replace \newline \~) (abbreviate 130)) - content (if (empty? subject) - header-text - (abbreviate (str subject "|" header-text) 130))] - (format format-spec reply-mark reaction-mark name time zap-mark dm-mark content))))) + ([{:keys [pubkey created-at content tags zaps] :as event} opt] + (try + (if (nil? event) + "nil" + (let [format-spec (if (= opt :long) + "%s%s %20s %s %s%s%s\n" + "%s%s %s %s %s%s%s") + content (replace-references event) + content (replace-nostr-references content) + name (format-user-id pubkey) + time (format-time created-at) + subject (get-subject tags) + [reply-id _ _] (events/get-references event) + reply-mark (if (some? reply-id) "^" " ") + dm-mark (if (= 4 (:kind event)) (make-dm-mark event) "") + zap-mark (if (some? zaps) "❗⚡ " "") + reaction-mark (make-reaction-mark event) + header-text (-> content (string/replace \newline \~) (abbreviate 130)) + content (if (empty? subject) + header-text + (abbreviate (str subject "|" header-text) 130))] + (format format-spec reply-mark reaction-mark name time zap-mark dm-mark content))) + (catch Exception e + (log-pr 1 'format-header 'Exception (.getMessage e)))))) (defn make-cc-list [event] (let [p-tags (events/get-tag event :p) diff --git a/src/more_speech/ui/swing/main_window.clj b/src/more_speech/ui/swing/main_window.clj index 39b7120..197f571 100644 --- a/src/more_speech/ui/swing/main_window.clj +++ b/src/more_speech/ui/swing/main_window.clj @@ -13,8 +13,8 @@ [more-speech.ui.swing.relay-manager :as relay-manager] [more-speech.ui.swing.stats-window :as stats-window] [more-speech.ui.swing.tabs :as tabs] - [more-speech.ui.swing.users-window :as users-window] - [more-speech.ui.swing.tabs-window :as tabs-window]) + [more-speech.ui.swing.tabs-window :as tabs-window] + [more-speech.ui.swing.users-window :as users-window]) (:use (seesaw [core])) (:import (java.util Timer TimerTask))) @@ -43,8 +43,8 @@ :handler profile-window/make-profile-frame) :id :profile-menu) tabs-item (menu-item :action (action :name "Tabs..." - :handler tabs-window/make-tabs-window) - :id :tabs-menu) + :handler tabs-window/make-tabs-window) + :id :tabs-menu) manage-menu (menu :text "Manage" :items [relays-item stats-item users-item profile-item tabs-item]) menu-bar (menubar :items [manage-menu])] menu-bar)) @@ -81,8 +81,10 @@ (defn repaint-main-window [] (let [frame (get-mem :frame)] (when (some? frame) - (invoke-later (repaint! frame))) - )) + (when (get-mem :refresh-main-window) + (set-mem :refresh-main-window false) + (invoke-later (repaint! frame)) + )))) (defn setup-main-timer [] (let [main-timer (Timer. "main timer") @@ -97,7 +99,7 @@ prune-tabs-task (long prune-tabs-frequency) (long prune-tabs-frequency)) - (.schedule main-timer repaint-task 1000 1000) + (.schedule main-timer repaint-task 3000 3000) (.schedule main-timer reload-article-task 1000 1000))) (defn setup-main-window []