git.fiddlerwoaroof.com
Browse code

feat: handle relative feed links

fiddlerwoaroof authored on 14/10/2022 03:05:43
Showing 1 changed files
... ...
@@ -72,10 +72,28 @@ next time, it re-raises the exception."
72 72
 		(go ,start))))))))
73 73
 
74 74
 
75
+(defun relative-uri-p (uri)
76
+  (let ((uri (puri:uri uri)))
77
+    (not
78
+     (and (puri:uri-scheme uri)
79
+          (puri:uri-host uri)
80
+          t))))
81
+
75 82
 (defun coerce-feed-link (link feed)
76
-  (prog1 feed
77
-    (unless (alimenta:feed-link feed)
78
-      (setf (alimenta:feed-link feed) link))))
83
+  (flet ((unrelativize (url)
84
+           (puri:render-uri (puri:merge-uris url
85
+                                             link)
86
+                            nil)))
87
+    (prog1 feed
88
+      (unless (and (alimenta:feed-link feed)
89
+                   (not (relative-uri-p (alimenta:feed-link feed))))
90
+        (setf (alimenta:feed-link feed)
91
+              (if (alimenta:feed-link feed)
92
+                  (unrelativize (alimenta:feed-link feed))
93
+                  link)))
94
+      (when (relative-uri-p (alimenta:link feed))
95
+        (setf (alimenta:link feed)
96
+              (unrelativize (alimenta:link feed)))))))
79 97
 
80 98
 (defmacro with-retry ((&optional (message "retry the operation")) &body body)
81 99
   `(loop