From 1e24231c76adfa14e0acf2fa2c1bd3948c9d02ae Mon Sep 17 00:00:00 2001 From: eltrac Date: Tue, 13 Oct 2026 22:44:47 +0800 Subject: retriever: fix mftype inferring not working with multi values --- src/weepinbell/microformats/searcher.clj | 14 +++++++++----- src/weepinbell/webserver/retriever.clj | 13 +++++++++---- 2 files changed, 18 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/weepinbell/microformats/searcher.clj b/src/weepinbell/microformats/searcher.clj index 50ebd01..e156eb9 100644 --- a/src/weepinbell/microformats/searcher.clj +++ b/src/weepinbell/microformats/searcher.clj @@ -51,13 +51,16 @@ (has-key? data :type) [data] :else nil)) -(defn use-prop [property data] +(defn use-prop-all [property data] (cond (not (map? data)) nil - (has-key? data :properties) (first-value (get-key (get-key data :properties) property)) - (has-key? data property) (first-value (get-key data property)) + (has-key? data :properties) (get-key (get-key data :properties) property) + (has-key? data property) (get-key data property) :else nil)) +(defn use-prop [property data] + (first-value (use-prop-all property data))) + (defn find-type [mftype items] (concat (filter #(some #{mftype} (type-vector %)) items) (mapcat #(find-type mftype (:children %)) items))) @@ -80,8 +83,9 @@ (defn search-mftype [target h-entry] (or - (->> [:like-of :repost-of :in-reply-to] - (filter #(url= (use-prop % h-entry) target)) + (->> [:like-of :repost-of :in-reply-to :rsvp] + (filter #(some (fn [x] (url= x target)) + (use-prop-all % h-entry))) first) :mention)) diff --git a/src/weepinbell/webserver/retriever.clj b/src/weepinbell/webserver/retriever.clj index e335bc9..3761e3a 100644 --- a/src/weepinbell/webserver/retriever.clj +++ b/src/weepinbell/webserver/retriever.clj @@ -23,18 +23,23 @@ ;; query list of webmentions +(defn mftype= [& types] + (apply = (map keyword types))) (defn filter-by-mftype [mftype data] (if (nil? mftype) data (->> data (map (fn [item] [(get-in item [:webmention :target]) - (get item :microformats)])) - (filter (fn [[target mf]] - (->> mf mfsr/use-items + item])) + (filter (fn [[target item]] + (->> item + :microformats + mfsr/use-items mfsr/find-h-entry (mfsr/search-mftype target) - (= mftype))))))) + (mftype= mftype)))) + (map last)))) (defn query-list "Get a list of webmentions by certain filters." -- cgit v1.2.3