[#37484] Coffee Break ... — Daisuke Gotou <com@...>
こんにちは。ゴトウです。
5 messages
2003/04/01
[#37492] ReFe 0.6 — Minero Aoki <aamine@...>
あおきです。
27 messages
2003/04/01
[#37525] ReFe 0.7 (Re: ReFe 0.6)
— Minero Aoki <aamine@...>
2003/04/06
あおきです。
[#37528] Re: ReFe 0.7 (Re: ReFe 0.6)
— Koji Arai <JCA02266@...>
2003/04/07
新井です。
[#37545] Re: ReFe 0.7 (Re: ReFe 0.6)
— Kazuhiro NISHIYAMA <zn@...>
2003/04/10
西山和広です。
[#37546] Re: ReFe 0.7 (Re: ReFe 0.6)
— Koji Arai <JCA02266@...>
2003/04/10
新井です。
[#37551] Re: ReFe 0.7 (Re: ReFe 0.6)
— Kazuhiro NISHIYAMA <zn@...>
2003/04/11
西山和広です。
[#37554] refe.el (Re: ReFe 0.7 (Re: ReFe 0.6))
— Koji Arai <JCA02266@...>
2003/04/12
新井です。
[#37556] Re: refe.el (Re: ReFe 0.7 (Re: ReFe 0.6))
— Kazuhiro NISHIYAMA <zn@...>
2003/04/13
西山和広です。
[#37566] Re: refe.el (Re: ReFe 0.7 (Re: ReFe 0.6))
— Minero Aoki <aamine@...>
2003/04/16
あおきです。
[#37570] wwwsrvの起動
— Kouzou NOAKI <noaki@...7.so-net.ne.jp>
2003/04/16
のあきといいます。
[#37571] Re: wwwsrv の起動
— Sako <sakoh@...2.so-net.ne.jp>
2003/04/16
[#37504] Rubyでゲーム開発 — Yamamoto Dan <dango@...>
先日ruby-listに登録したばかりの団と申します。
11 messages
2003/04/03
[#37530] drubyをwindowsで使う — keiichi matsunaga <ma2@...>
松永です。
6 messages
2003/04/08
[#37537] load(fname, true) と include — Tietew <tietew-ml-ruby-list@...>
Tietew です。
8 messages
2003/04/09
[#37557] ruby-gtkの使い方について — "Mikio Kanada" <mmmr36211@...>
初めて投稿します。 金田と言います。
5 messages
2003/04/13
[#37560] DRb:SocketError — INABA Nobuhiko <inaba@...>
どうも、いなばといいます。
5 messages
2003/04/13
[#37567] error in Ruby/Tk + fork — Shin Nishiyama <shin@...>
こんばんは、西山@千葉大といいます。
6 messages
2003/04/16
[#37579] 金額カンマ編集について — "MORII,Tadashige" <m_tada@...>
森井です。
6 messages
2003/04/18
[#37586] [Q] ruby1.8.0+apache2.0.45でCGIからのネットワーク接続されたDirの操作 — eda@...
えだです。
9 messages
2003/04/18
[#37590] Re: [Q] ruby1.8.0+apache2.0.45でCGIからのネットワーク接続されたDirの操作
— HGF01572@...
2003/04/19
長沢です。
[#37599] Re: [Q] ruby1.8.0+apache2.0.45でCGIからのネットワーク接続されたDirの操作
— eda@...
2003/04/21
えだです。
[#37606] 1.8.0 to_ary — Kazuhiro Yoshida <moriq@...>
もりきゅうです。
9 messages
2003/04/21
[#37608] Re: 1.8.0 to_ary
— matz@... (Yukihiro Matsumoto)
2003/04/22
まつもと ゆきひろです
[#37619] net/pop.rbにUIDLコマンドでMessage-Idのリストを取得するメソッド — Keisuke Minami <keisuke@...>
こんにちは。三並です。
18 messages
2003/04/26
[#37623] Re: net/pop.rbにUIDLコマンドでMessage-Idのリストを取得するメソッド
— Minero Aoki <aamine@...>
2003/04/27
青木です。
[#37625] Re: net/pop.rbにUIDLコマンドでMessage-Idのリストを取得するメソッド
— "Keisuke Minami" <keisuke@...>
2003/04/28
三並です。
[#37627] Re: net/pop.rbにUIDLコマンドでMessage-Idのリストを取得するメソッド
— Minero Aoki <aamine@...>
2003/04/28
青木です。
[#37634] Re: net/pop.rbにUIDLコマンドでMessage-Idのリストを取得するメソッド
— Minero Aoki <aamine@...>
2003/04/29
青木です。
[#37622] net/imapのTHREAD Extension 対応 — wanowa.kimura@... (kimura wataru)
木村といいます。
31 messages
2003/04/27
[#37628] Re: net/imapのTHREAD Extension 対応
— Shugo Maeda <shugo@...>
2003/04/28
前田です。
[#37632] Re: net/imap のTHREAD Extension 対応
— wanowa.kimura@... (kimura wataru)
2003/04/28
木村といいます。
[#37635] Re: net/imap のTHREAD Extension 対応
— Shugo Maeda <shugo@...>
2003/04/30
前田です。
[#37638] Re: net/imap のTHREAD Extension 対応
— wanowa.kimura@... (kimura wataru)
2003/05/01
木村です。
[#37641] Re: net/imap のTHREAD Extension 対応
— Shugo Maeda <shugo@...>
2003/05/02
前田です。
[#37647] Re: net/imap のTHREAD Extension 対応
— wanowa.kimura@... (kimura wataru)
2003/05/06
木村です。
[#37648] マッチした部分を配列にしまう方法
— Hirano Satoshi <hirano@...>
2003/05/07
こんにちは。
[#37651] Re: マッチした部分を配列にしまう方法
— tsuji.td@...
2003/05/07
はじめまして、辻(忠)です。
[#37655] Re: マッチした部分を配列にしまう方法
— Minero Aoki <aamine@...>
2003/05/07
青木です。
[#37658] Re: マッチした部分を配列にしまう方法
— tsuji.td@...
2003/05/08
辻(忠)です。
[ruby-list:37622] net/imapのTHREAD Extension 対応
From:
wanowa.kimura@... (kimura wataru)
Date:
2003-04-27 05:33:57 UTC
List:
ruby-list #37622
木村といいます。
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")
#=> [#<Net::IMAP::ThreadMember seqno=2425, children=
[#<Net::IMAP::ThreadMember seqno=2426, children=
[#<Net::IMAP::ThreadMember seqno=2427, children=
[#<Net::IMAP::ThreadMember seqno=2428, children=[]>]>,
#<Net::IMAP::ThreadMember seqno=2429, children=
[#<Net::IMAP::ThreadMember seqno=2430, children=[]>]>]>]>,
#<Net::IMAP::ThreadMember seqno=2431, children=
[#<Net::IMAP::ThreadMember seqno=2432, children=
[#<Net::IMAP::ThreadMember seqno=2433, children=[]>]>,
#<Net::IMAP::ThreadMember seqno=2434, children=[]>]>,
#<Net::IMAP::ThreadMember seqno=2435, children=[]>]
bladeっぽく書くと、こういうスレッド。
2425
2426
+ 2427
| 2428
+ 2429
2430
2431
+ 2432
| 2433
+ 2434
2435
----------
"((3)(4 5))"などのように親のないスレッドのあるときは、seqno=nilの
ダミーのエントリを挿入します。
--
kimura wataru
<mailto:wanowa.kimura@nifty.ne.jp>
Attachments (1)
imap.rb.diff
(3.14 KB, text/x-diff)
--- imap.rb.org Sat Jan 4 15:54:06 2003
+++ imap.rb Sun Apr 27 12:10:31 2003
@@ -818,6 +818,14 @@
return sort_internal("UID SORT", sort_keys, search_keys, charset)
end
+ def thread(argorithm, search_keys, charset)
+ return thread_internal("THREAD", argorithm, search_keys, charset)
+ end
+
+ def uid_thread(argorithm, search_keys, charset)
+ return thread_internal("UID THREAD", argorithm, search_keys, charset)
+ end
+
private
CRLF = "\r\n"
@@ -1034,6 +1042,17 @@
return @responses.delete("SORT")[-1]
end
+ def thread_internal(cmd, argorithm, search_keys, charset)
+ if search_keys.instance_of?(String)
+ search_keys = [RawData.new(search_keys)]
+ else
+ normalize_searching_criteria(search_keys)
+ end
+ normalize_searching_criteria(search_keys)
+ send_command(cmd, argorithm, charset, *search_keys)
+ return @responses.delete("THREAD")[-1]
+ end
+
def normalize_searching_criteria(keys)
keys.collect! do |i|
case i
@@ -1120,6 +1139,9 @@
":" + format_internal(data.last)
when Array
return data.collect {|i| format_internal(i)}.join(",")
+ when ThreadMember
+ return data.seqno.to_s +
+ ":" + data.children.collect {|i| format_internal(i).join(",")}
else
raise DataFormatError, data.inspect
end
@@ -1144,6 +1166,7 @@
:to, :cc, :bcc, :in_reply_to, :message_id)
Address = Struct.new(:name, :route, :mailbox, :host)
ContentDisposition = Struct.new(:dsp_type, :param)
+ ThreadMember = Struct.new(:seqno, :children)
class BodyTypeBasic < Struct.new(:media_type, :subtype,
:param, :content_id,
@@ -1321,6 +1344,8 @@
return list_response
when /\A(?:SEARCH|SORT)\z/ni
return search_response
+ when /\A(?:THREAD)\z/ni
+ return thread_response
when /\A(?:STATUS)\z/ni
return status_response
when /\A(?:CAPABILITY)\z/ni
@@ -1868,6 +1893,71 @@
data = []
end
return UntaggedResponse.new(name, data, @str)
+ end
+
+ def thread_response
+ token = match(T_ATOM)
+ name = token.value.upcase
+ token = lookahead
+
+ if token.symbol == T_SPACE
+ threads = []
+
+ while true
+ shift_token
+ token = lookahead
+
+ case token.symbol
+ when T_LPAR
+ threads << thread_branch(token)
+ when T_CRLF
+ break
+ end
+ end
+ else
+ # no member
+ threads = []
+ end
+
+ return UntaggedResponse.new(name, threads, @str)
+ end
+
+ def thread_branch(token)
+ rootmember = nil
+ lastmember = nil
+
+ add_member = proc {|seqno|
+ newmember = ThreadMember.new(seqno, [])
+ if rootmember.nil?
+ rootmember = newmember
+ else
+ lastmember.children << newmember
+ end
+ newmember
+ }
+
+ while true
+ shift_token # ignore first T_LPAR
+ token = lookahead
+
+ case token.symbol
+ when T_NUMBER
+ lastmember = add_member.call(number)
+ when T_SPACE
+ # do nothing
+ when T_LPAR
+ if rootmember.nil?
+ # dummy member
+ lastmember = add_member.call(nil)
+ end
+
+ lastmember.children << thread_branch(token)
+ when T_RPAR
+ break
+ end
+ end
+
+ return rootmember
end
def status_response