From: wanowa.kimura@... (kimura wataru) Date: 2003-04-27T14:33:57+09:00 Subject: [ruby-list:37622] net/imapのTHREAD Extension 対応 --20030427143856872 Content-Type: text/plain; charset="ISO-2022-JP" Content-Transfer-Encoding: 7bit  木村といいます。  net/imapをTHREADコマンドに対応させるために、以下のメソッドを 追加してみました。 Net::IMAP#thread(argorithm, search_keys, charset) Net::IMAP#uid_thread(argorithm, search_keys, charset) argorithmには"REFERENCES"または"ORDEREDSUBJECT"が指定できます。  THREAD Extensionの詳細については、以下のインターネットドラフトを 参照してください。 http://www.ietf.org/internet-drafts/draft-ietf-imapext-sort-12.txt  返値の構造などいまいち確信が持てないので、みなさんのコメントが いただければと思います。 例) ---------- p imap.uid_thread("REFERENCES", "UNSEEN", "US-ASCII") #=> [#]>, #]>]>]>, #]>, #]>, #] bladeっぽく書くと、こういうスレッド。 2425 2426 + 2427 | 2428 + 2429 2430 2431 + 2432 | 2433 + 2434 2435 ----------  "((3)(4 5))"などのように親のないスレッドのあるときは、seqno=nilの ダミーのエントリを挿入します。 -- kimura wataru --20030427143856872 Content-Type: application/octet-stream ; name="imap.rb.diff" ; x-mac-type="54455854" ; x-mac-creator="00000000" Content-Transfer-Encoding: base64 Content-Disposition: attachment ; filename="imap.rb.diff" LS0tIGltYXAucmIub3JnCVNhdCBKYW4gIDQgMTU6NTQ6MDYgMjAwMworKysgaW1hcC5yYglT dW4gQXByIDI3IDEyOjEwOjMxIDIwMDMKQEAgLTgxOCw2ICs4MTgsMTQgQEAKICAgICAgIHJl dHVybiBzb3J0X2ludGVybmFsKCJVSUQgU09SVCIsIHNvcnRfa2V5cywgc2VhcmNoX2tleXMs IGNoYXJzZXQpCiAgICAgZW5kCiAKKyAgICBkZWYgdGhyZWFkKGFyZ29yaXRobSwgc2VhcmNo X2tleXMsIGNoYXJzZXQpCisgICAgICByZXR1cm4gdGhyZWFkX2ludGVybmFsKCJUSFJFQUQi LCBhcmdvcml0aG0sIHNlYXJjaF9rZXlzLCBjaGFyc2V0KQorICAgIGVuZAorCisgICAgZGVm IHVpZF90aHJlYWQoYXJnb3JpdGhtLCBzZWFyY2hfa2V5cywgY2hhcnNldCkKKyAgICAgIHJl dHVybiB0aHJlYWRfaW50ZXJuYWwoIlVJRCBUSFJFQUQiLCBhcmdvcml0aG0sIHNlYXJjaF9r ZXlzLCBjaGFyc2V0KQorICAgIGVuZAorCiAgICAgcHJpdmF0ZQogCiAgICAgQ1JMRiA9ICJc clxuIgpAQCAtMTAzNCw2ICsxMDQyLDE3IEBACiAgICAgICByZXR1cm4gQHJlc3BvbnNlcy5k ZWxldGUoIlNPUlQiKVstMV0KICAgICBlbmQKIAorICAgIGRlZiB0aHJlYWRfaW50ZXJuYWwo Y21kLCBhcmdvcml0aG0sIHNlYXJjaF9rZXlzLCBjaGFyc2V0KQorICAgICAgaWYgc2VhcmNo X2tleXMuaW5zdGFuY2Vfb2Y/KFN0cmluZykKKwlzZWFyY2hfa2V5cyA9IFtSYXdEYXRhLm5l dyhzZWFyY2hfa2V5cyldCisgICAgICBlbHNlCisJbm9ybWFsaXplX3NlYXJjaGluZ19jcml0 ZXJpYShzZWFyY2hfa2V5cykKKyAgICAgIGVuZAorICAgICAgbm9ybWFsaXplX3NlYXJjaGlu Z19jcml0ZXJpYShzZWFyY2hfa2V5cykKKyAgICAgIHNlbmRfY29tbWFuZChjbWQsIGFyZ29y aXRobSwgY2hhcnNldCwgKnNlYXJjaF9rZXlzKQorICAgICAgcmV0dXJuIEByZXNwb25zZXMu ZGVsZXRlKCJUSFJFQUQiKVstMV0KKyAgICBlbmQKKwogICAgIGRlZiBub3JtYWxpemVfc2Vh cmNoaW5nX2NyaXRlcmlhKGtleXMpCiAgICAgICBrZXlzLmNvbGxlY3QhIGRvIHxpfAogCWNh c2UgaQpAQCAtMTEyMCw2ICsxMTM5LDkgQEAKIAkgICAgIjoiICsgZm9ybWF0X2ludGVybmFs KGRhdGEubGFzdCkKIAl3aGVuIEFycmF5CiAJICByZXR1cm4gZGF0YS5jb2xsZWN0IHt8aXwg Zm9ybWF0X2ludGVybmFsKGkpfS5qb2luKCIsIikKKwl3aGVuIFRocmVhZE1lbWJlcgorCSAg cmV0dXJuIGRhdGEuc2Vxbm8udG9fcyArCisJICAgICI6IiArIGRhdGEuY2hpbGRyZW4uY29s bGVjdCB7fGl8IGZvcm1hdF9pbnRlcm5hbChpKS5qb2luKCIsIil9CiAJZWxzZQogCSAgcmFp c2UgRGF0YUZvcm1hdEVycm9yLCBkYXRhLmluc3BlY3QKIAllbmQKQEAgLTExNDQsNiArMTE2 Niw3IEBACiAJCQkgIDp0bywgOmNjLCA6YmNjLCA6aW5fcmVwbHlfdG8sIDptZXNzYWdlX2lk KQogICAgIEFkZHJlc3MgPSBTdHJ1Y3QubmV3KDpuYW1lLCA6cm91dGUsIDptYWlsYm94LCA6 aG9zdCkKICAgICBDb250ZW50RGlzcG9zaXRpb24gPSBTdHJ1Y3QubmV3KDpkc3BfdHlwZSwg OnBhcmFtKQorICAgIFRocmVhZE1lbWJlciA9IFN0cnVjdC5uZXcoOnNlcW5vLCA6Y2hpbGRy ZW4pCiAKICAgICBjbGFzcyBCb2R5VHlwZUJhc2ljIDwgU3RydWN0Lm5ldyg6bWVkaWFfdHlw ZSwgOnN1YnR5cGUsCiAJCQkJICAgICA6cGFyYW0sIDpjb250ZW50X2lkLApAQCAtMTMyMSw2 ICsxMzQ0LDggQEAKIAkgICAgcmV0dXJuIGxpc3RfcmVzcG9uc2UKIAkgIHdoZW4gL1xBKD86 U0VBUkNIfFNPUlQpXHovbmkKIAkgICAgcmV0dXJuIHNlYXJjaF9yZXNwb25zZQorCSAgd2hl biAvXEEoPzpUSFJFQUQpXHovbmkKKwkgICAgcmV0dXJuIHRocmVhZF9yZXNwb25zZQogCSAg d2hlbiAvXEEoPzpTVEFUVVMpXHovbmkKIAkgICAgcmV0dXJuIHN0YXR1c19yZXNwb25zZQog CSAgd2hlbiAvXEEoPzpDQVBBQklMSVRZKVx6L25pCkBAIC0xODY4LDYgKzE4OTMsNzEgQEAK IAkgIGRhdGEgPSBbXQogCWVuZAogCXJldHVybiBVbnRhZ2dlZFJlc3BvbnNlLm5ldyhuYW1l LCBkYXRhLCBAc3RyKQorICAgICAgZW5kCisKKyAgICAgIGRlZiB0aHJlYWRfcmVzcG9uc2UK Kwl0b2tlbiA9IG1hdGNoKFRfQVRPTSkKKwluYW1lID0gdG9rZW4udmFsdWUudXBjYXNlCisJ dG9rZW4gPSBsb29rYWhlYWQKKworCWlmIHRva2VuLnN5bWJvbCA9PSBUX1NQQUNFCisJICB0 aHJlYWRzID0gW10KKworCSAgd2hpbGUgdHJ1ZQorCSAgICBzaGlmdF90b2tlbgorCSAgICB0 b2tlbiA9IGxvb2thaGVhZAorCisJICAgIGNhc2UgdG9rZW4uc3ltYm9sCisJICAgIHdoZW4g VF9MUEFSCisJICAgICAgdGhyZWFkcyA8PCB0aHJlYWRfYnJhbmNoKHRva2VuKQorCSAgICB3 aGVuIFRfQ1JMRgorCSAgICAgIGJyZWFrCisJICAgIGVuZAorCSAgZW5kCisJZWxzZQorCSAg IyBubyBtZW1iZXIKKwkgIHRocmVhZHMgPSBbXQorCWVuZAorCisJcmV0dXJuIFVudGFnZ2Vk UmVzcG9uc2UubmV3KG5hbWUsIHRocmVhZHMsIEBzdHIpCisgICAgICBlbmQKKworICAgICAg ZGVmIHRocmVhZF9icmFuY2godG9rZW4pCisJcm9vdG1lbWJlciA9IG5pbAorCWxhc3RtZW1i ZXIgPSBuaWwKKworCWFkZF9tZW1iZXIgPSBwcm9jIHt8c2Vxbm98CisJICBuZXdtZW1iZXIg PSBUaHJlYWRNZW1iZXIubmV3KHNlcW5vLCBbXSkKKwkgIGlmIHJvb3RtZW1iZXIubmlsPwor CSAgICByb290bWVtYmVyID0gbmV3bWVtYmVyCisJICBlbHNlCisJICAgIGxhc3RtZW1iZXIu Y2hpbGRyZW4gPDwgbmV3bWVtYmVyCisJICBlbmQKKwkgIG5ld21lbWJlcgorCX0KKworCXdo aWxlIHRydWUKKwkgIHNoaWZ0X3Rva2VuICAgICMgaWdub3JlIGZpcnN0IFRfTFBBUgorCSAg dG9rZW4gPSBsb29rYWhlYWQKKworCSAgY2FzZSB0b2tlbi5zeW1ib2wKKwkgIHdoZW4gVF9O VU1CRVIKKwkgICAgbGFzdG1lbWJlciA9IGFkZF9tZW1iZXIuY2FsbChudW1iZXIpCisJICB3 aGVuIFRfU1BBQ0UKKwkgICAgIyBkbyBub3RoaW5nCisJICB3aGVuIFRfTFBBUgorCSAgICBp ZiByb290bWVtYmVyLm5pbD8KKwkgICAgICAjIGR1bW15IG1lbWJlcgorCSAgICAgIGxhc3Rt ZW1iZXIgPSBhZGRfbWVtYmVyLmNhbGwobmlsKQorCSAgICBlbmQKKworCSAgICBsYXN0bWVt YmVyLmNoaWxkcmVuIDw8IHRocmVhZF9icmFuY2godG9rZW4pCisJICB3aGVuIFRfUlBBUgor CSAgICBicmVhaworCSAgZW5kCisJZW5kCisKKwlyZXR1cm4gcm9vdG1lbWJlcgogICAgICAg ZW5kCiAKICAgICAgIGRlZiBzdGF0dXNfcmVzcG9uc2UK --20030427143856872--