直りません。こっちはウィルスも強いのか?
今のQMAILはIMAPのリモートフォルダにオフラインでメッセージをインポートしたりすると、次回同期するときにサーバに送られ、さらにその後サーバからメッセージリストを取得しないとフォルダのメッセージリストに追加されない。
これを、インポートしたら即メッセージリストに追加するようにする。そのときに、ローカルメッセージであることを示すフラグを立てておいて、次回そのフォルダを同期するときにサーバにアップロードし、ローカルメッセージは削除してサーバからメッセージリストを取得して更新する。
今のQMAILは、オフラインの間にやった処理でサーバ側に反映しなくちゃいけないことは全て.offlinejobというファイルに保存して、次にサーバに接続したときに最優先で処理している。今あるのは、
の4種類。
フラグ更新はそのままで良い?。メッセージの追加は上に書いた方法に変更。メッセージコピーは、どうするのがいいかな。削除済みメッセージのクリアはそのままでも問題なさそう。
フラグの更新なんかの情報もフォルダごとに分けて、そのフォルダを更新した場合にだけアップデートした方が良いかも。
IMAPでOutbox, Sentbox, Trashをサーバ上に置く方法。
☆オンライン
Trashは、普通にメッセージを他のフォルダに移動するのと変わらないので、それほど問題ないはず(QMAIL 2.xでも.foldersを書き換えれば対応できているし)。
Outboxは、同期(送受信)とフォルダからのメッセージの取得で複数のIMAPセッションを張るようにしたので、送信時にそれらのフォルダにアクセスできなくて送信メッセージが取得できないという問題は解決。
Sentboxも、基本的にはメッセージを移動するだけなので問題ないはず。
☆オフライン
Trashはたぶん問題ない。
Outboxは、サーバ上にしかメッセージがない場合にどうするかが問題。同期時にはオンラインにしてサーバからメッセージ本体を取得できるようにするのがよいかな?。
Sentboxも問題ないはず。
☆シナリオ1
オフラインで、リモートフォルダにメッセージをインポートした。もしくは、他のアカウントからメッセージをコピーした。結果的にローカルメッセージが作成された。
この場合、作成されたローカルメッセージはサーバにアップロードされる必要がある。
☆シナリオ2
オフラインで、同じアカウントの別のフォルダからメッセージをコピーした。この場合もローカルメッセージが作成される。
この場合、作成されたローカルメッセージをサーバにアップロードしてはいけない。
どうやって見分けようか。フラグでもいいけど、もうフラグは32bit使っちゃってるしな。.offlinejobにサーバにアップロードしなくちゃいけないローカルメッセージのUIDを記録しておくか?。もしくは今と同じように.offlinejobにメッセージごと放り込んでおいて、ローカルメッセージは、サーバと同期を取るまでの繋ぎとしてしか使わないという手もある。ストレージがちょっともったいないけど。