summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-10-13 23:19:25 +0800
committereltrac <hi@eltr.ac>2026-10-13 23:19:25 +0800
commit6290b95008c4cc71535c5a09931c5082d9da2790 (patch)
tree10c3028e28b7ee4388a987c356f2753f72d90add
parent1e24231c76adfa14e0acf2fa2c1bd3948c9d02ae (diff)
retriever: no reducing empty microformats
-rw-r--r--src/weepinbell/webserver/retriever.clj42
1 files changed, 27 insertions, 15 deletions
diff --git a/src/weepinbell/webserver/retriever.clj b/src/weepinbell/webserver/retriever.clj
index 3761e3a..5be9e0c 100644
--- a/src/weepinbell/webserver/retriever.clj
+++ b/src/weepinbell/webserver/retriever.clj
@@ -23,9 +23,9 @@
;; query list of webmentions
-(defn mftype= [& types]
+(defn- mftype= [& types]
(apply = (map keyword types)))
-(defn filter-by-mftype
+(defn- filter-by-mftype
[mftype data]
(if (nil? mftype) data
(->> data
@@ -33,7 +33,7 @@
[(get-in item [:webmention :target])
item]))
(filter (fn [[target item]]
- (->> item
+ (->> item
:microformats
mfsr/use-items
mfsr/find-h-entry
@@ -41,25 +41,37 @@
(mftype= mftype))))
(map last))))
+(defn- paging [page page-size data]
+ (if (nil? page) data
+ (let [pages (vec (partition-all
+ (or page-size default-page-size)
+ data))
+ page-number (if (number? page) page
+ (- (count pages) 1))]
+ (get pages page-number))))
+
+(defn- reduce-helper [wm]
+ (if-let [mf (:microformats wm)]
+ (if (empty? mf)
+ (dissoc wm :microformats)
+ (let [target (get-in wm [:webmention :target])
+ reduced (reduce-mf target mf)]
+ (assoc wm :microformats reduced)))
+ wm))
+(defn- reduce-microformats [mf-opt data]
+ (if (= mf-opt "raw") data
+ (map reduce-helper data)))
+
(defn query-list
"Get a list of webmentions by certain filters."
{:pre [(s/keys :req-un [::domain ::path ::page ::page-size ::storage ::mftype])]}
[opts]
(let [{:keys [domain path page page-size storage mftype]} opts
- reduce-mf? (not= (:microformats opts) "raw")
- page-size (or page-size default-page-size)
data ((:get-by-domain storage path) domain)
data (filter-by-mftype mftype data)
- pages (vec (partition-all page-size data))
- page-number (if (number? page) page
- (- (count pages) 1))
- page-selected (get pages page-number)
- result (if reduce-mf? (map #(assoc % :microformats
- (reduce-mf (get-in % [:webmention :target])
- (:microformats %)))
- page-selected)
- page-selected)]
- (respond-webmention-list-json result)))
+ data (paging page page-size data)
+ data (reduce-microformats (:microformats opts) data)]
+ (respond-webmention-list-json data)))
(defn by-domain
"Get webmentions sent to a particular domain."