Changeset 33440 for lang/ruby

Show
Ignore:
Timestamp:
05/20/09 14:15:35 (4 years ago)
Author:
drry
Message:
  • (tig.rb) NAMES 応答が長くなり過ぎる問題を修正しました。
  • (tig.rb) 短縮偽装された URL が HTTPS スキームの場合にタイムラインがエラーで次回の取得まで停止し、つぶやきそのものがなかったことになってしまうバグを修正しました。
  • (tig.rb) ほか。
Location:
lang/ruby/net-irc/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/net-irc/trunk/examples/tig.rb

    r33421 r33440  
    171171require "rubygems" 
    172172require "net/irc" 
    173 require "net/https" 
     173require "net/http" 
    174174require "uri" 
    175175require "socket" 
     
    178178require "yaml" 
    179179require "pathname" 
    180 require "cgi" 
    181180require "json" 
    182181 
     
    240239                @real, *@opts = (@opts.name || @real).split(/\s+/) 
    241240                @opts = @opts.inject({}) do |r, i| 
    242                         key, value = i.split("=") 
     241                        key, value = i.split("=", 2) 
    243242                        key = "mentions" if key == "replies" # backcompat 
    244243                        r.update key => case value 
     
    295294                @ratio = (@opts["ratio"] || "77:1").split(":") 
    296295                @ratio = Struct.new(:timeline, :friends, :mentions).new(*@ratio) 
    297                 @ratio[:mentions] ||= @opts["mentions"] == true ? 12 : @opts["mentions"] 
     296                @ratio.mentions ||= @opts["mentions"] == true ? 12 : @opts["mentions"] 
    298297 
    299298                @check_friends_thread = Thread.start do 
     
    309308                                        end 
    310309                                end 
    311                                 sleep interval(@ratio[:friends]) 
     310                                sleep interval(@ratio.friends) 
    312311                        end 
    313312                end 
     
    333332                                        end 
    334333                                end 
    335                                 sleep interval(@ratio[:timeline]) 
     334                                sleep interval(@ratio.timeline) 
    336335                        end 
    337336                end 
     
    340339 
    341340                @check_mentions_thread = Thread.start do 
    342                         sleep interval(@ratio[:timeline]) / 2 
     341                        sleep interval(@ratio.timeline) / 2 
    343342 
    344343                        loop do 
     
    353352                                        end 
    354353                                end 
    355                                 sleep interval(@ratio[:mentions]) 
     354                                sleep interval(@ratio.mentions) 
    356355                        end 
    357356                end 
     
    529528                                        return 
    530529                                end 
    531                                 @ratio[:timeline] = ratios[0] 
    532                                 @ratio[:friends]  = ratios[1] 
    533                                 @ratio[:mentions] = ratios[2] if @opts["mentions"] 
     530                                @ratio.timeline = ratios[0] 
     531                                @ratio.friends  = ratios[1] 
     532                                @ratio.mentions = ratios[2] if @opts["mentions"] 
    534533                        end 
    535534                        log "Intervals: " << @ratio.map {|ratio| interval(ratio).round }.join(", ") 
     
    890889                first   = @friends.nil? 
    891890                athack  = @opts["athack"] 
    892                 friends = api("statuses/friends") 
     891                friends = [] 
     892 
     893                1.upto(1) do |page| 
     894                        friends += api("statuses/friends", { :page => page }) 
     895                        c ||= friends.size 
     896                        break if c * page >= @me["friends_count"] 
     897                        #sleep 0.5 
     898                end 
     899 
    893900                if first and not athack 
    894                         names_list = friends.map do |i| 
     901                        rest = friends.map do |i| 
    895902                                name   = i["screen_name"] 
    896                                 #prefix = @drones.include?(i["id"]) ? "%" : "+" # FIXME 
     903                                #prefix = @drones.include?(i["id"]) ? "%" : "+" # FIXME ~&% 
    897904                                prefix = "+" 
    898905                                "#{prefix}#{name}" 
    899                         end 
    900                         names_list = names_list.push("@#{@nick}").reverse.join(" ") 
    901                         post server_name, RPL_NAMREPLY,   @nick, "=", main_channel, names_list 
     906                        end.reverse.inject("@#{@nick}") do |r, nick| 
     907                                if r.size < 400 
     908                                        r << " " << nick 
     909                                else 
     910                                        post server_name, RPL_NAMREPLY, @nick, "=", main_channel, r 
     911                                        nick 
     912                                end 
     913                        end 
     914                        post server_name, RPL_NAMREPLY, @nick, "=", main_channel, rest 
    902915                        post server_name, RPL_ENDOFNAMES, @nick, main_channel, "End of NAMES list" 
    903916                else 
     
    944957                        loop do 
    945958                                begin 
     959                                        require "cgi" 
    946960                                        @im.received_messages.each do |msg| 
    947961                                                @log.debug [msg.from, msg.body] 
     
    10161030                @log.debug uri.inspect 
    10171031 
     1032                require "net/https" if @opts["secure"] 
     1033 
    10181034                http = case 
    10191035                        when RE_HTTPPROXY === @opts["httpproxy"] 
     
    11231139 
    11241140        def fetch_location_header(uri, limit = 3) 
    1125                 return uri if limit == 0 or uri.nil? 
     1141                return uri if limit == 0 or uri.nil? or uri.is_a? URI::HTTPS 
    11261142                req = Net::HTTP::Head.new uri.request_uri 
    11271143                req.add_field "User-Agent", user_agent 
     
    11891205        def http_get(uri) 
    11901206                accepts = ["*/*;q=0.1"] 
    1191                 #require 'mime/types'; accepts.unshift MIME::Types.of(uri.path).first.simplified 
     1207                #require "mime/types"; accepts.unshift MIME::Types.of(uri.path).first.simplified 
    11921208                types   = { "json" => "application/json", "txt" => "text/plain" } 
    11931209                ext     = uri.path[/[^.]+\z/] 
  • lang/ruby/net-irc/trunk/lib/net/irc/server.rb

    r33401 r33440  
    8080                def initialize(server, socket, logger, opts={}) 
    8181                        @server, @socket, @log, @opts = server, socket, logger, opts 
    82                         @prefix = nil 
    8382                end 
    8483 
     
    128127                def on_nick(m) 
    129128                        @nick = m.params[0] 
    130                         @prefix &&= Prefix.new("#{@nick}!#{@user}@#{@host}") 
     129                        @prefix = Prefix.new("#{@nick}!#{@user}@#{@host}") if defined? @prefix 
    131130                end 
    132131