* mixi-el: Version 1.4.1 released.
[elisp/mixi.git] / sb-mixi.el
index 691b010..259a31f 100644 (file)
@@ -1,6 +1,6 @@
 ;;; sb-mixi.el --- shimbun backend for mixi
 
-;; Copyright (C) 2006, 2007 OHASHI Akira
+;; Copyright (C) 2006, 2007, 2008 OHASHI Akira
 
 ;; Author: OHASHI Akira <bg66@koka-in.org>
 ;; Keywords: news
@@ -18,9 +18,9 @@
 ;; GNU General Public License for more details.
 
 ;; You should have received a copy of the GNU General Public License
-;; along with this program; if not, you can either send email to this
-;; program's maintainer or write to: The Free Software Foundation,
-;; Inc.; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+;; along with GNU Emacs; see the file COPYING.  If not, write to the
+;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
 
 ;;; Commentary:
 
 (require 'mixi-utils)
 (require 'shimbun)
 
-(defconst shimbun-mixi-revision "$Revision: 1.57 $")
+(defconst shimbun-mixi-revision "$Revision: 1.63 $")
 
 (eval-and-compile
-  (luna-define-class shimbun-mixi (shimbun) (comment-cache))
+  (luna-define-class shimbun-mixi (shimbun) (comment-cache release-cache))
   (luna-define-internal-accessors 'shimbun-mixi))
 
 (defconst shimbun-mixi-default-group-alist
   '(("new-diaries" . mixi-get-new-diaries)
     ("new-comments" . mixi-get-new-comments)
     ("new-bbses" . mixi-get-new-bbses)
+    ("new-bbs-comments" . mixi-get-new-bbs-comments)
     ("messages" . mixi-get-messages)
     ("messages.sent" .
      (lambda (range)
     ("news.newest.it" .
      (lambda (range)
        (mixi-get-news 'IT 'newest range)))
+    ("news.newest.game-anime" .
+     (lambda (range)
+       (mixi-get-news 'game-anime 'newest range)))
+    ("news.newest.column" .
+     (lambda (range)
+       (mixi-get-news 'column 'newest range)))
     ("news.pickup.domestic" .
      (lambda (range)
        (mixi-get-news 'domestic 'pickup range)))
        (mixi-get-news 'entertainment 'pickup range)))
     ("news.pickup.it" .
      (lambda (range)
-       (mixi-get-news 'IT 'pickup range))))
+       (mixi-get-news 'IT 'pickup range)))
+    ("news.pickup.game-anime" .
+     (lambda (range)
+       (mixi-get-news 'game-anime 'pickup range)))
+    ("news.pickup.column" .
+     (lambda (range)
+       (mixi-get-news 'column 'pickup range)))
+    ("releases" . mixi-get-releases))
   "An alist of mixi shimbun group default definition.")
 
 (defcustom shimbun-mixi-group-alist nil
@@ -113,18 +127,18 @@ of mixi object."
   :type '(repeat (cons :fromat "%v"
                       (string :tag "Group name")
                       (radio (string :tag "URL")
-                             (const :tag "New diaries" mixi-get-new-diaries)
-                             (const :tag "New comments" mixi-get-new-comments)
-                             (const :tag "New BBSes" mixi-get-new-bbses)
-                             (const :tag "Messages" mixi-get-messages)
-                             (const :tag "Logs" mixi-get-logs)
-                             (function :tag "Other function")))))
+                             (function :tag "Function")))))
 
 (defcustom shimbun-mixi-get-profile-with-diary t
   "*If non-nil, get his/her profile together with diaries."
   :group 'shimbun
   :type 'boolean)
 
+(defcustom shimbun-mixi-add-comment-count-to-author t
+  "*If non-nil, add comment count to author."
+  :group 'shimbun
+  :type 'boolean)
+
 ;; FIXME: Don't use this user option.
 (defcustom shimbun-mixi-page-articles 10
   "*How many articles are there in one page."
@@ -144,10 +158,13 @@ of mixi object."
                                                &rest init-args)
   (shimbun-mixi-set-comment-cache-internal shimbun
                                           (make-hash-table :test 'equal))
+  (shimbun-mixi-set-release-cache-internal shimbun
+                                          (make-hash-table :test 'equal))
   shimbun)
 
 (luna-define-method shimbun-close :after ((shimbun shimbun-mixi))
   (shimbun-mixi-set-comment-cache-internal shimbun nil)
+  (shimbun-mixi-set-release-cache-internal shimbun nil)
   (mixi-logout))
 
 (luna-define-method shimbun-groups ((shimbun shimbun-mixi))
@@ -185,7 +202,7 @@ of mixi object."
                                       "^new-"
                                       (shimbun-current-group-internal
                                        shimbun)))
-             (mixi-make-author object)
+             (mixi-make-author object shimbun-mixi-add-comment-count-to-author)
              (mixi-make-date object)
              id
              (if (eq class 'mixi-comment)
@@ -228,6 +245,21 @@ of mixi object."
          (setq comments (cdr comments)))))
     article))
 
+(defun shimbun-mixi-release-article (shimbun header)
+  (let* ((message-id (shimbun-header-id header))
+        (cache (shimbun-mixi-release-cache-internal shimbun))
+        (article (gethash message-id cache)))
+    (unless (stringp article)
+      (let ((releases (mixi-get-releases)))
+       (while releases
+         (let ((id (mixi-make-message-id (car releases)))
+               (content (mixi-release-content (car releases))))
+           (puthash id content cache)
+           (when (string= id message-id)
+             (setq article content)))
+         (setq releases (cdr releases)))))
+    article))
+
 (luna-define-method shimbun-article ((shimbun shimbun-mixi)
                                     header &optional outbuf)
   (when (shimbun-current-group-internal shimbun)
@@ -236,10 +268,14 @@ of mixi object."
        (or (with-temp-buffer
             (let* ((url (shimbun-article-url shimbun header))
                    (object (mixi-make-object-from-url url))
-                   (article (if (string-match "#comment$" url)
-                                (shimbun-mixi-comment-article
-                                 url shimbun header)
-                              (mixi-make-content object))))
+                   (article (cond ((string-match "#comment$" url)
+                                   (shimbun-mixi-comment-article
+                                    url shimbun header))
+                                  ((string-match "release_info.pl$" url)
+                                   (shimbun-mixi-release-article
+                                    shimbun header))
+                                  (t
+                                   (mixi-make-content object)))))
               (mixi-make-reply-to object)
               (when (stringp article)
                 (insert article)))