[mew-dist 21436] IMAP local refile

Kazu Yamamoto ( 山本和彦 ) kazu at example.com
2002年 8月 15日 (木) 17:00:36 JST


書かないと忘れてしまうので、投げておきます。IMAP local refile デザイン・
メモです。

・online、offline 問題

	- online、offline というモードを作るのは嫌だ

	- でも、offline か素早く判定する方法はない

		* open-network-stream() は、getaddrinfo() や connect() 
                  でブロックされる。どうも、getaddrinfo() でブロックさ
                  れた場合は、Emacs のタイマーが効かないみたい。Emacs
                  21 では、connect() でもタイマーが効かないみたい

		* 4 秒で open-network-stream() が終了しないと、タイマー
                  抜けて、offline だと判定する現在の方法は、特定の環境
                  でしか役に立ちそうもない

	- "x" して、open-network-stream() で刺さったら、C-g で抜けられ
	  る。抜けたら、invisible の行を visible に戻す今のコードのま
	  までよい

	- exec-offline というコマンドを作って、どれかのキーに割り当て
          る。ユーザに online/offline を意識させるが、モードはなし。コ
          マンドを使い分ける

・exec-offline

	- キャッシュ・メールをキャッシュ・フォルダへ移動
	- 移動後のメッセージの番号は、"0" から始まる (これが無効マーク)
	- リモート側の操作は、.imap/user at example.com/ ごとの job queue に入
          れる

・Job queue

	- IMAP のコネクションを張る("s" or "x")前に、job queue をチェッ
          クし、あらかじめ処理する
	- job queue に異なるフォルダへの処理があったらどうする?
	  1 コネクションで、複数回 SELECT して問題ないか?
	  → 実装してから考える

・"g"

	- リモート・フォルダへの "g" でも、ディレクトリの時間を調べる。
	  更新されていたら、無効なキャッシュ・メッセージを scan。

・"s"

	- リモート・フォルダでの "s" で、ディレクトリの時間が更新され
          ていたら、無効キャッシュを scan して終り。終らずに、コネクショ
          ンを張ろうとすると、offline の際に刺さるので嫌。
	  "Type 's' again to scan remote messages" とか表示する。

	- リモート・フォルダでの "s" で、ディレクトリの時間が更新され
          ていないなら、今まで通りリモートのメッセージを scan する。無
          効なキャッシュ・メッセージは上書きされる。

・"x"

	- 変更なし
	- C-g で復帰したときに、refile の情報が失われているような気が
          するので、このバグを取る。

おまけ:

	Emacs を終了しても、refile マークに対する refile 情報が失われ
	ないようにするには、.mew-cache の 1 行目に書き込んでおけばよい?
	.mew-cache を読み込む際に、この行を消す

--かず



Mew-dist メーリングリストの案内