[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 ---