[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mhc:02148] 添付 vCalendar の import



野口です。

PC 上 mhc のスケジュールをと手持ちの au ケータイ (W21CAII) のスケジュー
ラを連携して使いたいと思っています。
# PDAより軽くて、携帯するのに邪魔にならないため。

mhc -> W21CAII 方向のエクスポートは特に問題はなく

  mhc->(mhc2ol)->outlook<=>(同期ツール(※1))<=>W21CAII 
(※1) http://www.mysync.jp/ 等の売り物

で行っています。
大半はこの方向なのですが、稀に外出先でスケジュールが決まることがあります。
そのような場合は、とりあえず W21CAII のスケジューラに直接スケジュール
を登録するのですが、この「W21CAII で登録したスケジュールを、なるべく楽
に mhc へ持っていきたい」と思っています。

具合の良いことに、W21CAII には「スケジュール情報を vCalendar 形式の添
付ファイルにして、Email で送信する」という機能があり、これを利用しよう
と考えました。

そこで、添付 mhc-vcalendar.el のようなものを作ってみたのですが、何点か
自力では解決できない問題があり、行きづまってしまいました。
よろしければ、アドバイスをいただけないでしょうか。

(1) 本来は、通常の import 同様に、 C-c . | (mhc-import) でとりこむよう
    にしたかったのですが、mhc-default-import-original-article が nil の
    状態では、guess の機構がまったく働いてくれません。
    vCalendar データが base64 にエンコードして添付されていること関係が
    あるかと思っているのですが、よくわかりません。
    暫定処置として vCalendar の取り込み時だけ、一時的に
    mhc-default-import-original-article =t とする wrapper 関数を作りま
    した。
    (私の通常の使い方は、mhc-default-import-original-article =nil なので)
 
(2) (1) で取り込んだ mhc のスケジュール(vCalendarが添付されている)を、
    参照しようとすると、正しく表示されません。
    W21CAII から送信したもの(本メールに添付)は base64 でエンコーディン
    グされているため
Content-Transfer-Encoding: base64
    が付いています。
    mhc-default-import-original-article =t でとりこんだメールは、 mhc に
    とりこんだ時点で添付部分がデコードされるようなのですが、
Content-Transfer-Encoding: base64
    がそのまま残っているため、形式が一致せず表示ができないようです。

    → 添付部分の"Content-Transfer-Encoding: base64"を自動で削るには
       どうしたら良いでしょうか?
       または、再度 base64 エンコーディングして登録する方法でも良い
       です。(矛盾さえしなければOKなので)

(3) 自作の正規表現で、とりあえず date, time, location を vCalendar デー
    タから guess はできるようにはなったのですが...
    location については、「内容」が 
LOCATION;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g=89=EF=8F=EA
    とエンコードされた形で送られてきます。
    現在、この部分をデコードする方法がよくわからず、
    "=83e=83X=83g=89=EF=8F=EA" がそのまま登録されてしまいます。
    狙いとしては、現在

(setq mhc-guess-location-regexp-list
:
    (,(concat "\\(LOCATION\\)[;]?\\(ENCODING=[A-z-_]*\\)?:\\(.*\\)")
     mhc-guess/make-location-from-string 3)))

   となっている個所で、
       (mhc-guess/make-location-from-string-cs STRING CODING-SYSTEM)
   のようなデコード関数(新規に定義)に渡してやりたいと思っているのです
   が、デコード方法がよく分らず、頓挫しています。
   Outlook にとりこませると、正しく日本語表記になりますので、データ形
   式が不正ということはなさそうです。
   ちなみに、添付 vCalendar でエンコードされている個所の内容は、それぞれ
   以下の通りです。

SUMMARY;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g
  → テスト
LOCATION;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g=89=EF=8F=EA
  → テスト会場
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g=83X=83P=83W=83=85=81[=
=83=8B
  → テストスケジュール

以上、参考情報へのポインタ等を御存知の方がいらっしゃいましたら、アドバ
イスいただけますでしょうか?
よろしくお願いいたします。

P.S.
添付の mhc-vcalendar.el を使うには、あらかじめ mhc-*-setup() が実行さ
れた状態になった上で、load-file() 等でよみこまないと動作しません。
(まだ、Prototypeですので)

-- 
NOGUCHI Yusuke <nogunogu@xxxxxxxxxxxxxxxxx>
;;; mhc-vcalendar.el
;;; 
;;; Prototype 2005/09/02

;;; User I/F
(defun mhc-import-vcalendar (&optional get-original)
  "Wrapper function of mhc-import() for importing vCalendar."
  (interactive
   (let (mhc-default-import-original-article-org)
     (setq mhc-default-import-original-article-org mhc-default-import-original-article)
     (unwind-protect
	 (progn
	   (setq mhc-default-import-original-article t)
	   (list (if mhc-default-import-original-article 
		     (not current-prefix-arg)
		   current-prefix-arg)))
       (setq mhc-default-import-original-article mhc-default-import-original-article-org))))
  (mhc-window-push)
  (unless (mhc-edit (mhc-summary-get-import-buffer get-original))
    ;; failed.
    (mhc-window-pop)))

;;; guess Location

;; (push
;;  (,(concat "\\(LOCATION\\)[;]?\\(ENCODING=[A-z-_]*\\)?:\\(.*\\)")
;;   mhc-guess/make-location-from-string 3)
;;  mhc-guess-location-regexp-list)

;; re-define (mhc-guess.el)
(setq mhc-guess-location-regexp-list
  `(
    (,(concat "[会  ]*場[  ]*所[  ]*[::]*[\n  ]*\\([^\n  ]+\\)")
     mhc-guess/make-location-from-string 1)
    (,(concat "於[  ]*\\([^\n  ]+\\)")
     mhc-guess/make-location-from-string 1)
    (,(concat "[@@][  ]*\\([^\n  .]+\\)[  \n]")
     mhc-guess/make-location-from-string 1)
    (,(concat "\\(LOCATION\\)[;]?\\(ENCODING=[A-z-_]*\\)?:\\(.*\\)")
     mhc-guess/make-location-from-string 3)))

(mhc-guess-location-setup)


;;; guess date
(setq mhc-guess-date-iso8601-regexp-list
      `(
	(,(concat "\\(DTSTART:\\)"
		  "\\([0-9][0-9][0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)"
		  "\\(T\\)?\\([0-9]*\\)\\(Z\\)?[\n]?"
		  "\\(DTEND:\\)"
		  "\\([0-9][0-9][0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)")
	 mhc-guess/make-date-from-yyyymmdd 2 3 4 9 10 11)))

;; re-define (mhc-guess.el)
(defun mhc-guess-date (&optional hint1)
  (let ((now (or (mhc-date-new-from-string3 (mhc-header-get-value "Date"))
		 (mhc-date-now))))
    (mhc-guess/guess
     (if mhc-guess-ignore-english-date
	 (list mhc-guess-date-regexp-list)
       (list mhc-guess-date-regexp-list mhc-guess-date-english-regexp-list
	     mhc-guess-date-iso8601-regexp-list))
     hint1 now)))


;;; guess time
(defvar mhc-guess-time-iso8601-regexp-list
  `(
    (,(concat "\\(DTSTART:\\)\\([0-9]*\\)T"
	      "\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)"
	      "\\(Z\\)"
	      "\\([\n]\\)\\(DTEND:\\)\\([0-9]*\\)T"
	      "\\([0-9][0-9]\\)\\([0-9][0-9]\\)\\([0-9][0-9]\\)"
	      "\\(Z\\)?"
	      )
     mhc-guess/make-time-from-hhmm-with-tz 3 4 6 10 11 13)
    ))

(defun mhc-guess/make-time-from-hhmm-with-tz
  (now hh-str mm-str tz1 hh-str2 mm-str2 tz2 &optional relative)
  (let ((now (current-time-string))
	time-list start	end)
    (setq time-list 
	  (mhc-guess/make-time-from-hhmm now hh-str mm-str hh-str2 mm-str2 relative))
    (setq start (car time-list))
    (setq end (cdr time-list))
    (if (and start tz1)
	(setq start (mhc-time+ start (/ (car (current-time-zone)) 60))))
    (if (and end tz2)
	(setq end (mhc-time+ end (/ (car (current-time-zone)) 60))))
    (cons start end)))

;; re-define (mhc-guess.el)
(defun mhc-guess-time (&optional hint1)
  (mhc-guess/guess (list mhc-guess-time-regexp-list
			 mhc-guess-time-iso8601-regexp-list) hint1))

--- Begin Message ---
スケジュールです
BEGIN:VCALENDAR
VERSION:1.0
BEGIN:VEVENT
CLASS:PUBLIC
DTSTART:20050907T104000Z
DTEND:20050908T114000Z
AALARM:20050907T103500Z
SUMMARY;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g
CATEGORIES:BUSINESS
LOCATION;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g=89=EF=8F=EA
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g=83X=83P=83W=83=85=81[=
=83=8B
LAST-MODIFIED:20050907T015129Z
END:VEVENT
END:VCALENDAR

--- End Message ---