mirror of
https://github.com/SqrtMinusOne/elfeed-summary.git
synced 2025-12-11 18:13:03 +03:00
feat: query the list of feeds
This commit is contained in:
parent
e0488516a9
commit
8374b45271
1 changed files with 84 additions and 0 deletions
|
|
@ -28,6 +28,90 @@
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
(require 'elfeed)
|
(require 'elfeed)
|
||||||
|
(require 'elfeed-db)
|
||||||
|
(require 'seq)
|
||||||
|
|
||||||
|
(cl-defun elfeed-summary--match-tag (query &key tags title url author title-meta)
|
||||||
|
(cond
|
||||||
|
;; symbol
|
||||||
|
((symbolp query) (member query tags))
|
||||||
|
;; (title . "Title")
|
||||||
|
;; (title . (rx "Title"))
|
||||||
|
((eq (car query) 'title)
|
||||||
|
(or (and title
|
||||||
|
(string-match-p
|
||||||
|
(if (stringp (cdr query))
|
||||||
|
(cdr query)
|
||||||
|
(eval (cdr query)))
|
||||||
|
title))
|
||||||
|
(and title-meta
|
||||||
|
(string-match-p
|
||||||
|
(if (stringp (cdr query))
|
||||||
|
(cdr query)
|
||||||
|
(eval (cdr query)))
|
||||||
|
title-meta))))
|
||||||
|
;; (author . "Author")
|
||||||
|
;; (author . (rx "Author"))
|
||||||
|
((eq (car query) 'author)
|
||||||
|
(and author
|
||||||
|
(string-match-p
|
||||||
|
(if (stringp (cdr query))
|
||||||
|
(cdr query)
|
||||||
|
(eval (cdr query)))
|
||||||
|
author)))
|
||||||
|
;; (url . "URL")
|
||||||
|
;; (url . (rx "URL"))
|
||||||
|
((eq (car query) 'url)
|
||||||
|
(and url
|
||||||
|
(string-match-p
|
||||||
|
(if (stringp (cdr query))
|
||||||
|
(cdr query)
|
||||||
|
(eval (cdr query)))
|
||||||
|
url)))
|
||||||
|
;; (and <query-1> <query-2> ... <query-n>)
|
||||||
|
((eq (car query) 'and)
|
||||||
|
(seq-every-p
|
||||||
|
(lambda (query-elem)
|
||||||
|
(elfeed-summary--match-tag
|
||||||
|
query-elem
|
||||||
|
:tags tags
|
||||||
|
:title title
|
||||||
|
:title-meta title-meta
|
||||||
|
:url url
|
||||||
|
:author author))
|
||||||
|
(cdr query)))
|
||||||
|
;; (or <query-1> <query-2> ... <query-n>)
|
||||||
|
;; (<query-1> <query-2> ... <query-n>)
|
||||||
|
(t (seq-some
|
||||||
|
(lambda (query-elem)
|
||||||
|
(elfeed-summary--match-tag
|
||||||
|
query-elem
|
||||||
|
:tags tags
|
||||||
|
:title title
|
||||||
|
:title-meta title-meta
|
||||||
|
:url url
|
||||||
|
:author author))
|
||||||
|
(if (eq (car query) 'or)
|
||||||
|
(cdr query)
|
||||||
|
query)))))
|
||||||
|
|
||||||
|
(defun elfeed-summary--get-feeds (query)
|
||||||
|
(cl-loop for feed in elfeed-feeds
|
||||||
|
for url = (car feed)
|
||||||
|
for tags = (cdr feed)
|
||||||
|
for feed = (elfeed-db-get-feed url)
|
||||||
|
if (elfeed-summary--match-tag
|
||||||
|
query
|
||||||
|
:tags tags
|
||||||
|
:title (elfeed-feed-title feed)
|
||||||
|
:title-meta (plist-get (elfeed-feed-meta feed) :title)
|
||||||
|
:url url
|
||||||
|
:author (plist-get (car (elfeed-feed-author feed)) :name))
|
||||||
|
collect feed))
|
||||||
|
|
||||||
|
(elfeed-summary--get-feeds '(or (title . "Andrea")
|
||||||
|
(author . "Bozhidar")
|
||||||
|
(url . (rx "sacha"))))
|
||||||
|
|
||||||
(provide 'elfeed-summary)
|
(provide 'elfeed-summary)
|
||||||
;;; elfeed-summary.el ends here
|
;;; elfeed-summary.el ends here
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue