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

[mhc:02149] Re: 添付 vCalendar の import



白井です。

# 結局? mhc2au はすっかりあきらめて、携帯には today を改造して
# 一週間の予定一覧メール、mhc-alarm を改造してアラームメールを送
# るっていうので満足してしまいました ^^;

## だって、携帯電話(A1402SII)がきちんと解釈できる vcalendar を作
## るのがとってもとっても面倒くさかったのだもん。Zaurus 買ったか
## らいつでも MHC が身近にあるし ^^;;;

From: NOGUCHI Yusuke <nogunogu@xxxxxxxxxxxxxxxxx> さん曰く
Subject: [mhc:02148] 添付 vCalendar の import
Message-ID: <20050907.190035.82050715.nogunogu@xxxxxxxxxxxxxxxxx>
Date: Wed, 07 Sep 2005 19:00:35 +0900 (JST)

> mhc -> W21CAII 方向のエクスポートは特に問題はなく
>   mhc->(mhc2ol)->outlook<=>(同期ツール(※1))<=>W21CAII 
> (※1) http://www.mysync.jp/ 等の売り物

こういうのは Palm の方が便利だったんですよねぇー。
携帯電話は癖がありすぎます。

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

# ちなみにぼくがそういうことをする場合は、携帯に登録してある定型
# 文(MHC が間違いなく解釈出来るフォーマット)を使って、メールを出
# して、MHC で取り込みます。ごめんなさい。軟弱です。

> (1) 本来は、通常の import 同様に、 C-c . | (mhc-import) でとりこむよう
>     にしたかったのですが、mhc-default-import-original-article が nil の
>     状態では、guess の機構がまったく働いてくれません。

これは、"C-uC-c.|" と "C-u" をつければ
mhc-default-import-original-article => t と同じ動きになります。

ただし、mhc-default-import-original-article => t のとき(要するに
multipart をそのまま import するとき) の機能は (Mew に関しては)
非常にいいかげんでして、Mew で言えば "," したものをそのままイン
ポートするだけです。で、それで作ったスケジュールを
mhc-draft-finish() するときの解析がそれ以上にいいかげんになって
います。

# MS-Word とか地図の画像などはこれでうまく行くので ^^;;;
# 他の MUA は知りません。

また、野口さんご指摘のように、

Content-Type: text/x-vcalendar

のように CT が Text だと Mew が Base64 を Decode しちゃうから

> Content-Transfer-Encoding: base64

と矛盾が発生するのですね。

ぼくが考えるに、

>     暫定処置として vCalendar の取り込み時だけ、一時的に
>     mhc-default-import-original-article =t とする wrapper 関数を作りま
>     した。

このラッパで、

(1) Content-Type: text/x-vcalendar なパートを探して、
(2) Content-Type: text/x-vcalendar; charset=ISO-2022-JP と
    charset を追加して、
(3) Content-Transfer-Encoding: base64 => 7bit に変換して、
    (その行を消しても OK)
(4) SUMMARY;ENCODING=QUOTED-PRINTABLE:=83e=83X=83g などをデコー
    ドしてから、
(5) mhc-edit() に渡す。

とうまく行くような気がします。ちなみに、(4) のデコード方法は、基
本的には

(a) q-enc された string を mew-q-decode-string に渡して、
(b) shift_jis で decode-coding-string する。

とほどけます。(携帯電話は utf-8 にあらず)

(decode-coding-string
 (mew-q-decode-string "=83e=83X=83g")
 'shift_jis)
=> "テスト"

# Mew じゃないと quoted-printable-decode-string() かな?

エラーしたときとか、multi-part の boundary とかまったく考えてい
ませんが、こんな感じになりました。

(defun mhc-import-vcalendar ()
  "Wrapper function of mhc-import() for importing vCalendar."
  (interactive)
  (mhc-window-push)
  (let ((buf (mhc-summary-get-import-buffer 'original)))
    (save-excursion
      (set-buffer buf)
      (let ((buffer-read-only nil)
	    start qstr)
	(goto-char (point-min))
	(when (re-search-forward "^Content-Type: text/x-vcalendar" nil t)
	  (delete-region (point) (line-end-position))
	  (insert "; charset=ISO-2022-JP")
	  (when (re-search-forward "^Content-Transfer-Encoding:" nil t)
	    (delete-region (line-beginning-position)
			   (progn (forward-line) (point)))
	    (while (re-search-forward ";ENCODING=QUOTED-PRINTABLE:" nil t)
	      (setq start (match-beginning 0))
	      (setq qstr (buffer-substring (match-end 0) (line-end-position)))
	      (forward-line)
	      (while (eq (aref qstr (1- (length qstr))) ?=)
		(setq qstr (substring qstr 0 -1))
		(setq qstr (concat qstr 
				   (buffer-substring (point) (line-end-position))))
		(forward-line))
	      (delete-region start (point))
	      (setq qstr (decode-coding-string (mew-q-decode-string qstr) 'shift_jis))
	      (insert ":" qstr "\n"))))))
    (unless (mhc-edit buf)
      (mhc-window-pop))))

## 息抜き終了 :-)

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxxxx)