mirror of
https://github.com/unclebob/more-speech.git
synced 2024-09-30 10:30:56 +00:00
Add Subject to edit window, and send message with [subject: <subject>] tag.
This commit is contained in:
parent
02c00be014
commit
149a8e6740
@ -118,12 +118,13 @@
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
(context "composing Text (kind 1) messages"
|
(context "composing Text (kind 1) messages"
|
||||||
(it "composes an original message."
|
(it "composes an original message with no subject."
|
||||||
(let [private-key (num->bytes 64 314159)
|
(let [private-key (num->bytes 64 314159)
|
||||||
event-state {:keys {:private-key (bytes->hex-string private-key)}}
|
event-state {:keys {:private-key (bytes->hex-string private-key)}}
|
||||||
public-key (get-pub-key private-key)
|
public-key (get-pub-key private-key)
|
||||||
text "message text"
|
text "message text"
|
||||||
event (compose-text-event event-state text)
|
subject ""
|
||||||
|
event (compose-text-event event-state subject text)
|
||||||
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
||||||
now (quot (System/currentTimeMillis) 1000)]
|
now (quot (System/currentTimeMillis) 1000)]
|
||||||
(should= "EVENT" (first event))
|
(should= "EVENT" (first event))
|
||||||
@ -136,6 +137,25 @@
|
|||||||
public-key
|
public-key
|
||||||
(hex-string->bytes sig)))))
|
(hex-string->bytes sig)))))
|
||||||
|
|
||||||
|
(it "composes an original message with a subject."
|
||||||
|
(let [private-key (num->bytes 64 314159)
|
||||||
|
event-state {:keys {:private-key (bytes->hex-string private-key)}}
|
||||||
|
public-key (get-pub-key private-key)
|
||||||
|
text "message text"
|
||||||
|
subject "subject"
|
||||||
|
event (compose-text-event event-state subject text)
|
||||||
|
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
||||||
|
now (quot (System/currentTimeMillis) 1000)]
|
||||||
|
(should= "EVENT" (first event))
|
||||||
|
(should= (bytes->hex-string public-key) pubkey)
|
||||||
|
(should (<= 0 (- now created_at) 1)) ;within one second.
|
||||||
|
(should= 1 kind)
|
||||||
|
(should= [[:subject "subject"]] tags)
|
||||||
|
(should= text content)
|
||||||
|
(should (do-verify (hex-string->bytes id)
|
||||||
|
public-key
|
||||||
|
(hex-string->bytes sig)))))
|
||||||
|
|
||||||
(it "composes a reply to a root article."
|
(it "composes a reply to a root article."
|
||||||
(let [private-key (num->bytes 64 42)
|
(let [private-key (num->bytes 64 42)
|
||||||
root-id 7734
|
root-id 7734
|
||||||
@ -146,7 +166,7 @@
|
|||||||
:tags []}}}
|
:tags []}}}
|
||||||
public-key (get-pub-key private-key)
|
public-key (get-pub-key private-key)
|
||||||
text "message text"
|
text "message text"
|
||||||
event (compose-text-event event-state text root-id)
|
event (compose-text-event event-state "" text root-id)
|
||||||
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
||||||
now (quot (System/currentTimeMillis) 1000)]
|
now (quot (System/currentTimeMillis) 1000)]
|
||||||
(should= "EVENT" (first event))
|
(should= "EVENT" (first event))
|
||||||
@ -175,7 +195,7 @@
|
|||||||
:tags []}}}
|
:tags []}}}
|
||||||
public-key (get-pub-key private-key)
|
public-key (get-pub-key private-key)
|
||||||
text "message text"
|
text "message text"
|
||||||
event (compose-text-event event-state text root-child-id)
|
event (compose-text-event event-state "" text root-child-id)
|
||||||
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
||||||
now (quot (System/currentTimeMillis) 1000)]
|
now (quot (System/currentTimeMillis) 1000)]
|
||||||
(should= "EVENT" (first event))
|
(should= "EVENT" (first event))
|
||||||
@ -198,7 +218,7 @@
|
|||||||
event-state {:keys {:private-key (bytes->hex-string private-key)}
|
event-state {:keys {:private-key (bytes->hex-string private-key)}
|
||||||
:text-event-map {root-id {:pubkey root-author
|
:text-event-map {root-id {:pubkey root-author
|
||||||
:tags [[:p (hexify author)]]}}}
|
:tags [[:p (hexify author)]]}}}
|
||||||
event (compose-text-event event-state "" root-id)
|
event (compose-text-event event-state "" "message" root-id)
|
||||||
{:keys [tags]} (second event)]
|
{:keys [tags]} (second event)]
|
||||||
|
|
||||||
(should= [[:e root-id-hex] [:p (hexify root-author)]] tags)))
|
(should= [[:e root-id-hex] [:p (hexify root-author)]] tags)))
|
||||||
@ -208,7 +228,7 @@
|
|||||||
event-state {:keys {:private-key (bytes->hex-string private-key)}}
|
event-state {:keys {:private-key (bytes->hex-string private-key)}}
|
||||||
public-key (get-pub-key private-key)
|
public-key (get-pub-key private-key)
|
||||||
text "message/text"
|
text "message/text"
|
||||||
event (compose-text-event event-state text)
|
event (compose-text-event event-state "" text)
|
||||||
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
{:keys [pubkey created_at kind tags content id sig]} (second event)
|
||||||
now (quot (System/currentTimeMillis) 1000)]
|
now (quot (System/currentTimeMillis) 1000)]
|
||||||
(should= "EVENT" (first event))
|
(should= "EVENT" (first event))
|
||||||
|
@ -194,25 +194,32 @@
|
|||||||
|
|
||||||
(declare make-event-reference-tags
|
(declare make-event-reference-tags
|
||||||
make-people-reference-tags
|
make-people-reference-tags
|
||||||
|
make-subject-tag
|
||||||
get-reply-root)
|
get-reply-root)
|
||||||
|
|
||||||
(defn compose-text-event
|
(defn compose-text-event
|
||||||
([event-state text]
|
([event-state subject text]
|
||||||
(compose-text-event event-state text nil))
|
(compose-text-event event-state subject text nil))
|
||||||
|
|
||||||
([event-state text reply-to-or-nil]
|
([event-state subject text reply-to-or-nil]
|
||||||
(let [private-key (get-in event-state [:keys :private-key])
|
(let [private-key (get-in event-state [:keys :private-key])
|
||||||
private-key (util/hex-string->bytes private-key)
|
private-key (util/hex-string->bytes private-key)
|
||||||
pubkey (ecc/get-pub-key private-key)
|
pubkey (ecc/get-pub-key private-key)
|
||||||
root (get-reply-root event-state reply-to-or-nil)
|
root (get-reply-root event-state reply-to-or-nil)
|
||||||
tags (concat (make-event-reference-tags reply-to-or-nil root)
|
tags (concat (make-event-reference-tags reply-to-or-nil root)
|
||||||
(make-people-reference-tags event-state pubkey reply-to-or-nil))
|
(make-people-reference-tags event-state pubkey reply-to-or-nil)
|
||||||
|
(make-subject-tag subject))
|
||||||
content text
|
content text
|
||||||
body {:kind 1
|
body {:kind 1
|
||||||
:tags tags
|
:tags tags
|
||||||
:content content}]
|
:content content}]
|
||||||
(body->event event-state body))))
|
(body->event event-state body))))
|
||||||
|
|
||||||
|
(defn make-subject-tag [subject]
|
||||||
|
(if (empty? (.trim subject))
|
||||||
|
[]
|
||||||
|
[[:subject subject]]))
|
||||||
|
|
||||||
(defn get-reply-root [event-state reply-to-or-nil]
|
(defn get-reply-root [event-state reply-to-or-nil]
|
||||||
(if (nil? reply-to-or-nil)
|
(if (nil? reply-to-or-nil)
|
||||||
nil
|
nil
|
||||||
@ -255,9 +262,9 @@
|
|||||||
(let [send-chan (:send-chan event-state)]
|
(let [send-chan (:send-chan event-state)]
|
||||||
(async/>!! send-chan [:event event])))
|
(async/>!! send-chan [:event event])))
|
||||||
|
|
||||||
(defn compose-and-send-text-event [event-state source-event-or-nil message]
|
(defn compose-and-send-text-event [event-state source-event-or-nil subject message]
|
||||||
(let [reply-to-or-nil (:id source-event-or-nil)
|
(let [reply-to-or-nil (:id source-event-or-nil)
|
||||||
event (compose-text-event event-state message reply-to-or-nil)]
|
event (compose-text-event event-state subject message reply-to-or-nil)]
|
||||||
(send-event event-state event)))
|
(send-event event-state event)))
|
||||||
|
|
||||||
(defn compose-and-send-metadata-event [event-state]
|
(defn compose-and-send-metadata-event [event-state]
|
||||||
|
@ -7,6 +7,10 @@
|
|||||||
(defn make-edit-window [kind event-agent header-tree]
|
(defn make-edit-window [kind event-agent header-tree]
|
||||||
(let [reply? (= kind :reply)
|
(let [reply? (= kind :reply)
|
||||||
event-state @event-agent
|
event-state @event-agent
|
||||||
|
subject-label (label "Subject:")
|
||||||
|
subject-text (text :id :subject :text "")
|
||||||
|
subject-panel (left-right-split subject-label subject-text
|
||||||
|
:divider-location 1/10)
|
||||||
edit-frame (frame :title (name kind)
|
edit-frame (frame :title (name kind)
|
||||||
:size [1000 :by 500]
|
:size [1000 :by 500]
|
||||||
:on-close :dispose)
|
:on-close :dispose)
|
||||||
@ -22,8 +26,9 @@
|
|||||||
nil)]
|
nil)]
|
||||||
(listen send-button :action
|
(listen send-button :action
|
||||||
(fn [_]
|
(fn [_]
|
||||||
(let [message (text edit-area)]
|
(let [message (text edit-area)
|
||||||
(events/compose-and-send-text-event event-state event message))
|
subject (text subject-text)]
|
||||||
|
(events/compose-and-send-text-event event-state event subject message))
|
||||||
(dispose! edit-frame)))
|
(dispose! edit-frame)))
|
||||||
(text! edit-area
|
(text! edit-area
|
||||||
(if reply?
|
(if reply?
|
||||||
@ -31,6 +36,7 @@
|
|||||||
""))
|
""))
|
||||||
(config! edit-frame :content
|
(config! edit-frame :content
|
||||||
(border-panel
|
(border-panel
|
||||||
|
:north subject-panel
|
||||||
:center (scrollable edit-area)
|
:center (scrollable edit-area)
|
||||||
:south (flow-panel :items [send-button])))
|
:south (flow-panel :items [send-button])))
|
||||||
(show! edit-frame)))
|
(show! edit-frame)))
|
Loading…
Reference in New Issue
Block a user