]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/core/utils/utils.rb
chucknorris: fix loading
[user/henk/code/ruby/rbot.git] / lib / rbot / core / utils / utils.rb
index 7b316ffe28cd3df6ffc6ecd0d1707063142dd1bb..951d0513ddb22974e97580d1b28465abde852998 100644 (file)
@@ -1,3 +1,4 @@
+# encoding: UTF-8
 #-- vim:sw=2:et
 #++
 #
@@ -139,22 +140,6 @@ module ::Irc
 
   # Miscellaneous useful functions
   module Utils
-    @@bot = nil unless defined? @@bot
-    @@safe_save_dir = nil unless defined?(@@safe_save_dir)
-
-    # The bot instance
-    def Utils.bot
-      @@bot
-    end
-
-    # Set up some Utils routines which depend on the associated bot.
-    def Utils.bot=(b)
-      debug "initializing utils"
-      @@bot = b
-      @@safe_save_dir = @@bot.path('safe_save')
-    end
-
-
     # Seconds per minute
     SEC_PER_MIN = 60
     # Seconds per hour
@@ -198,7 +183,7 @@ module ::Irc
       when 0
         raise "Empty ret array!"
       when 1
-        return ret.to_s
+        return ret[0].to_s
       else
         return [ret[0, ret.length-1].join(", ") , ret[-1]].join(_(" and "))
       end
@@ -319,21 +304,6 @@ module ::Irc
       return $?.success?
     end
 
-    # Safely (atomically) save to _file_, by passing a tempfile to the block
-    # and then moving the tempfile to its final location when done.
-    #
-    # call-seq: Utils.safe_save(file, &block)
-    #
-    def Utils.safe_save(file)
-      raise 'No safe save directory defined!' if @@safe_save_dir.nil?
-      basename = File.basename(file)
-      temp = Tempfile.new(basename,@@safe_save_dir)
-      temp.binmode
-      yield temp if block_given?
-      temp.close
-      File.rename(temp.path, file)
-    end
-
 
     # Decode HTML entities in the String _str_, using HTMLEntities if the
     # package was found, or UNESCAPE_TABLE otherwise.
@@ -588,16 +558,16 @@ module ::Irc
     # information is retrieved, and special title/summary
     # extraction routines are used if possible.
     #
-    def Utils.get_html_info(doc, opts={})
+    def Utils.get_html_info(bot, doc, opts={})
       case doc
       when String
         Utils.get_string_html_info(doc, opts)
       when Net::HTTPResponse
-        Utils.get_resp_html_info(doc, opts)
+        Utils.get_resp_html_info(bot, doc, opts)
       when URI
         ret = DataStream.new
-        @@bot.httputil.get_response(doc) { |resp|
-          ret.replace Utils.get_resp_html_info(resp, opts)
+        bot.httputil.get_response(doc) { |resp|
+          ret.replace Utils.get_resp_html_info(bot, resp, opts)
         }
         return ret
       else
@@ -614,7 +584,7 @@ module ::Irc
     # Currently, the only accepted options (in _opts_) are
     # uri_fragment:: the URI fragment of the original request
     # full_body::    get the whole body instead of
-    #                @@bot.config['http.info_bytes'] bytes only
+    #                bot.config['http.info_bytes'] bytes only
     #
     # Returns a DataStream with the following keys:
     # text:: the (partial) body
@@ -625,7 +595,7 @@ module ::Irc
     #   a Hash whose keys are lowercase forms of the HTTP
     #   header fields, and whose values are Arrays.
     #
-    def Utils.get_resp_html_info(resp, opts={})
+    def Utils.get_resp_html_info(bot, resp, opts={})
       case resp
       when Net::HTTPSuccess
         loc = URI.parse(resp['x-rbot-location'] || resp['location']) rescue nil
@@ -634,9 +604,9 @@ module ::Irc
         end
         ret = DataStream.new(opts.dup)
         ret[:headers] = resp.to_hash
-        ret[:text] = partial = opts[:full_body] ? resp.body : resp.partial_body(@@bot.config['http.info_bytes'])
+        ret[:text] = partial = opts[:full_body] ? resp.body : resp.partial_body(bot.config['http.info_bytes'])
 
-        filtered = Utils.try_htmlinfo_filters(ret)
+        filtered = Utils.try_htmlinfo_filters(bot, ret)
 
         if filtered
           return filtered
@@ -657,14 +627,14 @@ module ::Irc
     # The input DataStream should have the downloaded HTML as primary key
     # (:text) and possibly a :headers key holding the resonse headers.
     #
-    def Utils.try_htmlinfo_filters(ds)
-      filters = @@bot.filter_names(:htmlinfo)
+    def Utils.try_htmlinfo_filters(bot, ds)
+      filters = bot.filter_names(:htmlinfo)
       return nil if filters.empty?
       cur = nil
       # TODO filter priority
       filters.each { |n|
         debug "testing htmlinfo filter #{n}"
-        cur = @@bot.filter(@@bot.global_filter_name(n, :htmlinfo), ds)
+        cur = bot.filter(bot.global_filter_name(n, :htmlinfo), ds)
         debug "returned #{cur.pretty_inspect}"
         break if cur
       }
@@ -719,7 +689,7 @@ module ::Irc
     # If (optional) _opts_ :message is specified, those paragraphs are
     # echoed as replies to the IRC message passed as _opts_ :message
     #
-    def Utils.get_first_pars(urls, count, opts={})
+    def Utils.get_first_pars(bot, urls, count, opts={})
       idx = 0
       msg = opts[:message]
       retval = Array.new
@@ -728,7 +698,7 @@ module ::Irc
         idx += 1
 
         begin
-          info = Utils.get_html_info(URI.parse(url), opts)
+          info = Utils.get_html_info(bot, URI.parse(url), opts)
 
           par = info[:content]
           retval.push(par)
@@ -761,5 +731,3 @@ module ::Irc
 
   end
 end
-
-Irc::Utils.bot = Irc::Bot::Plugins.manager.bot