elfeed-show-refresh--mail-style base URL is incorrect for kottke.org
Opened this issue · 3 comments
I subscribe to the RSS feed of kottke.org at https://feeds.kottke.org/main. However, all the article links are at https://kottke.org/. The elfeed-show-refresh--mail-style
function computes the base
URL that it uses to insert HTML into the elfeed-show
buffer from the feed
URL. As a result images in the article with relative paths fail to render because they are pulled from https://feeds.kottke.org/<image path>
instead of https://kottke.org/<image path>
.
I have worked around the problem by temporarily redefining that function to use the link URL instead of the feed URL. This fixes the problem for kottke.org and I haven't noticed any other problems for other feeds yet. However, I'm unsure whether there are potential issues that I haven't run into yet.
One potential concern that I have is that link URLs could theoretically pointing anywhere, not just at the site I originally configured. It would be nice to lock that down more tightly somehow. Perhaps having an elfeed-entry-base-url
property for feeds that gets used in place of calculating the base URL from the feed URL if configured.
I looked at this a bit more today. I was thinking of changing elfeed-show-refresh--mail-style
to check if the metadata on the feed has a :entry-base-url
plist entry and use that in place of the current base computed from the feed URL if present. Would a change like this be acceptable?
I'm an elfeed-org user as well so if this change would be acceptable I'll also submit a PR to elfeed-org to allow feed metadata to be specified, probably using a property on the feed entries.
Given the proposed commit I made hasn't had an enthusiastic reception I've resorted to solving this a different way for now. I used :around
advice on elfeed-compute-base
that intercepts the URL being passed in, matches against it, and allows it to be replaced. If anyone arrives here and is interested in this workaround, the advice function I defined is:
(defvar kea/elfeed-compute-base-url-rewrites nil
"List of lists of replace-regexp-in-string arguments w/o the actual string")
(defun kea/elfeed-compute-base-url-rewrite-advice (fn url)
(mapc (lambda (args)
(let ((regexp (nth 0 args))
(rep (nth 1 args))
(optargs (nthcdr 2 args)))
(setq url (apply #'replace-regexp-in-string regexp rep url optargs))))
kea/elfeed-compute-base-url-rewrites)
(funcall fn url))
For the problem reporting here I'm setting kea/elfeed-compute-base-url-rewrites
to
(setq kea/elfeed-compute-base-url-rewrites
`((,(rx line-start "http" (opt "s") "://feeds.kottke.org/")
"https://kottke.org/")))
I still think my proposed patch is a more elegant solution for this problem, but this works around the problem until there is an upstream fix without me having to maintain my fork.