diff options
| author | Stefan Monnier | 2017-10-30 14:15:00 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2017-10-30 14:15:00 -0400 |
| commit | 7f1d7234ba2ccf36995d19135c1238b97e26645e (patch) | |
| tree | 2fbdbea7097cd62f9c3e02a8f54ab441cc21cb82 | |
| parent | 764740318f3f1029cf3d45738631cf5c459affd8 (diff) | |
| download | emacs-7f1d7234ba2ccf36995d19135c1238b97e26645e.tar.gz emacs-7f1d7234ba2ccf36995d19135c1238b97e26645e.zip | |
* lisp/net/newst-backend.el: Use lexical scoping and fix warnings
(newsticker-stop, newsticker-get-all-news)
(newsticker--decode-rfc822-date, newsticker--lists-intersect-p)
(newsticker--update-process-ids, newsticker--cache-read)
(newsticker-opml-export, newsticker--run-auto-mark-filter)
(newsticker--do-run-auto-mark-filter): Use dolist.
(newsticker--insert-bytes): New function, to avoid string-to-multibyte.
(newsticker--get-news-by-funcall, newsticker--get-news-by-url-callback)
(newsticker--image-download-by-url-callback): Use it.
(newsticker--parse-rss-0.91, newsticker--parse-rss-0.92):
Remove unused var `pub-date`.
(newsticker--parse-generic-feed): Remove unused var `old-item`.
(newsticker--parse-generic-items): Use dolist and let rather than mapc
and setq.
(newsticker--image-download-by-url-callback): Simplify boolean expression.
| -rw-r--r-- | lisp/net/newst-backend.el | 293 |
1 files changed, 138 insertions, 155 deletions
diff --git a/lisp/net/newst-backend.el b/lisp/net/newst-backend.el index 048a7e734a6..0b3881428e2 100644 --- a/lisp/net/newst-backend.el +++ b/lisp/net/newst-backend.el | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | ;;; newst-backend.el --- Retrieval backend for newsticker. | 1 | ;;; newst-backend.el --- Retrieval backend for newsticker -*- lexical-binding:t -*- |
| 2 | 2 | ||
| 3 | ;; Copyright (C) 2003-2017 Free Software Foundation, Inc. | 3 | ;; Copyright (C) 2003-2017 Free Software Foundation, Inc. |
| 4 | 4 | ||
| @@ -599,7 +599,7 @@ name/timer pair to `newsticker--retrieval-timer-list'." | |||
| 599 | (cons feed-name timer)))))) | 599 | (cons feed-name timer)))))) |
| 600 | 600 | ||
| 601 | ;;;###autoload | 601 | ;;;###autoload |
| 602 | (defun newsticker-start (&optional do-not-complain-if-running) | 602 | (defun newsticker-start (&optional _do-not-complain-if-running) |
| 603 | "Start the newsticker. | 603 | "Start the newsticker. |
| 604 | Start the timers for display and retrieval. If the newsticker, i.e. the | 604 | Start the timers for display and retrieval. If the newsticker, i.e. the |
| 605 | timers, are running already a warning message is printed unless | 605 | timers, are running already a warning message is printed unless |
| @@ -635,9 +635,8 @@ if newsticker has been running." | |||
| 635 | (when (fboundp 'newsticker-stop-ticker) ; silence compiler warnings | 635 | (when (fboundp 'newsticker-stop-ticker) ; silence compiler warnings |
| 636 | (newsticker-stop-ticker)) | 636 | (newsticker-stop-ticker)) |
| 637 | (when (newsticker-running-p) | 637 | (when (newsticker-running-p) |
| 638 | (mapc (lambda (name-and-timer) | 638 | (dolist (name-and-timer newsticker--retrieval-timer-list) |
| 639 | (newsticker--stop-feed (car name-and-timer))) | 639 | (newsticker--stop-feed (car name-and-timer))) |
| 640 | newsticker--retrieval-timer-list) | ||
| 641 | (setq newsticker--retrieval-timer-list nil) | 640 | (setq newsticker--retrieval-timer-list nil) |
| 642 | (run-hooks 'newsticker-stop-hook) | 641 | (run-hooks 'newsticker-stop-hook) |
| 643 | (message "Newsticker stopped!"))) | 642 | (message "Newsticker stopped!"))) |
| @@ -647,9 +646,8 @@ if newsticker has been running." | |||
| 647 | This does NOT start the retrieval timers." | 646 | This does NOT start the retrieval timers." |
| 648 | (interactive) | 647 | (interactive) |
| 649 | ;; launch retrieval of news | 648 | ;; launch retrieval of news |
| 650 | (mapc (lambda (item) | 649 | (dolist (item (append newsticker-url-list-defaults newsticker-url-list)) |
| 651 | (newsticker-get-news (car item))) | 650 | (newsticker-get-news (car item)))) |
| 652 | (append newsticker-url-list-defaults newsticker-url-list))) | ||
| 653 | 651 | ||
| 654 | (defun newsticker-save-item (feed item) | 652 | (defun newsticker-save-item (feed item) |
| 655 | "Save FEED ITEM." | 653 | "Save FEED ITEM." |
| @@ -705,7 +703,7 @@ See `newsticker-get-news'." | |||
| 705 | (let ((buffername (concat " *newsticker-funcall-" feed-name "*"))) | 703 | (let ((buffername (concat " *newsticker-funcall-" feed-name "*"))) |
| 706 | (with-current-buffer (get-buffer-create buffername) | 704 | (with-current-buffer (get-buffer-create buffername) |
| 707 | (erase-buffer) | 705 | (erase-buffer) |
| 708 | (insert (string-to-multibyte (funcall function feed-name))) | 706 | (newsticker--insert-bytes (funcall function feed-name)) |
| 709 | (newsticker--sentinel-work nil t feed-name function | 707 | (newsticker--sentinel-work nil t feed-name function |
| 710 | (current-buffer))))) | 708 | (current-buffer))))) |
| 711 | 709 | ||
| @@ -726,10 +724,10 @@ STATUS is the return status as delivered by `url-retrieve', and | |||
| 726 | FEED-NAME is the name of the feed that the news were retrieved | 724 | FEED-NAME is the name of the feed that the news were retrieved |
| 727 | from." | 725 | from." |
| 728 | (let ((buf (get-buffer-create (concat " *newsticker-url-" feed-name "*"))) | 726 | (let ((buf (get-buffer-create (concat " *newsticker-url-" feed-name "*"))) |
| 729 | (result (string-to-multibyte (buffer-string)))) | 727 | (result (buffer-string))) |
| 730 | (set-buffer buf) | 728 | (set-buffer buf) |
| 731 | (erase-buffer) | 729 | (erase-buffer) |
| 732 | (insert result) | 730 | (newsticker--insert-bytes result) |
| 733 | ;; remove MIME header | 731 | ;; remove MIME header |
| 734 | (goto-char (point-min)) | 732 | (goto-char (point-min)) |
| 735 | (search-forward "\n\n" nil t) | 733 | (search-forward "\n\n" nil t) |
| @@ -1251,9 +1249,6 @@ For the RSS 0.91 specification see URL `http://backend.userland.com/rss091' | |||
| 1251 | or URL `http://my.netscape.com/publish/formats/rss-spec-0.91.html'." | 1249 | or URL `http://my.netscape.com/publish/formats/rss-spec-0.91.html'." |
| 1252 | (newsticker--debug-msg "Parsing RSS 0.91 feed %s" name) | 1250 | (newsticker--debug-msg "Parsing RSS 0.91 feed %s" name) |
| 1253 | (let* ((channelnode (car (xml-get-children topnode 'channel))) | 1251 | (let* ((channelnode (car (xml-get-children topnode 'channel))) |
| 1254 | (pub-date (newsticker--decode-rfc822-date | ||
| 1255 | (car (xml-node-children | ||
| 1256 | (car (xml-get-children channelnode 'pubDate)))))) | ||
| 1257 | is-new-feed has-new-items) | 1252 | is-new-feed has-new-items) |
| 1258 | (setq is-new-feed (newsticker--parse-generic-feed | 1253 | (setq is-new-feed (newsticker--parse-generic-feed |
| 1259 | name time | 1254 | name time |
| @@ -1289,7 +1284,7 @@ or URL `http://my.netscape.com/publish/formats/rss-spec-0.91.html'." | |||
| 1289 | (car (xml-node-children | 1284 | (car (xml-node-children |
| 1290 | (car (xml-get-children node 'pubDate)))))) | 1285 | (car (xml-get-children node 'pubDate)))))) |
| 1291 | ;; guid-fn | 1286 | ;; guid-fn |
| 1292 | (lambda (node) | 1287 | (lambda (_node) |
| 1293 | nil) | 1288 | nil) |
| 1294 | ;; extra-fn | 1289 | ;; extra-fn |
| 1295 | (lambda (node) | 1290 | (lambda (node) |
| @@ -1304,9 +1299,6 @@ same as in `newsticker--parse-atom-1.0'. | |||
| 1304 | For the RSS 0.92 specification see URL `http://backend.userland.com/rss092'." | 1299 | For the RSS 0.92 specification see URL `http://backend.userland.com/rss092'." |
| 1305 | (newsticker--debug-msg "Parsing RSS 0.92 feed %s" name) | 1300 | (newsticker--debug-msg "Parsing RSS 0.92 feed %s" name) |
| 1306 | (let* ((channelnode (car (xml-get-children topnode 'channel))) | 1301 | (let* ((channelnode (car (xml-get-children topnode 'channel))) |
| 1307 | (pub-date (newsticker--decode-rfc822-date | ||
| 1308 | (car (xml-node-children | ||
| 1309 | (car (xml-get-children channelnode 'pubDate)))))) | ||
| 1310 | is-new-feed has-new-items) | 1302 | is-new-feed has-new-items) |
| 1311 | (setq is-new-feed (newsticker--parse-generic-feed | 1303 | (setq is-new-feed (newsticker--parse-generic-feed |
| 1312 | name time | 1304 | name time |
| @@ -1342,7 +1334,7 @@ For the RSS 0.92 specification see URL `http://backend.userland.com/rss092'." | |||
| 1342 | (car (xml-node-children | 1334 | (car (xml-node-children |
| 1343 | (car (xml-get-children node 'pubDate)))))) | 1335 | (car (xml-get-children node 'pubDate)))))) |
| 1344 | ;; guid-fn | 1336 | ;; guid-fn |
| 1345 | (lambda (node) | 1337 | (lambda (_node) |
| 1346 | nil) | 1338 | nil) |
| 1347 | ;; extra-fn | 1339 | ;; extra-fn |
| 1348 | (lambda (node) | 1340 | (lambda (node) |
| @@ -1401,7 +1393,7 @@ For the RSS 1.0 specification see URL `http://web.resource.org/rss/1.0/spec'." | |||
| 1401 | (car (xml-node-children | 1393 | (car (xml-node-children |
| 1402 | (car (xml-get-children node 'date))))))) | 1394 | (car (xml-get-children node 'date))))))) |
| 1403 | ;; guid-fn | 1395 | ;; guid-fn |
| 1404 | (lambda (node) | 1396 | (lambda (_node) |
| 1405 | nil) | 1397 | nil) |
| 1406 | ;; extra-fn | 1398 | ;; extra-fn |
| 1407 | (lambda (node) | 1399 | (lambda (node) |
| @@ -1482,7 +1474,6 @@ The arguments TITLE, DESC, LINK, and EXTRA-ELEMENTS give the feed's title, | |||
| 1482 | description, link, and extra elements resp." | 1474 | description, link, and extra elements resp." |
| 1483 | (let ((title (or title "[untitled]")) | 1475 | (let ((title (or title "[untitled]")) |
| 1484 | (link (or link "")) | 1476 | (link (or link "")) |
| 1485 | (old-item nil) | ||
| 1486 | (position 0) | 1477 | (position 0) |
| 1487 | (something-was-added nil)) | 1478 | (something-was-added nil)) |
| 1488 | ;; decode numeric entities | 1479 | ;; decode numeric entities |
| @@ -1518,89 +1509,89 @@ The arguments TITLE-FN, DESC-FN, LINK-FN, TIME-FN, GUID-FN, and | |||
| 1518 | EXTRA-FN give functions for extracting title, description, link, | 1509 | EXTRA-FN give functions for extracting title, description, link, |
| 1519 | time, guid, and extra-elements resp. They are called with one | 1510 | time, guid, and extra-elements resp. They are called with one |
| 1520 | argument, which is one of the items in ITEMLIST." | 1511 | argument, which is one of the items in ITEMLIST." |
| 1521 | (let (title desc link | 1512 | (let ((position 0) |
| 1522 | (old-item nil) | ||
| 1523 | (position 0) | ||
| 1524 | (something-was-added nil)) | 1513 | (something-was-added nil)) |
| 1525 | ;; gather all items for this feed | 1514 | ;; gather all items for this feed |
| 1526 | (mapc (lambda (node) | 1515 | (dolist (node itemlist) |
| 1527 | (setq position (1+ position)) | 1516 | (setq position (1+ position)) |
| 1528 | (setq title (or (funcall title-fn node) "[untitled]")) | 1517 | (let ((title (or (funcall title-fn node) "[untitled]")) |
| 1529 | (setq desc (funcall desc-fn node)) | 1518 | (desc (funcall desc-fn node)) |
| 1530 | (setq link (or (funcall link-fn node) "")) | 1519 | (link (or (funcall link-fn node) ""))) |
| 1531 | (setq time (or (funcall time-fn node) time)) | 1520 | (setq time (or (funcall time-fn node) time)) |
| 1532 | ;; It happened that the title or description | 1521 | ;; It happened that the title or description |
| 1533 | ;; contained evil HTML code that confused the | 1522 | ;; contained evil HTML code that confused the |
| 1534 | ;; xml parser. Therefore: | 1523 | ;; xml parser. Therefore: |
| 1535 | (unless (stringp title) | 1524 | (unless (stringp title) |
| 1536 | (setq title (prin1-to-string title))) | 1525 | (setq title (prin1-to-string title))) |
| 1537 | (unless (or (stringp desc) (not desc)) | 1526 | (unless (or (stringp desc) (not desc)) |
| 1538 | (setq desc (prin1-to-string desc))) | 1527 | (setq desc (prin1-to-string desc))) |
| 1539 | ;; ignore items with empty title AND empty desc | 1528 | ;; ignore items with empty title AND empty desc |
| 1540 | (when (or (> (length title) 0) | 1529 | (when (or (> (length title) 0) |
| 1541 | (> (length desc) 0)) | 1530 | (> (length desc) 0)) |
| 1542 | ;; decode numeric entities | 1531 | ;; decode numeric entities |
| 1543 | (setq title (xml-substitute-numeric-entities title)) | 1532 | (setq title (xml-substitute-numeric-entities title)) |
| 1544 | (when desc | 1533 | (when desc |
| 1545 | (setq desc (xml-substitute-numeric-entities desc))) | 1534 | (setq desc (xml-substitute-numeric-entities desc))) |
| 1546 | (setq link (xml-substitute-numeric-entities link)) | 1535 | (setq link (xml-substitute-numeric-entities link)) |
| 1547 | ;; remove whitespace from title, desc, and link | 1536 | ;; remove whitespace from title, desc, and link |
| 1548 | (setq title (newsticker--remove-whitespace title)) | 1537 | (setq title (newsticker--remove-whitespace title)) |
| 1549 | (setq desc (newsticker--remove-whitespace desc)) | 1538 | (setq desc (newsticker--remove-whitespace desc)) |
| 1550 | (setq link (newsticker--remove-whitespace link)) | 1539 | (setq link (newsticker--remove-whitespace link)) |
| 1551 | ;; add data to cache | 1540 | ;; add data to cache |
| 1552 | ;; do we have this item already? | 1541 | ;; do we have this item already? |
| 1553 | (let* ((guid (funcall guid-fn node))) | 1542 | (let ((old-item |
| 1554 | ;;(message "guid=%s" guid) | 1543 | (let* ((guid (funcall guid-fn node))) |
| 1555 | (setq old-item | 1544 | ;;(message "guid=%s" guid) |
| 1556 | (newsticker--cache-contains newsticker--cache | 1545 | (newsticker--cache-contains newsticker--cache |
| 1557 | (intern name) title | 1546 | (intern name) title |
| 1558 | desc link nil guid))) | 1547 | desc link nil guid))) |
| 1559 | ;; add this item, or mark it as old, or do nothing | 1548 | (age1 'new) |
| 1560 | (let ((age1 'new) | 1549 | (age2 'old) |
| 1561 | (age2 'old) | 1550 | (item-new-p nil)) |
| 1562 | (item-new-p nil)) | 1551 | ;; Add this item, or mark it as old, or do nothing |
| 1563 | (if old-item | 1552 | (if old-item |
| 1564 | (let ((prev-age (newsticker--age old-item))) | 1553 | (let ((prev-age (newsticker--age old-item))) |
| 1565 | (unless newsticker-automatically-mark-items-as-old | 1554 | (unless newsticker-automatically-mark-items-as-old |
| 1566 | ;; Some feeds deliver items multiply, the | 1555 | ;; Some feeds deliver items multiply, the |
| 1567 | ;; first time we find an 'obsolete-old one in | 1556 | ;; first time we find an 'obsolete-old one in |
| 1568 | ;; the cache, the following times we find an | 1557 | ;; the cache, the following times we find an |
| 1569 | ;; 'old one | 1558 | ;; 'old one |
| 1570 | (if (memq prev-age '(obsolete-old old)) | 1559 | (if (memq prev-age '(obsolete-old old)) |
| 1571 | (setq age2 'old) | 1560 | (setq age2 'old) |
| 1572 | (setq age2 'new))) | 1561 | (setq age2 'new))) |
| 1573 | (if (eq prev-age 'immortal) | 1562 | (if (eq prev-age 'immortal) |
| 1574 | (setq age2 'immortal)) | 1563 | (setq age2 'immortal)) |
| 1575 | (setq time (newsticker--time old-item))) | 1564 | (setq time (newsticker--time old-item))) |
| 1576 | ;; item was not there | 1565 | ;; item was not there |
| 1577 | (setq item-new-p t) | 1566 | (setq item-new-p t) |
| 1578 | (setq something-was-added t)) | 1567 | (setq something-was-added t)) |
| 1579 | (let ((extra-elements-with-guid (funcall extra-fn node))) | 1568 | (let ((extra-elements-with-guid (funcall extra-fn node))) |
| 1580 | (unless (assoc 'guid extra-elements-with-guid) | 1569 | (unless (assoc 'guid extra-elements-with-guid) |
| 1581 | (setq extra-elements-with-guid | 1570 | (setq extra-elements-with-guid |
| 1582 | (cons `(guid nil ,(funcall guid-fn node)) | 1571 | (cons `(guid nil ,(funcall guid-fn node)) |
| 1583 | extra-elements-with-guid))) | 1572 | extra-elements-with-guid))) |
| 1584 | (setq newsticker--cache | 1573 | (setq newsticker--cache |
| 1585 | (newsticker--cache-add | 1574 | (newsticker--cache-add |
| 1586 | newsticker--cache (intern name) title desc link | 1575 | newsticker--cache (intern name) title desc link |
| 1587 | time age1 position extra-elements-with-guid | 1576 | time age1 position extra-elements-with-guid |
| 1588 | time age2))) | 1577 | time age2))) |
| 1589 | (when item-new-p | 1578 | (when item-new-p |
| 1590 | (let ((item (newsticker--cache-contains | 1579 | (let ((item (newsticker--cache-contains |
| 1591 | newsticker--cache (intern name) title | 1580 | newsticker--cache (intern name) title |
| 1592 | desc link nil))) | 1581 | desc link nil))) |
| 1593 | (if newsticker-auto-mark-filter-list | 1582 | (if newsticker-auto-mark-filter-list |
| 1594 | (newsticker--run-auto-mark-filter name item)) | 1583 | (newsticker--run-auto-mark-filter name item)) |
| 1595 | (run-hook-with-args | 1584 | (run-hook-with-args |
| 1596 | 'newsticker-new-item-functions name item)))))) | 1585 | 'newsticker-new-item-functions name item))))))) |
| 1597 | itemlist) | ||
| 1598 | something-was-added)) | 1586 | something-was-added)) |
| 1599 | 1587 | ||
| 1600 | ;; ====================================================================== | 1588 | ;; ====================================================================== |
| 1601 | ;;; Misc | 1589 | ;;; Misc |
| 1602 | ;; ====================================================================== | 1590 | ;; ====================================================================== |
| 1603 | 1591 | ||
| 1592 | (defun newsticker--insert-bytes (bytes) | ||
| 1593 | (insert (decode-coding-string bytes 'binary))) | ||
| 1594 | |||
| 1604 | (defun newsticker--remove-whitespace (string) | 1595 | (defun newsticker--remove-whitespace (string) |
| 1605 | "Remove leading and trailing whitespace from STRING." | 1596 | "Remove leading and trailing whitespace from STRING." |
| 1606 | ;; we must have ...+ but not ...* in the regexps otherwise xemacs loops | 1597 | ;; we must have ...+ but not ...* in the regexps otherwise xemacs loops |
| @@ -1755,12 +1746,11 @@ Sat, 07 Sep 2002 00:00:01 GMT | |||
| 1755 | (setq minute (+ minute offset-minute))))) | 1746 | (setq minute (+ minute offset-minute))))) |
| 1756 | (condition-case error-data | 1747 | (condition-case error-data |
| 1757 | (let ((i 1)) | 1748 | (let ((i 1)) |
| 1758 | (mapc (lambda (m) | 1749 | (dolist (m '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" |
| 1759 | (if (string= month-name m) | 1750 | "Sep" "Oct" "Nov" "Dec")) |
| 1760 | (setq month i)) | 1751 | (if (string= month-name m) |
| 1761 | (setq i (1+ i))) | 1752 | (setq month i)) |
| 1762 | '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" | 1753 | (setq i (1+ i))) |
| 1763 | "Sep" "Oct" "Nov" "Dec")) | ||
| 1764 | (encode-time second minute hour day month year t)) | 1754 | (encode-time second minute hour day month year t)) |
| 1765 | (error | 1755 | (error |
| 1766 | (message "Cannot decode \"%s\": %s %s" rfc822-string | 1756 | (message "Cannot decode \"%s\": %s %s" rfc822-string |
| @@ -1771,22 +1761,19 @@ Sat, 07 Sep 2002 00:00:01 GMT | |||
| 1771 | (defun newsticker--lists-intersect-p (list1 list2) | 1761 | (defun newsticker--lists-intersect-p (list1 list2) |
| 1772 | "Return t if LIST1 and LIST2 share elements." | 1762 | "Return t if LIST1 and LIST2 share elements." |
| 1773 | (let ((result nil)) | 1763 | (let ((result nil)) |
| 1774 | (mapc (lambda (elt) | 1764 | (dolist (elt list1) |
| 1775 | (if (memq elt list2) | 1765 | (if (memq elt list2) |
| 1776 | (setq result t))) | 1766 | (setq result t))) |
| 1777 | list1) | ||
| 1778 | result)) | 1767 | result)) |
| 1779 | 1768 | ||
| 1780 | (defun newsticker--update-process-ids () | 1769 | (defun newsticker--update-process-ids () |
| 1781 | "Update list of ids of active newsticker processes. | 1770 | "Update list of ids of active newsticker processes. |
| 1782 | Checks list of active processes against list of newsticker processes." | 1771 | Checks list of active processes against list of newsticker processes." |
| 1783 | (let ((active-procs (process-list)) | 1772 | (let ((new-list nil)) |
| 1784 | (new-list nil)) | 1773 | (dolist (proc (process-list)) |
| 1785 | (mapc (lambda (proc) | 1774 | (let ((id (process-id proc))) |
| 1786 | (let ((id (process-id proc))) | 1775 | (if (memq id newsticker--process-ids) |
| 1787 | (if (memq id newsticker--process-ids) | 1776 | (setq new-list (cons id new-list))))) |
| 1788 | (setq new-list (cons id new-list))))) | ||
| 1789 | active-procs) | ||
| 1790 | (setq newsticker--process-ids new-list)) | 1777 | (setq newsticker--process-ids new-list)) |
| 1791 | (force-mode-line-update)) | 1778 | (force-mode-line-update)) |
| 1792 | 1779 | ||
| @@ -1849,7 +1836,7 @@ Save image as FILENAME in DIRECTORY, download it from URL." | |||
| 1849 | (process-put proc 'nt-feed-name feed-name) | 1836 | (process-put proc 'nt-feed-name feed-name) |
| 1850 | (process-put proc 'nt-filename filename))))) | 1837 | (process-put proc 'nt-filename filename))))) |
| 1851 | 1838 | ||
| 1852 | (defun newsticker--image-sentinel (process event) | 1839 | (defun newsticker--image-sentinel (process _event) |
| 1853 | "Sentinel for image-retrieving PROCESS caused by EVENT." | 1840 | "Sentinel for image-retrieving PROCESS caused by EVENT." |
| 1854 | (let* ((p-status (process-status process)) | 1841 | (let* ((p-status (process-status process)) |
| 1855 | (exit-status (process-exit-status process)) | 1842 | (exit-status (process-exit-status process)) |
| @@ -1910,21 +1897,21 @@ from. | |||
| 1910 | The image is saved in DIRECTORY as FILENAME." | 1897 | The image is saved in DIRECTORY as FILENAME." |
| 1911 | (let ((do-save | 1898 | (let ((do-save |
| 1912 | (or (not status) | 1899 | (or (not status) |
| 1913 | (let ((status-type (car status)) | 1900 | ;; (let ((status-type (car status))) |
| 1914 | (status-details (cdr status))) | 1901 | ;; (cond ((eq status-type :redirect) |
| 1915 | (cond ((eq status-type :redirect) | 1902 | ;; ;; don't care about redirects |
| 1916 | ;; don't care about redirects | 1903 | ;; t) |
| 1917 | t) | 1904 | ;; ((eq status-type :error) |
| 1918 | ((eq status-type :error) | 1905 | ;; ;; silently ignore errors |
| 1919 | ;; silently ignore errors | 1906 | ;; nil))) |
| 1920 | nil)))))) | 1907 | (eq (car status) :redirect)))) |
| 1921 | (when do-save | 1908 | (when do-save |
| 1922 | (let ((buf (get-buffer-create (concat " *newsticker-url-image-" feed-name "-" | 1909 | (let ((buf (get-buffer-create (concat " *newsticker-url-image-" feed-name "-" |
| 1923 | directory "*"))) | 1910 | directory "*"))) |
| 1924 | (result (string-to-multibyte (buffer-string)))) | 1911 | (result (buffer-string))) |
| 1925 | (set-buffer buf) | 1912 | (set-buffer buf) |
| 1926 | (erase-buffer) | 1913 | (erase-buffer) |
| 1927 | (insert result) | 1914 | (newsticker--insert-bytes result) |
| 1928 | ;; remove MIME header | 1915 | ;; remove MIME header |
| 1929 | (goto-char (point-min)) | 1916 | (goto-char (point-min)) |
| 1930 | (search-forward "\n\n") | 1917 | (search-forward "\n\n") |
| @@ -2016,7 +2003,7 @@ older than TIME." | |||
| 2016 | data) | 2003 | data) |
| 2017 | data) | 2004 | data) |
| 2018 | 2005 | ||
| 2019 | (defun newsticker--cache-contains (data feed title desc link age | 2006 | (defun newsticker--cache-contains (data feed title desc link _age |
| 2020 | &optional guid) | 2007 | &optional guid) |
| 2021 | "Check DATA whether FEED contains an item with the given properties. | 2008 | "Check DATA whether FEED contains an item with the given properties. |
| 2022 | This function returns the contained item or nil if it is not | 2009 | This function returns the contained item or nil if it is not |
| @@ -2289,9 +2276,8 @@ FEED is a symbol!" | |||
| 2289 | (newsticker--cache-read-version1)) | 2276 | (newsticker--cache-read-version1)) |
| 2290 | (when (y-or-n-p (format "Delete old newsticker cache file? ")) | 2277 | (when (y-or-n-p (format "Delete old newsticker cache file? ")) |
| 2291 | (delete-file newsticker-cache-filename))) | 2278 | (delete-file newsticker-cache-filename))) |
| 2292 | (mapc (lambda (f) | 2279 | (dolist (f (append newsticker-url-list-defaults newsticker-url-list)) |
| 2293 | (newsticker--cache-read-feed (car f))) | 2280 | (newsticker--cache-read-feed (car f))))) |
| 2294 | (append newsticker-url-list-defaults newsticker-url-list)))) | ||
| 2295 | 2281 | ||
| 2296 | (defun newsticker--cache-read-feed (feed-name) | 2282 | (defun newsticker--cache-read-feed (feed-name) |
| 2297 | "Read cache data for feed named FEED-NAME." | 2283 | "Read cache data for feed named FEED-NAME." |
| @@ -2358,14 +2344,13 @@ Export subscriptions to a buffer in OPML Format." | |||
| 2358 | " <ownerName>" (user-full-name) "</ownerName>\n" | 2344 | " <ownerName>" (user-full-name) "</ownerName>\n" |
| 2359 | " </head>\n" | 2345 | " </head>\n" |
| 2360 | " <body>\n")) | 2346 | " <body>\n")) |
| 2361 | (mapc (lambda (sub) | 2347 | (dolist (sub (append newsticker-url-list newsticker-url-list-defaults)) |
| 2362 | (insert " <outline text=\"") | 2348 | (insert " <outline text=\"") |
| 2363 | (insert (newsticker--title sub)) | 2349 | (insert (newsticker--title sub)) |
| 2364 | (insert "\" xmlUrl=\"") | 2350 | (insert "\" xmlUrl=\"") |
| 2365 | (insert (xml-escape-string (let ((url (cadr sub))) | 2351 | (insert (xml-escape-string (let ((url (cadr sub))) |
| 2366 | (if (stringp url) url (prin1-to-string url))))) | 2352 | (if (stringp url) url (prin1-to-string url))))) |
| 2367 | (insert "\"/>\n")) | 2353 | (insert "\"/>\n")) |
| 2368 | (append newsticker-url-list newsticker-url-list-defaults)) | ||
| 2369 | (insert " </body>\n</opml>\n")) | 2354 | (insert " </body>\n</opml>\n")) |
| 2370 | (pop-to-buffer "*OPML Export*") | 2355 | (pop-to-buffer "*OPML Export*") |
| 2371 | (when (fboundp 'sgml-mode) | 2356 | (when (fboundp 'sgml-mode) |
| @@ -2405,28 +2390,26 @@ removed." | |||
| 2405 | This function checks the variable `newsticker-auto-mark-filter-list' | 2390 | This function checks the variable `newsticker-auto-mark-filter-list' |
| 2406 | for an entry that matches FEED and ITEM." | 2391 | for an entry that matches FEED and ITEM." |
| 2407 | (let ((case-fold-search t)) | 2392 | (let ((case-fold-search t)) |
| 2408 | (mapc (lambda (filter) | 2393 | (dolist (filter newsticker-auto-mark-filter-list) |
| 2409 | (let ((filter-feed (car filter)) | 2394 | (let ((filter-feed (car filter)) |
| 2410 | (pattern-list (cadr filter))) | 2395 | (pattern-list (cadr filter))) |
| 2411 | (when (string-match filter-feed feed) | 2396 | (when (string-match filter-feed feed) |
| 2412 | (newsticker--do-run-auto-mark-filter item pattern-list)))) | 2397 | (newsticker--do-run-auto-mark-filter item pattern-list)))))) |
| 2413 | newsticker-auto-mark-filter-list))) | ||
| 2414 | 2398 | ||
| 2415 | (defun newsticker--do-run-auto-mark-filter (item list) | 2399 | (defun newsticker--do-run-auto-mark-filter (item list) |
| 2416 | "Actually compare ITEM against the pattern-LIST. | 2400 | "Actually compare ITEM against the pattern-LIST. |
| 2417 | LIST must be an element of `newsticker-auto-mark-filter-list'." | 2401 | LIST must be an element of `newsticker-auto-mark-filter-list'." |
| 2418 | (mapc (lambda (pattern) | 2402 | (dolist (pattern list) |
| 2419 | (let ((place (nth 1 pattern)) | 2403 | (let ((place (nth 1 pattern)) |
| 2420 | (regexp (nth 2 pattern)) | 2404 | (regexp (nth 2 pattern)) |
| 2421 | (title (newsticker--title item)) | 2405 | (title (newsticker--title item)) |
| 2422 | (desc (newsticker--desc item))) | 2406 | (desc (newsticker--desc item))) |
| 2423 | (when (or (eq place 'title) (eq place 'all)) | 2407 | (when (or (eq place 'title) (eq place 'all)) |
| 2424 | (when (and title (string-match regexp title)) | 2408 | (when (and title (string-match regexp title)) |
| 2425 | (newsticker--process-auto-mark-filter-match item pattern))) | 2409 | (newsticker--process-auto-mark-filter-match item pattern))) |
| 2426 | (when (or (eq place 'description) (eq place 'all)) | 2410 | (when (or (eq place 'description) (eq place 'all)) |
| 2427 | (when (and desc (string-match regexp desc)) | 2411 | (when (and desc (string-match regexp desc)) |
| 2428 | (newsticker--process-auto-mark-filter-match item pattern))))) | 2412 | (newsticker--process-auto-mark-filter-match item pattern)))))) |
| 2429 | list)) | ||
| 2430 | 2413 | ||
| 2431 | (defun newsticker--process-auto-mark-filter-match (item pattern) | 2414 | (defun newsticker--process-auto-mark-filter-match (item pattern) |
| 2432 | "Process ITEM that matches an auto-mark-filter PATTERN." | 2415 | "Process ITEM that matches an auto-mark-filter PATTERN." |
| @@ -2499,7 +2482,7 @@ This function is suited for adding it to `newsticker-new-item-functions'." | |||
| 2499 | ;; ====================================================================== | 2482 | ;; ====================================================================== |
| 2500 | ;;; Retrieve samples | 2483 | ;;; Retrieve samples |
| 2501 | ;; ====================================================================== | 2484 | ;; ====================================================================== |
| 2502 | (defun newsticker-retrieve-random-message (feed-name) | 2485 | (defun newsticker-retrieve-random-message (_feed-name) |
| 2503 | "Return an artificial RSS string under the name FEED-NAME." | 2486 | "Return an artificial RSS string under the name FEED-NAME." |
| 2504 | (concat "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?><rss version=\"0.91\">" | 2487 | (concat "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?><rss version=\"0.91\">" |
| 2505 | "<channel>" | 2488 | "<channel>" |