home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / TeamSpeak / TeamSpeak3-Client-win32-3.0.0.exe / plugins / lua_plugin / ts3autoload.lua next >
Text File  |  2011-02-08  |  2KB  |  72 lines

  1. --
  2. -- TeamSpeak 3 autoload
  3. --
  4.  
  5. -- The autoload mechanism will check every subdirectory of plugins/lua_plugin/
  6. -- and load the file init.lua inside the subdirectory if it exists.
  7. -- To give users some control which modules should be loaded, an optional file
  8. -- plugins/lua_plugin/modules.txt can list those subdirectory which should be loaded,
  9. -- one subdirectory name per line. Lines can be commented out by a prefixed "--".
  10. -- If modules.txt does not exist, all subdirectories are loaded.
  11.  
  12. local function loadModules()
  13.     local modulesToLoad = {}  -- Module directories we want to load
  14.     local f = io.open(ts3.getConfigPath() .. "luaconfig.ini", "r")
  15.     if f ~= nil then  -- luaconfig.ini exists
  16.         local modulesSectionFound = false
  17.         local n = 1
  18.         local line = nil
  19.         repeat
  20.             line = f:read("*lines")
  21.             -- Ignore empty lines and lines starting with "#"
  22.             if line ~= nil and line ~= "" and string.sub(line, 1, 1) ~= "#" then
  23.                 if line == "[Modules]" then  -- Find start of Modules section
  24.                     modulesSectionFound = true
  25.                 elseif modulesSectionFound then
  26.                     --modulesToLoad[n] = line
  27.                     if string.sub(line, 1, 1) == "[" then
  28.                         break  -- Start of next section detected
  29.                     end
  30.                     if string.sub(line, 1, 5) ~= "size=" then  -- Ignore size=<n> entry
  31.                         -- Parse line in the form of "1\on=testmodule"
  32.                         local pos1 = string.find(line, "\\")
  33.                         local pos2 = string.find(line, "=")
  34.                         if pos1 ~= nil and pos2 ~= nil then
  35.                             local onOff = string.sub(line, pos1+1, pos2-1)  -- on|off
  36.                             if onOff == "on" then
  37.                                 local moduleName = string.sub(line, pos2+1)  -- Module name
  38.                                 modulesToLoad[n] = moduleName
  39.                                 n = n + 1
  40.                             end
  41.                         end
  42.                     end
  43.                 end
  44.             end
  45.         until line == nil
  46.         f:close()
  47.     else  -- luaconfig.ini does not exist, load modules from all subdirectories
  48.         -- Get all subdirectories within plugins/lua_plugin
  49.         local subdirs = ts3.getDirectories(ts3.getResourcesPath() .. "plugins/lua_plugin")
  50.         -- Loop through subdirectories and try to load file <moduleDir>/init.lua
  51.         local n = 1
  52.         for subdir in subdirs:gmatch("%w+") do
  53.             modulesToLoad[n] = subdir
  54.             n = n + 1
  55.         end
  56.     end
  57.  
  58.     -- Load modules
  59.     for k,v in pairs(modulesToLoad) do
  60.         local module = v .. "/init"
  61.         print("LOAD: " .. module)
  62.         if pcall(require, module) ~= true then
  63.             print("Failed to load module: " .. module)
  64.         end
  65.     end
  66. end
  67.  
  68. -- Automatically load modules once this package is initialized
  69. ts3autoload = {
  70.     loadModules = loadModules
  71. }
  72.