;;; 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
;; 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.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
: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
&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))
(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
"^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)
&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)
(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)
(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)))