]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/language.rb
Memory optimizations in plugin management (useful on rescans)
[user/henk/code/ruby/rbot.git] / lib / rbot / language.rb
index ee6746d6709c139965bd3b047570e0fff8233dfe..edb3cafaaf0ade3214385d8ec93ca430a351285a 100644 (file)
@@ -1,23 +1,42 @@
 module Irc
+module Language
 
   class Language
-    BotConfig.register('core.language', 
-      :default => "english", :type => :enum,
-      :values => Dir.new(Config::DATADIR + "/languages").collect {|f|
-                   f =~ /\.lang$/ ? f.gsub(/\.lang$/, "") : nil
-                 }.compact,   
+    BotConfig.register BotConfigEnumValue.new('core.language', 
+      :default => "english", :wizard => true,
+      :values => Proc.new{|bot|
+            Dir.new(Config::datadir + "/languages").collect {|f|
+              f =~ /\.lang$/ ? f.gsub(/\.lang$/, "") : nil
+            }.compact
+          },   
+      :on_change => Proc.new {|bot, v| bot.lang.set_language v},
       :desc => "Which language file the bot should use")
     
-    def initialize(language, file="")
-      @language = language
-      if file.empty?
-        file = Config::DATADIR + "/languages/#{@language}.lang"
-      end
+    def initialize(bot, language)
+      @bot = bot
+      set_language language
+    end
+    attr_reader :language
+
+    def set_language(language)
+      file = Config::datadir + "/languages/#{language}.lang"
       unless(FileTest.exist?(file))
-        raise "no such language: #{@language} (no such file #{file})"
+        raise "no such language: #{language} (no such file #{file})"
       end
+      @language = language
       @file = file
       scan
+      return if @bot.plugins.nil?
+      @bot.plugins.core_modules.each { |p|
+        if p.respond_to?('set_language')
+          p.set_language(@language)
+        end
+      }
+      @bot.plugins.plugins.each { |p|
+        if p.respond_to?('set_language')
+          p.set_language(@language)
+        end
+      }
     end
 
     def scan
@@ -60,3 +79,4 @@ module Irc
   end
 
 end
+end