* mixi.el (mixi-make-release): New function.
[elisp/mixi.git] / sb-mixi.el
index 6aaff8d..4e78d12 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.62 $")
+
 (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
@@ -111,12 +127,17 @@ 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
@@ -137,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))
@@ -154,6 +178,11 @@ of mixi object."
     (catch 'stop
       (while objects
        (let ((object (car objects)))
+         (when (and shimbun-mixi-get-profile-with-diary
+                    (mixi-diary-p object))
+           (let ((owner (mixi-diary-owner object)))
+             (unless (mixi-object-realized-p owner)
+               (mixi-realize-friend owner))))
          (when (mixi-parent-p object)
            (let* ((comments (mixi-get-comments object range))
                   (comment-headers (shimbun-mixi-get-headers shimbun
@@ -173,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)
@@ -192,9 +221,9 @@ of mixi object."
                                         &optional range)
   (let ((url-or-function (cdr (assoc (shimbun-current-group-internal shimbun)
                                     (shimbun-mixi-group-alist))))
-       (pages (shimbun-header-index-pages range)))
-    (when (integerp pages)
-      (setq range (* pages shimbun-mixi-page-articles)))
+       (range (shimbun-header-index-pages range)))
+    (when (integerp range)
+      (setq range (* range shimbun-mixi-page-articles)))
     (shimbun-sort-headers
      (shimbun-mixi-get-headers shimbun
                               (mixi-make-objects url-or-function range)
@@ -216,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)
@@ -224,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)))