From c511a1566dab2733eed46a79ba1f16135e83e897 Mon Sep 17 00:00:00 2001 From: "Robert C. Martin" Date: Thu, 6 Apr 2023 12:22:08 -0500 Subject: [PATCH] User window seems to function properly. Can trust and untrust users. --- spec/more_speech/nostr/trust_updater_spec.clj | 31 ++++++---- src/more_speech/nostr/event_handlers.clj | 3 +- src/more_speech/nostr/trust_updater.clj | 7 +++ src/more_speech/ui/swing/users_window.clj | 59 ++++++++++++++++--- 4 files changed, 80 insertions(+), 20 deletions(-) diff --git a/spec/more_speech/nostr/trust_updater_spec.clj b/spec/more_speech/nostr/trust_updater_spec.clj index 81ca063..8e6f638 100644 --- a/spec/more_speech/nostr/trust_updater_spec.clj +++ b/spec/more_speech/nostr/trust_updater_spec.clj @@ -1,10 +1,10 @@ (ns more-speech.nostr.trust-updater-spec - (:require [speclj.core :refer :all] - [more-speech.nostr.trust-updater :refer :all] - [more-speech.mem :refer :all] - [more-speech.db.in-memory :as in-memory] + (:require [more-speech.config :as config] [more-speech.db.gateway :as gateway] - [more-speech.config :as config])) + [more-speech.db.in-memory :as in-memory] + [more-speech.mem :refer :all] + [more-speech.nostr.trust-updater :refer :all] + [speclj.core :refer :all])) (declare db) (describe "Setting Trust" @@ -28,16 +28,27 @@ (let [my-pubkey 1 contacts [{:pubkey 1} {:pubkey 3 :petname "the-old-petname"} - {:pubkey 2}] - ] + {:pubkey 2}]] (set-mem :pubkey my-pubkey) (gateway/add-contacts @db my-pubkey contacts) (entrust 3 "the-new-petname") - (let [my-contacts - (gateway/get-contacts @db my-pubkey) - ] + (let [my-contacts (gateway/get-contacts @db my-pubkey)] (should= (set [{:pubkey 1} {:pubkey 2} {:pubkey 3 :petname "the-new-petname"}]) (set my-contacts))))) + + (it "untrusts a user" + (let [my-pubkey 1 + contacts [{:pubkey 1} + {:pubkey 2} + {:pubkey 3 :petname "petname"}]] + (set-mem :pubkey my-pubkey) + (gateway/add-contacts @db my-pubkey contacts) + (untrust 2) + (let [my-contacts + (gateway/get-contacts @db my-pubkey)] + (should= (set [{:pubkey 1} + {:pubkey 3 :petname "petname"}]) + (set my-contacts))))) ) diff --git a/src/more_speech/nostr/event_handlers.clj b/src/more_speech/nostr/event_handlers.clj index 9d7c3fd..7cf1d0e 100644 --- a/src/more_speech/nostr/event_handlers.clj +++ b/src/more_speech/nostr/event_handlers.clj @@ -61,8 +61,7 @@ :lud16 lud16 :nip05 nip05 :created-at created-at}] - (gateway/add-profile db pubkey profile-doc) - (log-pr 1 'process-name-event profile)) + (gateway/add-profile db pubkey profile-doc)) (catch Exception e (log-pr 1 'json-exception-process-name-event-ignored (.getMessage e)) (log-pr 1 event)))) diff --git a/src/more_speech/nostr/trust_updater.clj b/src/more_speech/nostr/trust_updater.clj index c701a3c..cea76d0 100644 --- a/src/more_speech/nostr/trust_updater.clj +++ b/src/more_speech/nostr/trust_updater.clj @@ -10,6 +10,13 @@ ) (:use [seesaw.core])) +(defn untrust [his-pubkey] + (let [my-pubkey (get-mem :pubkey) + my-contacts (gateway/get-contacts (get-db) my-pubkey) + reduced-contacts (remove #(= his-pubkey (:pubkey %)) my-contacts)] + (gateway/add-contacts (get-db) my-pubkey reduced-contacts)) + ) + (defn entrust [his-pubkey his-petname] (let [my-pubkey (get-mem :pubkey) my-contacts (gateway/get-contacts (get-db) my-pubkey) diff --git a/src/more_speech/ui/swing/users_window.clj b/src/more_speech/ui/swing/users_window.clj index 687f20b..ed0819f 100644 --- a/src/more_speech/ui/swing/users_window.clj +++ b/src/more_speech/ui/swing/users_window.clj @@ -1,6 +1,7 @@ (ns more-speech.ui.swing.users-window (:require [clojure.set :as set] + [more-speech.bech32 :as bech32] [more-speech.config :as config] [more-speech.config :refer [get-db]] [more-speech.db.gateway :as gateway] @@ -45,12 +46,13 @@ (make-sorted-listbox-items trusted-users)))) (defn load-web-of-trust-users [] - (let [web-of-trust-users (set/difference - (set (contact-list/get-web-of-trust)) - (set (get-mem [:user-window :trusted-users])))] - (set-mem [:user-window :web-of-trust-users] web-of-trust-users) + (let [web-of-trust-ids (contact-list/get-web-of-trust) + reduced-web-of-trust-users (set/difference + (set web-of-trust-ids) + (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 web-of-trust-users)))) + (make-sorted-listbox-items reduced-web-of-trust-users)))) (defn load-user-window-data [] (load-trusted-users) @@ -64,7 +66,7 @@ (defn select-web-of-trust [frame _e] (set-mem [:user-window :selection-group] :web-of-trust-items) - (when (nil? (get-mem [:user-window :web-of-trust-items])) + (when (empty? (get-mem [:user-window :web-of-trust-items])) (load-web-of-trust-users)) (config! (select frame [:#selected-users]) :model (get-mem [:user-window :web-of-trust-items]))) @@ -107,6 +109,41 @@ (.setSelectedValue trusted-listbox new-trusted-item true)))))))) +(defn untrust-selection [frame _e] + (let [trusted-listbox (select frame [:#trusted-users-listbox]) + selected-item (selection trusted-listbox)] + (when (some? selected-item) + (let [untrusted-user (second selected-item) + recent-button (select frame [:#recent-button]) + selected-listbox (select frame [:#selected-users]) + untrusted-name (formatters/format-user-id untrusted-user) + question (dialog :content + (str "Are you sure you want to untrust " untrusted-name + "\nID: " (util/hexify untrusted-user) + "\n" (bech32/encode "npub" untrusted-user)) + :option-type :ok-cancel) + answer (show! (pack! question))] + (when (= answer :success) + (trust-updater/untrust untrusted-user) + (load-trusted-users) + (config! trusted-listbox :model (get-mem [:user-window :trusted-user-items])) + (config! recent-button :selected? true) + (load-recent-users) + (prn 'adding untrusted-user) + (update-mem [:user-window :recent-users] conj untrusted-user) + (prn 'recent-users (get-mem [:user-window :recent-users])) + (set-mem [:user-window :recent-user-items] + (make-sorted-listbox-items + (get-mem [:user-window :recent-users]))) + (config! selected-listbox :model (get-mem [:user-window :recent-user-items])) + (.setSelectedValue selected-listbox + (find-item untrusted-user (get-mem [:user-window :recent-user-items])) + true) + (when-not config/is-test-run? + (let [my-pubkey (get-mem :pubkey) + contacts (gateway/get-contacts (get-db) my-pubkey)] + (event-composers/compose-and-send-contact-list contacts)))))))) + (defn make-users-frame [_e] (let [users-menu (select (get-mem :frame) [:#users-menu]) users-frame (frame :title "Users") @@ -116,14 +153,17 @@ trusted-users-panel (vertical-panel :items [(label "Trusted") (scrollable trusted-users-listbox :size [500 :by 800])]) - trust-button (button :text "<-" + trust-button (button :text "<-Trust" :listen [:action (partial trust-selection users-frame)]) + untrust-button (button :text "Untrust->" + :listen [:action (partial untrust-selection users-frame)]) selection-group (button-group) web-of-trust-button (radio :text "Web of trust" :group selection-group :selected? false :listen [:action (partial select-web-of-trust users-frame)]) recent-button (radio :text "Recent users" + :id :recent-button :group selection-group :selected? true :listen [:action (partial select-recent-users users-frame)]) @@ -138,7 +178,10 @@ scrollable-selected-listbox]) - users-panel (horizontal-panel :items [trusted-users-panel trust-button selection-panel])] + users-panel (horizontal-panel :items [trusted-users-panel + (vertical-panel :items [trust-button + untrust-button]) + selection-panel])] (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]))