From d663facee9479c36b3f883253db7b19c3ae4f92e Mon Sep 17 00:00:00 2001
From: Waqas Hussain <waqas20@gmail.com>
Date: Tue, 22 Feb 2011 21:47:38 +0500
Subject: 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 | 45 +++++++++++++++++++--------------------------
 1 file changed, 19 insertions(+), 26 deletions(-)

diff --git a/util/pluginloader.lua b/util/pluginloader.lua
index 3a4e8003..555e41bf 100644
--- a/util/pluginloader.lua
+++ b/util/pluginloader.lua
@@ -19,40 +19,33 @@ local loadstring, pairs = loadstring, pairs;
 
 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)
-- 
cgit v1.2.3