Fix lookup-reference crash when nostr.client mis-indexed the references. Also use empty? instead of nil?

This commit is contained in:
Robert C. Martin 2022-08-27 00:43:11 -05:00
parent 4d4b9cf487
commit 2515760a6e

View File

@ -39,10 +39,10 @@
:else :else
(str "(" (abbreviate profile-name (- length 2)) ")"))))))) (str "(" (abbreviate profile-name (- length 2)) ")")))))))
(declare get-subject (declare get-subject
replace-references) replace-references)
(defn format-header [{:keys [pubkey created-at tags] :as event}] (defn format-header [{:keys [pubkey created-at tags] :as event}]
(if (nil? event) (if (nil? event)
"nil" "nil"
(let [content (replace-references event) (let [content (replace-references event)
@ -57,7 +57,7 @@
(abbreviate (str subject "|" header-text) 80))] (abbreviate (str subject "|" header-text) 80))]
(format "%s %20s %s %s\n" reply-mark name time content)))) (format "%s %20s %s %s\n" reply-mark name time content))))
(defn format-reply [event] (defn format-reply [event]
(let [content (replace-references event) (let [content (replace-references event)
content (prepend> content) content (prepend> content)
header (format ">From: %s at %s on %s\n" header (format ">From: %s at %s on %s\n"
@ -67,7 +67,7 @@
)] )]
(str header ">---------------\n" content))) (str header ">---------------\n" content)))
(defn get-subject [tags] (defn get-subject [tags]
(if (empty? tags) (if (empty? tags)
nil nil
(let [tag (first tags)] (let [tag (first tags)]
@ -75,9 +75,9 @@
(abbreviate (second tag) 90) (abbreviate (second tag) 90)
(recur (rest tags)))))) (recur (rest tags))))))
(declare lookup-reference) (declare lookup-reference)
(defn replace-references [event] (defn replace-references [event]
(let [padded-content (str " " (:content event) " ") (let [padded-content (str " " (:content event) " ")
pattern #"\#\[\d+\]" pattern #"\#\[\d+\]"
references (re-seq pattern padded-content) references (re-seq pattern padded-content)
@ -87,23 +87,31 @@
] ]
(string/trim (apply str (interleave segments referents))))) (string/trim (apply str (interleave segments referents)))))
(defn lookup-reference [event reference] (defn lookup-reference [event reference]
(let [profiles (:profiles @(:event-context @ui-context)) (let [profiles (:profiles @(:event-context @ui-context))
ref-string (re-find #"\d+" reference) ref-string (re-find #"\d+" reference)
index (Integer/parseInt ref-string) index (Integer/parseInt ref-string)
tags (:tags event)] tags (:tags event)]
(if (>= index (count tags)) (if (>= index (count tags))
reference reference
(try
(let [id-string (-> tags (nth index) second) (let [id-string (-> tags (nth index) second)
id (util/hex-string->num id-string) id (util/hex-string->num id-string)
name (contact-list/get-petname id) name (contact-list/get-petname id)
name (if (nil? name) (get-in profiles [id :name]) name) name (if (empty? name) (get-in profiles [id :name]) name)
name (if (nil? name) name (if (empty? name)
id-string id-string
name)] name)]
(str "@" name))))) (str "@" name)
)
(catch Exception e
(prn `lookup-reference 'bad-id index tags)
"@-unknown-"
))
(defn html-escape [content] )))
(defn html-escape [content]
(string/escape content {\& "&" (string/escape content {\& "&"
\< "&lt;" \< "&lt;"
\> "&gt;" \> "&gt;"
@ -111,16 +119,16 @@
\' "&#x27;" \' "&#x27;"
\/ "&#x2F;"})) \/ "&#x2F;"}))
(defn break-newlines [content] (defn break-newlines [content]
(string/replace content "\n" "<br>")) (string/replace content "\n" "<br>"))
(defn format-replies [content] (defn format-replies [content]
(string/replace content " >" "\n>")) (string/replace content " >" "\n>"))
(defn linkify [url] (defn linkify [url]
(str "<a href=\"" url "\">" url "</a>")) (str "<a href=\"" url "\">" url "</a>"))
(defn segment-text-url [content] (defn segment-text-url [content]
(let [url (re-find config/url-pattern content)] (let [url (re-find config/url-pattern content)]
(cond (cond
(not (nil? url)) (not (nil? url))
@ -137,7 +145,7 @@
(not (empty? content)) (list [:text content]) (not (empty? content)) (list [:text content])
:else '()))) :else '())))
(defn reformat-article [article] (defn reformat-article [article]
(let [segments (segment-text-url article)] (let [segments (segment-text-url article)]
(reduce (reduce
(fn [formatted-content [seg-type seg]] (fn [formatted-content [seg-type seg]]