* mixi.el (mixi-message-box-list): Add `noticebox'.
[elisp/mixi.git] / mixi-utils.el
index 34a1f07..695dda1 100644 (file)
@@ -1,6 +1,6 @@
 ;; mixi-utils.el --- Utilities for mixi object -*- coding: euc-jp -*-
 
-;; Copyright (C) 2007 OHASHI Akira
+;; Copyright (C) 2007, 2008 OHASHI Akira
 
 ;; Author: OHASHI Akira <bg66@koka-in.org>
 ;; Keywords: hypermedia
@@ -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:
 
@@ -62,6 +62,9 @@
                           (mixi-comment-parent object) add-parent)))
          ((eq class 'mixi-log)
           (mixi-friend-nick (mixi-log-friend object)))
+         ((eq class 'mixi-echo)
+          (concat (mixi-friend-nick (mixi-echo-owner object)) " ("
+                  (mixi-echo-post-time object) ")"))
          (t
           (let ((prefix (when (eq class 'mixi-event) "[¥¤¥Ù¥ó¥È]"))
                 (subject (mixi-object-title object))
                                   ")"))))
             (concat prefix subject suffix))))))
 
-(defun mixi-make-author (object)
+(defun mixi-make-author (object &optional add-comment-count)
   (with-mixi-class object
-    (if (eq class 'mixi-news)
-       (mixi-news-media object)
-      (let ((owner (if (eq class 'mixi-log)
-                      (mixi-log-friend object)
-                    (mixi-object-owner object))))
-       (mixi-friend-nick owner)))))
+    (cond ((eq class 'mixi-news)
+          (mixi-news-media object))
+         ((and add-comment-count
+               (eq class 'mixi-comment)
+               (mixi-bbs-p (mixi-comment-parent object)))
+          (concat (mixi-comment-count object) " "
+                  (mixi-friend-nick (mixi-comment-owner object))))
+         ((eq class 'mixi-release)
+          "mixi±¿±Ä»ö̳¶É")
+         ((eq class 'mixi-message)
+          (let ((owner (mixi-message-owner object)))
+            (if (null owner) "mixi" (mixi-friend-nick owner))))
+         (t
+          (let ((owner (if (eq class 'mixi-log)
+                           (mixi-log-friend object)
+                         (mixi-object-owner object))))
+            (mixi-friend-nick owner))))))
+
+(defun mixi-make-time (object)
+  (with-mixi-class object
+    (if (eq class 'mixi-echo)
+       (let ((post-time (mixi-echo-post-time object)))
+         (encode-time
+          (string-to-number (substring post-time 12 14))
+          (string-to-number (substring post-time 10 12))
+          (string-to-number (substring post-time 8 10))
+          (string-to-number (substring post-time 6 8))
+          (string-to-number (substring post-time 4 6))
+          (string-to-number (substring post-time 0 4))))
+      (mixi-object-time object))))
 
 (defun mixi-make-date (object)
-  (let* ((time (mixi-object-time object))
+  (let* ((time (mixi-make-time object))
         (cts (current-time-string time))
         (day-of-week (substring cts 0 3))
         (month (substring cts 4 7)))
 (defun mixi-make-id-1 (object)
   (with-mixi-class object
     (concat
-     (format-time-string "%Y%m%d%H%M" (mixi-object-time object)) "."
+     (format-time-string "%Y%m%d%H%M" (mixi-make-time object)) "."
      (cond ((eq class 'mixi-comment)
            (concat (mixi-friend-id (mixi-comment-owner object)) "@"
                    (mixi-object-id (mixi-comment-parent object)) "."
                                     (mixi-comment-parent object))) "."))
           ((eq class 'mixi-log)
            (concat (mixi-friend-id (mixi-log-friend object)) "@"))
+          ((eq class 'mixi-release)
+           (concat (md5 (mixi-release-title object)) "@"))
+          ((eq class 'mixi-echo)
+           (concat (mixi-friend-id (mixi-echo-owner object)) "@"))
+          ((and (eq class 'mixi-message) (null (mixi-message-owner object)))
+           (concat (mixi-object-id object) "@"))
           (t
            (concat (mixi-object-id object) "@"
                    (if (eq class 'mixi-news)
 
 (defun mixi-make-tag-uri (object)
   (format "tag:mixi.jp,%s:%s"
-         (format-time-string "%Y-%m-%d" (mixi-object-time object))
+         (format-time-string "%Y-%m-%d" (mixi-make-time object))
          (mixi-make-id-1 object)))
 
 (defun mixi-make-url (object)
           (mixi-expand-url (mixi-message-page object)))
          ((eq class 'mixi-news)
           (mixi-news-page object))
+         ((eq class 'mixi-release)
+          (let ((url (mixi-release-list-page)))
+            (mixi-expand-url (substring url 0
+                                        (string-match "?" url)))))
          ((eq class 'mixi-log)
           (mixi-expand-url (mixi-friend-page (mixi-log-friend object))))
          ((eq class 'mixi-friend)
-          (mixi-expand-url (mixi-friend-page object))))))
+          (mixi-expand-url (mixi-friend-page object)))
+         ((eq class 'mixi-echo)
+          (mixi-expand-url (mixi-echo-page object))))))
 
 (defun mixi-make-encoded-url (object)
   (mixi-url-encode-string (mixi-make-url object)))
 (defun mixi-make-content (object)
   (with-mixi-class object
     (cond ((eq class 'mixi-event)
-          (let ((limit (mixi-event-limit object)))
-            (setq limit (if limit
-                            (format-time-string "%Yǯ%m·î%dÆü" limit)
-                          "»ØÄê¤Ê¤·"))
-            (concat "<dl>"
-                    "<dt>³«ºÅÆü»þ¡§</dt>"
-                    "<dd>" (mixi-event-date object) "</dd>\n"
-                    "<dt>³«ºÅ¾ì½ê¡§</dt>"
-                    "<dd>" (mixi-event-place object) "</dd>\n"
-                    "<dt>¾ÜºÙ¡§</dt>"
-                    "<dd>" (mixi-event-detail object) "</dd>\n"
-                    "<dt>Ê罸´ü¸Â¡§</dt>"
-                    "<dd>" limit "</dd>\n"
-                    "<dt>»²²Ã¼Ô¡§</dt>"
-                    "<dd>" (mixi-event-members object) "</dd>\n"
-                    "</dl>")))
+          (concat "<dl>"
+                  "<dt>³«ºÅÆü»þ¡§</dt>"
+                  "<dd>" (mixi-event-date object) "</dd>\n"
+                  "<dt>³«ºÅ¾ì½ê¡§</dt>"
+                  "<dd>" (mixi-event-place object) "</dd>\n"
+                  "<dt>¾ÜºÙ¡§</dt>"
+                  "<dd>" (mixi-event-detail object) "</dd>\n"
+                  "<dt>Ê罸´ü¸Â¡§</dt>"
+                  "<dd>" (mixi-event-limit object) "</dd>\n"
+                  "<dt>»²²Ã¼Ô¡§</dt>"
+                  "<dd>" (mixi-event-members object) "</dd>\n"
+                  "</dl>"))
          ((eq class 'mixi-friend)
           (if (mixi-object-realized-p object)
               (let ((sex (if (eq (mixi-friend-sex object) 'male) "ÃË" "½÷"))
                                               (mixi-friend-birthday object)
                                               "·î") "Æü")
                                 "??·î??Æü"))
-                    (blood-type (symbol-name
-                                 (mixi-friend-blood-type object)))
+                    (blood-type (if (mixi-friend-blood-type object)
+                                    (symbol-name
+                                     (mixi-friend-blood-type object))
+                                  "?"))
                     (hobby (mapconcat 'identity
                                       (mixi-friend-hobby object) ", ")))
                 (concat "<dl>"
                          (mixi-community-id object)))
                 ((or (eq class 'mixi-news) (eq object (mixi-make-me)))
                  (concat mixi-reply-to "diary"))
-                ((eq class 'mixi-message)
+                ((and (eq class 'mixi-message)
+                      (not (null (mixi-message-owner object))))
                  (concat mixi-reply-to "message;"
                          (mixi-friend-id (mixi-message-owner object))))
                 ((or (eq class 'mixi-friend) (eq class 'mixi-log))
                  (concat mixi-reply-to "message;"
-                         (mixi-friend-id object))))))))
+                         (mixi-friend-id object)))
+                ((eq class 'mixi-echo)
+                 (concat mixi-reply-to "echo;"
+                         (mixi-friend-id (mixi-echo-owner object)) ";"
+                         (mixi-echo-post-time object)))
+                (t
+                 (concat mixi-reply-to "diary")))))))
 
 (defconst mixi-to-regexp
   "^mixi;\\([a-z]+\\);?\\([a-z0-9]+\\)?;?\\([0-9]+\\)?;?\\([0-9]+\\)?")
             (mixi-post-diary title content))
            ((string= method "message")
             (mixi-post-message (mixi-make-friend (match-string 2 to))
-                               title content))))))
+                               title content))
+           ((string= method "echo")
+            (let ((owner-id (match-string 2 to))
+                  (post-time (match-string 3 to)))
+              (mixi-post-echo content
+                              (mixi-make-echo (mixi-make-friend owner-id)
+                                              post-time))))))))
 
 (provide 'mixi-utils)