(mixi-search-diary-list-regexp): Follow the change of mixi.
[elisp/mixi.git] / riece-mixi.el
index a5002fb..03d7b09 100644 (file)
 
 ;; NOTE: This is an add-on module for Riece.
 
+;; If you have bug reports and/or suggestions for improvement, please
+;; send them via <URL:http://mixi.jp/view_community.pl?id=1596390>.
+
 ;;; Code:
 
 (require 'mixi)
 (require 'mixi-utils)
 (require 'timer)
-
-;; Functions and variables which should be defined in the other module
-;; at run-time.
-(eval-when-compile
-  (defvar riece-current-channels)
-  (autoload 'riece-send-string "riece-server")
-  (autoload 'riece-identity-prefix "riece-identity")
-  (autoload 'riece-display-message "riece-message")
-  (autoload 'riece-make-message "riece-message")
-  (autoload 'riece-current-nickname "riece-misc")
-  (autoload 'riece-message-text "riece-message")
-  (autoload 'riece-message-target "riece-message")
-  (autoload 'riece-parse-identity "riece-identity"))
+(require 'riece-message)
 
 (defgroup riece-mixi nil
   "Riece integration for mixi."
   :type 'string
   :group 'riece-mixi)
 
+(defcustom riece-mixi-reply-to-only-me nil
+  "*If non-nil, reply to only my messages."
+  :type 'boolean
+  :group 'riece-mixi)
+
 (defcustom riece-mixi-check-alist nil
   "*An alist for checking to detect new articles.
 Each element looks like (CHANNEL . URL) or (CHANNEL . FUNCTION).
@@ -82,8 +78,6 @@ of mixi object."
 (defvar riece-mixi-timer nil)
 (defvar riece-mixi-last-check nil)
 
-(defvar riece-mixi-enabled nil)
-
 (defconst riece-mixi-description
   "Riece integration for mixi.")
 
@@ -100,7 +94,9 @@ of mixi object."
     (error nil)))
 
 (defun riece-mixi-display-message-function (message)
-  (when (and riece-mixi-enabled
+  (when (and (get 'riece-mixi 'riece-addon-enabled)
+            (or (riece-message-own-p message)
+                (not riece-mixi-reply-to-only-me))
             (string-match riece-mixi-regexp (riece-message-text message)))
     (let* ((url (match-string 1 (riece-message-text message)))
           (object (mixi-make-object-from-url url)))
@@ -110,39 +106,36 @@ of mixi object."
 
 (defun riece-mixi-send-object-with-url (target object)
   (condition-case nil
-      (let ((string (mixi-make-title object t))
-           (url (mixi-make-url object)))
-       (riece-mixi-send-notice target string)
+      (let ((url (mixi-make-url object)))
        (riece-mixi-send-notice target url))
     (error nil)))
 
 (defun riece-mixi-check ()
   "Check to detect new articles.
 If they exist, send them as notice to the corresponding channel."
-  (when riece-mixi-enabled
+  (when (get 'riece-mixi 'riece-addon-enabled)
     (mapc (lambda (list)
            (let ((target (riece-parse-identity (car list)))
                  (url-or-function (cdr list)))
              (when (member target riece-current-channels)
                (let ((objects (mixi-make-objects url-or-function
                                                  riece-mixi-check-range)))
-                 (mapc (lambda (object)
-                         (when (mixi-parent-p object)
-                           (let ((comments (mixi-get-comments
-                                            object riece-mixi-check-range)))
-                             (mapc (lambda (comment)
-                                     (let ((time (mixi-object-time comment)))
-                                       (when (mixi-time-less-p
-                                              riece-mixi-last-check time)
-                                         (riece-mixi-send-object-with-url
-                                          target comment))))
-                                   comments)))
-                         (let ((time (mixi-object-time object)))
-                           (when (mixi-time-less-p riece-mixi-last-check
-                                                   time)
-                             (riece-mixi-send-object-with-url target
-                                                              object))))
-                       objects)))))
+                 (while objects
+                   (let ((object (car objects)))
+                     (when (mixi-parent-p object)
+                       (let ((comments (mixi-get-comments
+                                        object riece-mixi-check-range)))
+                         (while comments
+                           (let ((time (mixi-object-time (car comments))))
+                             (when (mixi-time-less-p riece-mixi-last-check
+                                                     time)
+                               (riece-mixi-send-object-with-url
+                                target (car comments))))
+                           (setq comments (cdr comments)))))
+                     (let ((time (mixi-object-time object)))
+                       (when (mixi-time-less-p riece-mixi-last-check time)
+                         (riece-mixi-send-object-with-url target object))))
+                   (setq objects (cdr objects)))))))
          riece-mixi-check-alist)
     (setq riece-mixi-last-check (current-time))))
 
@@ -151,7 +144,6 @@ If they exist, send them as notice to the corresponding channel."
            'riece-mixi-display-message-function))
 
 (defun riece-mixi-enable ()
-  (setq riece-mixi-enabled t)
   (when riece-mixi-check-alist
     (setq riece-mixi-timer
          (run-at-time riece-mixi-timer-step riece-mixi-timer-step
@@ -159,7 +151,6 @@ If they exist, send them as notice to the corresponding channel."
     (setq riece-mixi-last-check (current-time))))
 
 (defun riece-mixi-disable ()
-  (setq riece-mixi-enabled nil)
   (when (timerp riece-mixi-timer)
     (cancel-timer riece-mixi-timer)
     (setq riece-mixi-timer nil)))