diff options
| author | eltrac <hi@eltr.ac> | 2026-10-13 22:44:47 +0800 |
|---|---|---|
| committer | eltrac <hi@eltr.ac> | 2026-10-13 22:44:47 +0800 |
| commit | 1e24231c76adfa14e0acf2fa2c1bd3948c9d02ae (patch) | |
| tree | 92fd62dca77304a276161d6538c20666c906a6b3 | |
| parent | 4287b35b0ff9ae97c01685398e1f8c43003574c2 (diff) | |
retriever: fix mftype inferring not working with multi values
| -rw-r--r-- | src/weepinbell/microformats/searcher.clj | 14 | ||||
| -rw-r--r-- | src/weepinbell/webserver/retriever.clj | 13 |
2 files changed, 18 insertions, 9 deletions
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." |
