aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Jasper2008-11-24 19:40:35 +0000
committerUlf Jasper2008-11-24 19:40:35 +0000
commita59c6c5194c546cbe613dabbe31def45eb2cfc30 (patch)
tree43bef976db9872ff45514330dd9dae0dd921b3ce
parent206faa929883621a671497c757dd4f4021586695 (diff)
downloademacs-a59c6c5194c546cbe613dabbe31def45eb2cfc30.tar.gz
emacs-a59c6c5194c546cbe613dabbe31def45eb2cfc30.zip
newsticker: cache file redesign.
-rw-r--r--lisp/ChangeLog35
-rw-r--r--lisp/net/newst-backend.el121
-rw-r--r--lisp/net/newst-reader.el4
-rw-r--r--lisp/net/newst-treeview.el44
4 files changed, 151 insertions, 53 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index e4e3c665df1..9d6ea22d13c 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,38 @@
12008-11-24 Ulf Jasper <ulf@web.de>
2
3 * net/newst-treeview.el (newsticker--treeview-current-feed): Doc
4 string.
5 (newsticker--treeview-item-show): Renamed arg FEED to
6 FEED-NAME-SYMBOL.
7 (newsticker--treeview-tree-update-tag): Removed dead code.
8 (newsticker-treeview-update): Don't update cache.
9 (newsticker-treeview-quit): Don't save cache.
10 (newsticker-treeview-save): Don't save cache. Use `newsticker-dir'.
11 (newsticker-treeview-save): Use `newsticker-dir'.
12 (newsticker--treeview-load): Use `newsticker-dir'.
13 (newsticker--treeview-mark-item): Call `newsticker--cache-save-feed'.
14 Update tags.
15 (newsticker-treeview-tree-do-click): Slightly simplified.
16
17 * net/newst-backend.el (newsticker-dir): New.
18 (newsticker-start): Use `newsticker--cache-read'.
19 (newsticker-stop): Use `newsticker--cache-save'.
20 (newsticker--sentinel-work): Use `newsticker--cache-save-feed'.
21 (newsticker--images-dir): New.
22 (newsticker--image-get, newsticker--image-sentinel): Use
23 `newsticker--images-dir'.
24 (newsticker--cache-save-version1): Backuped version of
25 `newsticker--cache-save'.
26 (newsticker--cache-update): Create newsticker-dir if necessary.
27 (newsticker--cache-dir): New.
28 (newsticker--cache-save): Save feeds separately in `newsticker-dir'.
29 (newsticker--cache-save-feed): New.
30 (newsticker--cache-read-version1): New. Backuped version for reading
31 cache data..
32 (newsticker--cache-read, newsticker--cache-do-read): New.
33
34 * net/newst-reader.el (newsticker--image-read): Use `newsticker--images-dir'.
35
12008-11-24 Chong Yidong <cyd@stupidchicken.com> 362008-11-24 Chong Yidong <cyd@stupidchicken.com>
2 37
3 * files.el (confirm-nonexistent-file-or-buffer): Allow 38 * files.el (confirm-nonexistent-file-or-buffer): Allow
diff --git a/lisp/net/newst-backend.el b/lisp/net/newst-backend.el
index 9359fb2dc77..0c72968dff5 100644
--- a/lisp/net/newst-backend.el
+++ b/lisp/net/newst-backend.el
@@ -7,7 +7,7 @@
7;; Filename: newst-backend.el 7;; Filename: newst-backend.el
8;; URL: http://www.nongnu.org/newsticker 8;; URL: http://www.nongnu.org/newsticker
9;; Keywords: News, RSS, Atom 9;; Keywords: News, RSS, Atom
10;; Time-stamp: "31. Oktober 2008, 21:07:17 (ulf)" 10;; Time-stamp: "24. November 2008, 19:39:24 (ulf)"
11 11
12;; ====================================================================== 12;; ======================================================================
13 13
@@ -424,9 +424,9 @@ headline after it has been retrieved for the first time."
424 :type 'string 424 :type 'string
425 :group 'newsticker-miscellaneous) 425 :group 'newsticker-miscellaneous)
426 426
427(defcustom newsticker-imagecache-dirname 427(defcustom newsticker-dir
428 "~/.newsticker-images" 428 "~/.newsticker"
429 "Name of the directory where newsticker stores cached images." 429 "Name of the directory where newsticker saves cached data."
430 :type 'string 430 :type 'string
431 :group 'newsticker-miscellaneous) 431 :group 'newsticker-miscellaneous)
432 432
@@ -629,16 +629,7 @@ Run `newsticker-start-hook' if newsticker was not running already."
629 (let ((running (newsticker-running-p))) 629 (let ((running (newsticker-running-p)))
630 ;; read old cache if it exists and newsticker is not running 630 ;; read old cache if it exists and newsticker is not running
631 (unless running 631 (unless running
632 (let ((coding-system-for-read 'utf-8)) 632 (newsticker--cache-read))
633 (when (file-exists-p newsticker-cache-filename)
634 (with-temp-buffer
635 (insert-file-contents newsticker-cache-filename)
636 (goto-char (point-min))
637 (condition-case nil
638 (setq newsticker--cache (read (current-buffer)))
639 (error
640 (message "Error while reading newsticker cache file!")
641 (setq newsticker--cache nil)))))))
642 ;; start retrieval timers -- one timer for each feed 633 ;; start retrieval timers -- one timer for each feed
643 (dolist (feed (append newsticker-url-list-defaults newsticker-url-list)) 634 (dolist (feed (append newsticker-url-list-defaults newsticker-url-list))
644 (newsticker--start-feed feed)) 635 (newsticker--start-feed feed))
@@ -660,7 +651,7 @@ Delete the stopped name/timer pair from `newsticker--retrieval-timer-list'."
660Cancel the timers for display and retrieval. Run `newsticker-stop-hook' 651Cancel the timers for display and retrieval. Run `newsticker-stop-hook'
661if newsticker has been running." 652if newsticker has been running."
662 (interactive) 653 (interactive)
663 (newsticker--cache-update t) 654 (newsticker--cache-save)
664 (when (fboundp 'newsticker-stop-ticker) ; silence compiler warnings 655 (when (fboundp 'newsticker-stop-ticker) ; silence compiler warnings
665 (newsticker-stop-ticker)) 656 (newsticker-stop-ticker))
666 (when (newsticker-running-p) 657 (when (newsticker-running-p)
@@ -743,7 +734,7 @@ See `newsticker-get-news'."
743See `newsticker-get-news'." 734See `newsticker-get-news'."
744 (let ((coding-system-for-read 'no-conversion)) 735 (let ((coding-system-for-read 'no-conversion))
745 (condition-case error-data 736 (condition-case error-data
746 (url-retrieve url 'newsticker--get-news-by-url-callback 737 (url-retrieve url 'newsticker--get-news-by-url-callback
747 (list feed-name)) 738 (list feed-name))
748 (error (message "Error retrieving news from %s: %s" feed-name 739 (error (message "Error retrieving news from %s: %s" feed-name
749 error-data)))) 740 error-data))))
@@ -1035,7 +1026,8 @@ Argument BUFFER is the buffer of the retrieval process."
1035 (setq newsticker--latest-update-time (current-time)) 1026 (setq newsticker--latest-update-time (current-time))
1036 (when something-was-added 1027 (when something-was-added
1037 ;; FIXME: should we care about removed items as well? 1028 ;; FIXME: should we care about removed items as well?
1038 (newsticker--cache-update) 1029 (newsticker--cache-save-feed
1030 (newsticker--cache-get-feed name-symbol))
1039 (when (fboundp 'newsticker--buffer-set-uptodate) ;silence 1031 (when (fboundp 'newsticker--buffer-set-uptodate) ;silence
1040 ;compiler 1032 ;compiler
1041 ;warnings 1033 ;warnings
@@ -1733,11 +1725,14 @@ Checks list of active processes against list of newsticker processes."
1733;; ====================================================================== 1725;; ======================================================================
1734;;; Images 1726;;; Images
1735;; ====================================================================== 1727;; ======================================================================
1728(defun newsticker--images-dir ()
1729 "Return directory where feed images are saved."
1730 (concat newsticker-dir "/images"))
1731
1736(defun newsticker--image-get (feed-name url) 1732(defun newsticker--image-get (feed-name url)
1737 "Get image of the news site FEED-NAME from URL. 1733 "Get image of the news site FEED-NAME from URL.
1738If the image has been downloaded in the last 24h do nothing." 1734If the image has been downloaded in the last 24h do nothing."
1739 (let ((image-name (concat newsticker-imagecache-dirname "/" 1735 (let ((image-name (concat (newsticker--images-dir) feed-name)))
1740 feed-name)))
1741 (if (and (file-exists-p image-name) 1736 (if (and (file-exists-p image-name)
1742 (time-less-p (current-time) 1737 (time-less-p (current-time)
1743 (time-add (nth 5 (file-attributes image-name)) 1738 (time-add (nth 5 (file-attributes image-name))
@@ -1788,12 +1783,11 @@ If the image has been downloaded in the last 24h do nothing."
1788 (let (image-name) 1783 (let (image-name)
1789 (save-excursion 1784 (save-excursion
1790 (set-buffer (process-buffer process)) 1785 (set-buffer (process-buffer process))
1791 (setq image-name (concat newsticker-imagecache-dirname "/" 1786 (setq image-name (concat (newsticker--images-dir) feed-name))
1792 feed-name))
1793 (set-buffer-file-coding-system 'no-conversion) 1787 (set-buffer-file-coding-system 'no-conversion)
1794 ;; make sure the cache dir exists 1788 ;; make sure the cache dir exists
1795 (unless (file-directory-p newsticker-imagecache-dirname) 1789 (unless (file-directory-p (newsticker--images-dir))
1796 (make-directory newsticker-imagecache-dirname)) 1790 (make-directory (newsticker--images-dir)))
1797 ;; write and close buffer 1791 ;; write and close buffer
1798 (let ((require-final-newline nil) 1792 (let ((require-final-newline nil)
1799 (backup-inhibited t) 1793 (backup-inhibited t)
@@ -1802,8 +1796,6 @@ If the image has been downloaded in the last 24h do nothing."
1802 (set-buffer-modified-p nil) 1796 (set-buffer-modified-p nil)
1803 (kill-buffer (current-buffer))))))) 1797 (kill-buffer (current-buffer)))))))
1804 1798
1805
1806
1807(defun newsticker--insert-image (img string) 1799(defun newsticker--insert-image (img string)
1808 "Insert IMG with STRING at point." 1800 "Insert IMG with STRING at point."
1809 (insert-image img string)) 1801 (insert-image img string))
@@ -1936,12 +1928,12 @@ other properties are ignored."
1936 newsticker-desc-comp-max)) 1928 newsticker-desc-comp-max))
1937 (string= (substring 1929 (string= (substring
1938 (newsticker--desc anitem) 1930 (newsticker--desc anitem)
1939 0 1931 0
1940 newsticker-desc-comp-max) 1932 newsticker-desc-comp-max)
1941 desc) 1933 desc)
1942 (string= (newsticker--desc anitem) 1934 (string= (newsticker--desc anitem)
1943 desc))))))) 1935 desc)))))))
1944 ;;(newsticker--debug-msg "Found %s guid=%s" 1936 ;;(newsticker--debug-msg "Found %s guid=%s"
1945 ;; (newsticker--title anitem) 1937 ;; (newsticker--title anitem)
1946 ;; (newsticker--guid anitem)) 1938 ;; (newsticker--guid anitem))
1947 (throw 'found anitem))) 1939 (throw 'found anitem)))
@@ -1970,7 +1962,7 @@ which the item got."
1970 (if item 1962 (if item
1971 ;; does exist already -- change age, update time and position 1963 ;; does exist already -- change age, update time and position
1972 (progn 1964 (progn
1973 ;;(newsticker--debug-msg "Updating item %s %s %s %s %s -> %s %s 1965 ;;(newsticker--debug-msg "Updating item %s %s %s %s %s -> %s %s
1974 ;; (guid %s -> %s)" 1966 ;; (guid %s -> %s)"
1975 ;; feed-name-symbol title link time age 1967 ;; feed-name-symbol title link time age
1976 ;; updated-time updated-age 1968 ;; updated-time updated-age
@@ -2094,9 +2086,7 @@ well."
2094 (throw 'result t))))) 2086 (throw 'result t)))))
2095 (< (or (newsticker--pos item1) 0) (or (newsticker--pos item2) 0)))) 2087 (< (or (newsticker--pos item1) 0) (or (newsticker--pos item2) 0))))
2096 2088
2097 2089(defun newsticker--cache-save-version1 ()
2098
2099(defun newsticker--cache-save ()
2100 "Update and save newsticker cache file." 2090 "Update and save newsticker cache file."
2101 (interactive) 2091 (interactive)
2102 (newsticker--cache-update t)) 2092 (newsticker--cache-update t))
@@ -2105,6 +2095,8 @@ well."
2105 "Update newsticker cache file. 2095 "Update newsticker cache file.
2106If optional argument SAVE is not nil the cache file is saved to disk." 2096If optional argument SAVE is not nil the cache file is saved to disk."
2107 (save-excursion 2097 (save-excursion
2098 (unless (file-directory-p newsticker-dir)
2099 (make-directory newsticker-dir t))
2108 (let ((coding-system-for-write 'utf-8) 2100 (let ((coding-system-for-write 'utf-8)
2109 (buf (find-file-noselect newsticker-cache-filename))) 2101 (buf (find-file-noselect newsticker-cache-filename)))
2110 (when buf 2102 (when buf
@@ -2121,6 +2113,69 @@ If optional argument SAVE is not nil the cache file is saved to disk."
2121FEED is a symbol!" 2113FEED is a symbol!"
2122 (assoc feed newsticker--cache)) 2114 (assoc feed newsticker--cache))
2123 2115
2116(defun newsticker--cache-dir ()
2117 "Return directory for saving cache data."
2118 (concat newsticker-dir "/feeds"))
2119
2120(defun newsticker--cache-save ()
2121 "Save cache data for all feeds."
2122 (unless (file-directory-p newsticker-dir)
2123 (make-directory newsticker-dir t))
2124 (mapc 'newsticker--cache-save-feed newsticker--cache)
2125 nil)
2126
2127(defun newsticker--cache-save-feed (feed)
2128 "Save cache data for FEED."
2129 (let ((dir (concat (newsticker--cache-dir) "/" (symbol-name (car feed)))))
2130 (unless (file-directory-p dir)
2131 (make-directory dir t))
2132 (let ((coding-system-for-write 'utf-8))
2133 (with-temp-file (concat dir "/data")
2134 (insert ";; -*- coding: utf-8 -*-\n")
2135 (insert (prin1-to-string (cdr feed)))))))
2136
2137(defun newsticker--cache-read-version1 ()
2138 "Read version1 cache data."
2139 (let ((coding-system-for-read 'utf-8))
2140 (when (file-exists-p newsticker-cache-filename)
2141 (with-temp-buffer
2142 (insert-file-contents newsticker-cache-filename)
2143 (goto-char (point-min))
2144 (condition-case nil
2145 (setq newsticker--cache (read (current-buffer)))
2146 (error
2147 (message "Error while reading newsticker cache file!")
2148 (setq newsticker--cache nil)))))))
2149
2150(defun newsticker--cache-read ()
2151 "Read cache data."
2152 (setq newsticker--cache nil)
2153 (if (file-exists-p newsticker-cache-filename)
2154 (progn
2155 (when (y-or-n-p "Old newsticker cache file exists. Read it? ")
2156 (newsticker--cache-read-version1))
2157 (message "Please remove/rename the old cache file (%s) now."
2158 newsticker-cache-filename))
2159 (mapc (lambda (f)
2160 (newsticker--cache-read-feed (car f)))
2161 (append newsticker-url-list-defaults newsticker-url-list))))
2162
2163(defun newsticker--cache-read-feed (feed-name)
2164 "Read cache data for feed named FEED-NAME."
2165 (let ((file-name (concat (newsticker--cache-dir) "/" feed-name "/data"))
2166 (coding-system-for-read 'utf-8))
2167 (when (file-exists-p file-name)
2168 (with-temp-buffer
2169 (insert-file-contents file-name)
2170 (goto-char (point-min))
2171 (condition-case nil
2172 (add-to-list 'newsticker--cache (cons (intern feed-name)
2173 (read (current-buffer))))
2174 (error
2175 (message "Error while reading newsticker cache file %s!"
2176 file-name))
2177 (setq newsticker--cache nil))))))
2178
2124;; ====================================================================== 2179;; ======================================================================
2125;;; Statistics 2180;;; Statistics
2126;; ====================================================================== 2181;; ======================================================================
@@ -2316,3 +2371,7 @@ This function is suited for adding it to `newsticker-new-item-functions'."
2316 2371
2317;; arch-tag: 0e37b658-56e9-49ab-90f9-f2df57e1a659 2372;; arch-tag: 0e37b658-56e9-49ab-90f9-f2df57e1a659
2318;;; newsticker-backend.el ends here 2373;;; newsticker-backend.el ends here
2374
2375(provide 'newst-backend)
2376
2377;;; newst-backend.el ends here
diff --git a/lisp/net/newst-reader.el b/lisp/net/newst-reader.el
index d364e973f2d..e9ba3403296 100644
--- a/lisp/net/newst-reader.el
+++ b/lisp/net/newst-reader.el
@@ -6,7 +6,7 @@
6;; Author: Ulf Jasper <ulf.jasper@web.de> 6;; Author: Ulf Jasper <ulf.jasper@web.de>
7;; Filename: newst-reader.el 7;; Filename: newst-reader.el
8;; URL: http://www.nongnu.org/newsticker 8;; URL: http://www.nongnu.org/newsticker
9;; Time-stamp: "25. August 2008, 19:35:45 (ulf)" 9;; Time-stamp: "18. November 2008, 20:06:13 (ulf)"
10 10
11;; ====================================================================== 11;; ======================================================================
12 12
@@ -262,7 +262,7 @@ KEYMAP is applied."
262If DISABLED is non-nil the image will be converted to a disabled look 262If DISABLED is non-nil the image will be converted to a disabled look
263\(unless `newsticker-enable-logo-manipulations' is not t\). 263\(unless `newsticker-enable-logo-manipulations' is not t\).
264Return the image." 264Return the image."
265 (let ((image-name (concat newsticker-imagecache-dirname "/" 265 (let ((image-name (concat (newsticker--images-dir)
266 (symbol-name feed-name-symbol))) 266 (symbol-name feed-name-symbol)))
267 (img nil)) 267 (img nil))
268 (when (file-exists-p image-name) 268 (when (file-exists-p image-name)
diff --git a/lisp/net/newst-treeview.el b/lisp/net/newst-treeview.el
index 0df89b8b299..3993e59ca57 100644
--- a/lisp/net/newst-treeview.el
+++ b/lisp/net/newst-treeview.el
@@ -7,7 +7,7 @@
7;; URL: http://www.nongnu.org/newsticker 7;; URL: http://www.nongnu.org/newsticker
8;; Created: 2007 8;; Created: 2007
9;; Keywords: News, RSS, Atom 9;; Keywords: News, RSS, Atom
10;; Time-stamp: "31. Oktober 2008, 20:44:46 (ulf)" 10;; Time-stamp: "24. November 2008, 19:49:20 (ulf)"
11 11
12;; ====================================================================== 12;; ======================================================================
13 13
@@ -149,7 +149,8 @@ Example: (\"Topmost group\" \"feed1\" (\"subgroup1\" \"feed 2\")
149;; ====================================================================== 149;; ======================================================================
150(defvar newsticker--treeview-windows nil) 150(defvar newsticker--treeview-windows nil)
151(defvar newsticker--treeview-buffers nil) 151(defvar newsticker--treeview-buffers nil)
152(defvar newsticker--treeview-current-feed nil) 152(defvar newsticker--treeview-current-feed nil
153 "Feed name of currently shown item.")
153(defvar newsticker--treeview-current-vfeed nil) 154(defvar newsticker--treeview-current-vfeed nil)
154(defvar newsticker--treeview-list-show-feed nil) 155(defvar newsticker--treeview-list-show-feed nil)
155(defvar newsticker--saved-window-config nil) 156(defvar newsticker--saved-window-config nil)
@@ -691,8 +692,9 @@ for the button."
691 (newsticker-treeview-mode) 692 (newsticker-treeview-mode)
692 (goto-char (point-min))))) 693 (goto-char (point-min)))))
693 694
694(defun newsticker--treeview-item-show (item feed) 695(defun newsticker--treeview-item-show (item feed-name-symbol)
695 "Show news ITEM coming from FEED in treeview item buffer." 696 "Show news ITEM coming from FEED-NAME-SYMBOL in treeview item buffer."
697 (setq newsticker--treeview-current-feed (symbol-name feed-name-symbol))
696 (save-excursion 698 (save-excursion
697 (set-buffer (newsticker--treeview-item-buffer)) 699 (set-buffer (newsticker--treeview-item-buffer))
698 (when (fboundp 'w3m-process-stop) 700 (when (fboundp 'w3m-process-stop)
@@ -706,7 +708,7 @@ for the button."
706 (kill-all-local-variables) 708 (kill-all-local-variables)
707 (remove-overlays) 709 (remove-overlays)
708 710
709 (when (and item feed) 711 (when (and item feed-name-symbol)
710 (let ((wwidth (1- (window-width (newsticker--treeview-item-window))))) 712 (let ((wwidth (1- (window-width (newsticker--treeview-item-window)))))
711 (if newsticker-use-full-width 713 (if newsticker-use-full-width
712 (set (make-local-variable 'fill-column) wwidth)) 714 (set (make-local-variable 'fill-column) wwidth))
@@ -726,10 +728,10 @@ for the button."
726 (goto-char (point-min)) 728 (goto-char (point-min))
727 ;; insert logo at top 729 ;; insert logo at top
728 (let* ((newsticker-enable-logo-manipulations nil) 730 (let* ((newsticker-enable-logo-manipulations nil)
729 (img (newsticker--image-read feed nil))) 731 (img (newsticker--image-read feed-name-symbol nil)))
730 (if (and (display-images-p) img) 732 (if (and (display-images-p) img)
731 (newsticker--insert-image img (car item)) 733 (newsticker--insert-image img (car item))
732 (insert (newsticker--real-feed-name feed)))) 734 (insert (newsticker--real-feed-name feed-name-symbol))))
733 (add-text-properties (point-min) (point) 735 (add-text-properties (point-min) (point)
734 (list 'face 'newsticker-feed-face 736 (list 'face 'newsticker-feed-face
735 'mouse-face 'highlight 737 'mouse-face 'highlight
@@ -989,8 +991,6 @@ If RECURSIVE is non-nil recursively update parent widgets as
989well. Argument IGNORE is ignored. Note that this function, if 991well. Argument IGNORE is ignored. Note that this function, if
990called recursively, makes w invalid. You should keep w's nt-id in 992called recursively, makes w invalid. You should keep w's nt-id in
991that case." 993that case."
992 ;;(message "newsticker--treeview-tree-update-tag %s, %s" (widget-get w :tag)
993 ;; (widget-type w))
994 (let* ((parent (widget-get w :parent)) 994 (let* ((parent (widget-get w :parent))
995 (feed (or (widget-get w :nt-feed) (widget-get parent :nt-feed))) 995 (feed (or (widget-get w :nt-feed) (widget-get parent :nt-feed)))
996 (vfeed (or (widget-get w :nt-vfeed) (widget-get parent :nt-vfeed))) 996 (vfeed (or (widget-get w :nt-vfeed) (widget-get parent :nt-vfeed)))
@@ -1207,7 +1207,6 @@ Arguments IGNORE are ignored."
1207 "Update all treeview buffers and windows. 1207 "Update all treeview buffers and windows.
1208Note: does not update the layout." 1208Note: does not update the layout."
1209 (interactive) 1209 (interactive)
1210 (newsticker--cache-update)
1211 (newsticker--group-manage-orphan-feeds) 1210 (newsticker--group-manage-orphan-feeds)
1212 (newsticker--treeview-list-update t) 1211 (newsticker--treeview-list-update t)
1213 (newsticker--treeview-item-update) 1212 (newsticker--treeview-item-update)
@@ -1223,7 +1222,6 @@ Note: does not update the layout."
1223(defun newsticker-treeview-quit () 1222(defun newsticker-treeview-quit ()
1224 "Quit newsticker treeview." 1223 "Quit newsticker treeview."
1225 (interactive) 1224 (interactive)
1226 (newsticker-treeview-save)
1227 (setq newsticker--sentinel-callback nil) 1225 (setq newsticker--sentinel-callback nil)
1228 (bury-buffer "*Newsticker Tree*") 1226 (bury-buffer "*Newsticker Tree*")
1229 (bury-buffer "*Newsticker List*") 1227 (bury-buffer "*Newsticker List*")
@@ -1237,10 +1235,9 @@ Note: does not update the layout."
1237(defun newsticker-treeview-save () 1235(defun newsticker-treeview-save ()
1238 "Save newsticker data including treeview settings." 1236 "Save newsticker data including treeview settings."
1239 (interactive) 1237 (interactive)
1240 (newsticker--cache-save)
1241 (save-excursion 1238 (save-excursion
1242 (let ((coding-system-for-write 'utf-8) 1239 (let ((coding-system-for-write 'utf-8)
1243 (buf (find-file-noselect newsticker-groups-filename))) 1240 (buf (find-file-noselect (concat newsticker-dir "/groups"))))
1244 (when buf 1241 (when buf
1245 (set-buffer buf) 1242 (set-buffer buf)
1246 (setq buffer-undo-list t) 1243 (setq buffer-undo-list t)
@@ -1252,8 +1249,14 @@ Note: does not update the layout."
1252(defun newsticker--treeview-load () 1249(defun newsticker--treeview-load ()
1253 "Load treeview settings." 1250 "Load treeview settings."
1254 (let* ((coding-system-for-read 'utf-8) 1251 (let* ((coding-system-for-read 'utf-8)
1255 (buf (and (file-exists-p newsticker-groups-filename) 1252 (filename
1256 (find-file-noselect newsticker-groups-filename)))) 1253 (or (and (file-exists-p newsticker-groups-filename)
1254 (y-or-n-p
1255 (format "Old newsticker groups (%s) file exists. Read it? "
1256 newsticker-groups-filename))
1257 newsticker-groups-filename)
1258 (concat newsticker-dir "/groups")))
1259 (buf (find-file-noselect filename)))
1257 (when buf 1260 (when buf
1258 (set-buffer buf) 1261 (set-buffer buf)
1259 (goto-char (point-min)) 1262 (goto-char (point-min))
@@ -1377,7 +1380,9 @@ Move to next item unless DONT-PROCEED is non-nil."
1377 (setcar (nthcdr 4 item) new-age) 1380 (setcar (nthcdr 4 item) new-age)
1378 ;; clean up ticker FIXME 1381 ;; clean up ticker FIXME
1379 ) 1382 )
1380 (newsticker--cache-update)) 1383 (newsticker--cache-save-feed
1384 (newsticker--cache-get-feed (intern newsticker--treeview-current-feed)))
1385 (newsticker--treeview-tree-do-update-tags newsticker--treeview-vfeed-tree))
1381 1386
1382(defun newsticker-treeview-mark-list-items-old () 1387(defun newsticker-treeview-mark-list-items-old ()
1383 "Mark all listed items as old." 1388 "Mark all listed items as old."
@@ -1908,10 +1913,9 @@ Remove obsolete feeds as well."
1908 "Actually handle click event. 1913 "Actually handle click event.
1909POS gives the position where EVENT occurred." 1914POS gives the position where EVENT occurred."
1910 (interactive) 1915 (interactive)
1911 (unless pos (setq pos (point))) 1916 (let* ((pos (or pos (point)))
1912 (let ((pos (or pos (point))) 1917 (nt-id (get-text-property pos :nt-id))
1913 (nt-id (get-text-property pos :nt-id)) 1918 (item (get-text-property pos :nt-item)))
1914 (item (get-text-property pos :nt-item)))
1915 (cond (item 1919 (cond (item
1916 ;; click in list buffer 1920 ;; click in list buffer
1917 (newsticker-treeview-show-item)) 1921 (newsticker-treeview-show-item))