;; 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).
(defvar riece-mixi-timer nil)
(defvar riece-mixi-last-check nil)
-(defvar riece-mixi-enabled nil)
-
(defconst riece-mixi-description
"Riece integration for mixi.")
(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)))
(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))))
'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
(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)))