util.pluginloader: Rewritten resource loading to be cleaner, and added support for prosody-modules directory layout. "/" in plugin names is no longer supported.
authorWaqas Hussain <waqas20@gmail.com>
Tue, 22 Feb 2011 21:47:38 +0500
changeset 4154 3785a9bb7f11
parent 4153 676588aed2d7
child 4155 3c5d6a7f07e1
util.pluginloader: Rewritten resource loading to be cleaner, and added support for prosody-modules directory layout. "/" in plugin names is no longer supported.
util/pluginloader.lua
--- a/util/pluginloader.lua	Tue Feb 22 07:37:52 2011 +0000
+++ b/util/pluginloader.lua	Tue Feb 22 21:47:38 2011 +0500
@@ -19,40 +19,33 @@
 
 module "pluginloader"
 
-local function load_file(name)
+local function load_file(names)
 	local file, err, path;
 	for i=1,#plugin_dir do
-		path = plugin_dir[i]..name;
-		file, err = io_open(path);
-		if file then break; end
+		for j=1,#names do
+			path = plugin_dir[i]..names[j];
+			file, err = io_open(path);
+			if file then
+				local content = file:read("*a");
+				file:close();
+				return content, path;
+			end
+		end
 	end
-	if not file then return file, err; end
-	local content = file:read("*a");
-	file:close();
-	return content, path;
+	return file, err;
 end
 
 function load_resource(plugin, resource)
-	local path, name = plugin:match("([^/]*)/?(.*)");
-	if name == "" then
-		if not resource then
-			resource = "mod_"..plugin..".lua";
-		end
+	resource = resource or "mod_"..plugin..".lua";
 
-		local content, err = load_file(plugin.."/"..resource);
-		if not content then content, err = load_file(resource); end
-		
-		return content, err;
-	else
-		if not resource then
-			resource = "mod_"..name..".lua";
-		end
+	local names = {
+		"mod_"..plugin.."/"..plugin.."/"..resource; -- mod_hello/hello/mod_hello.lua
+		"mod_"..plugin.."/"..resource;              -- mod_hello/mod_hello.lua
+		plugin.."/"..resource;                      -- hello/mod_hello.lua
+		resource;                                   -- mod_hello.lua
+	};
 
-		local content, err = load_file(plugin.."/"..resource);
-		if not content then content, err = load_file(path.."/"..resource); end
-		
-		return content, err;
-	end
+	return load_file(names);
 end
 
 function load_code(plugin, resource)