From 4676aba4ca5650f10e84c82c3e85fc1b1f8b7132 Mon Sep 17 00:00:00 2001 From: "Robert C. Martin" Date: Wed, 10 Aug 2022 13:31:49 -0500 Subject: [PATCH] add root of thread when adding an event to a tab. --- spec/more_speech/nostr/events_spec.clj | 7 ++++ .../ui/swing/article_tree_spec.clj | 32 ++++++++++++++++++- src/more_speech/nostr/events.clj | 7 ++++ src/more_speech/ui/swing/article_tree.clj | 3 +- 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/spec/more_speech/nostr/events_spec.clj b/spec/more_speech/nostr/events_spec.clj index c9dcb07..36bb2a0 100644 --- a/spec/more_speech/nostr/events_spec.clj +++ b/spec/more_speech/nostr/events_spec.clj @@ -370,6 +370,13 @@ (should= 2 root) (should= 2 referent) (should= [1 4] mentions))) + + (it "finds the root when only root is marked." + (let [event {:tags [[:e (hexify 2) "" "root"]]} + [root mentions referent] (get-references event)] + (should= 2 root) + (should= 2 referent) + (should= [] mentions))) ) (describe "json" diff --git a/spec/more_speech/ui/swing/article_tree_spec.clj b/spec/more_speech/ui/swing/article_tree_spec.clj index 8808865..327de40 100644 --- a/spec/more_speech/ui/swing/article_tree_spec.clj +++ b/spec/more_speech/ui/swing/article_tree_spec.clj @@ -5,7 +5,8 @@ [more-speech.ui.swing.article-tree-util :refer :all] [more-speech.nostr.util :as util] [more-speech.ui.swing.ui-context :refer :all] - [more-speech.ui.swing.article-panel :as article-panel]) + [more-speech.ui.swing.article-panel :as article-panel] + [more-speech.ui.swing.util :as swing-util]) (:import (javax.swing.tree DefaultMutableTreeNode))) (defn hexify [n] (util/num32->hex-string n)) @@ -497,4 +498,33 @@ _ (.add child2 (DefaultMutableTreeNode. 4)) copied-node (copy-node node)] (should= [1 [2] [3 [4]]] (depict-node copied-node)))) + ) + +(describe "adding ids to tabs" + (with-stubs) + (it "adds an an unrooted article id to a tab" + (let [message-id 1 + messages {message-id {:tags []}} + event-context (atom {:text-event-map messages}) + ] + (reset! ui-context {:event-context event-context}) + (with-redefs [swing-util/add-id-to-tab (stub :add-id-to-tab) + swing-util/relaunch (stub :relaunch)] + (add-article-to-tab 1 "tab" nil) + (should-have-invoked :relaunch) + (should-have-invoked :add-id-to-tab {:with ["tab" :selected 1]})))) + + (it "adds the root id of a thread to a tab" + (let [message-id 1 + root-id 100 + messages {message-id {:tags [[:e (hexify root-id) "" "root"]]}} + event-context (atom {:text-event-map messages}) + ] + (reset! ui-context {:event-context event-context}) + (with-redefs [swing-util/add-id-to-tab (stub :add-id-to-tab) + swing-util/relaunch (stub :relaunch)] + (add-article-to-tab message-id "tab" nil) + (should-have-invoked :relaunch) + (should-have-invoked :add-id-to-tab {:with ["tab" :selected root-id]}) + ))) ) \ No newline at end of file diff --git a/src/more_speech/nostr/events.clj b/src/more_speech/nostr/events.clj index 25ee205..671610d 100644 --- a/src/more_speech/nostr/events.clj +++ b/src/more_speech/nostr/events.clj @@ -193,6 +193,13 @@ (prn 'get-references 'bad-tags-in-event (.getMessage e) event) [nil nil nil]))) +(defn get-root-of-thread [id] + (let [event-context (:event-context @ui-context) + messages (:text-event-map @event-context) + event (get messages id) + [root _ _] (get-references event)] + (if (some? root) root id))) + (defn process-references [state event] (let [[_ _ referent] (get-references event)] (if (nil? referent) diff --git a/src/more_speech/ui/swing/article_tree.clj b/src/more_speech/ui/swing/article_tree.clj index d0ee1d0..15447c7 100644 --- a/src/more_speech/ui/swing/article_tree.clj +++ b/src/more_speech/ui/swing/article_tree.clj @@ -82,7 +82,8 @@ (defn add-article-to-tab [event-id tab-name _e] (when-let [tab-name (if-new-tab tab-name)] - (swing-util/add-id-to-tab tab-name :selected event-id) + (let [root-of-thread (events/get-root-of-thread event-id)] + (swing-util/add-id-to-tab tab-name :selected root-of-thread)) (swing-util/relaunch))) (defn block-article-from-tab [event-id tab-name _e]