From 87ad4d8e7f25210cd28d9f2b372aa00aa3dab929 Mon Sep 17 00:00:00 2001
From: rubenwardy <rw@rubenwardy.com>
Date: Tue, 17 Apr 2018 14:54:50 +0100
Subject: Add online content repository

Replaces mods and texture pack tabs with a single content tab
---
 builtin/common/filterlist.lua   | 60 ++++++++++++++++++++---------------------
 builtin/common/misc_helpers.lua | 10 +++++++
 2 files changed, 40 insertions(+), 30 deletions(-)

(limited to 'builtin/common')

diff --git a/builtin/common/filterlist.lua b/builtin/common/filterlist.lua
index 562231192..1ba1d8741 100644
--- a/builtin/common/filterlist.lua
+++ b/builtin/common/filterlist.lua
@@ -47,17 +47,17 @@ function filterlist.create(raw_fct,compare_fct,uid_match_fct,filter_fct,fetch_pa
 
 	assert((raw_fct ~= nil) and (type(raw_fct) == "function"))
 	assert((compare_fct ~= nil) and (type(compare_fct) == "function"))
-	
+
 	local self = {}
-	
+
 	self.m_raw_list_fct  = raw_fct
 	self.m_compare_fct   = compare_fct
 	self.m_filter_fct    = filter_fct
 	self.m_uid_match_fct = uid_match_fct
-	
+
 	self.m_filtercriteria = nil
 	self.m_fetch_param = fetch_param
-	
+
 	self.m_sortmode = "none"
 	self.m_sort_list = {}
 
@@ -79,7 +79,7 @@ function filterlist.create(raw_fct,compare_fct,uid_match_fct,filter_fct,fetch_pa
 	self.refresh            = filterlist.refresh
 
 	filterlist.process(self)
-	
+
 	return self
 end
 
@@ -128,49 +128,49 @@ function filterlist.get_raw_element(self,idx)
 	if type(idx) ~= "number" then
 		idx = tonumber(idx)
 	end
-	
+
 	if idx ~= nil and idx > 0 and idx <= #self.m_raw_list then
 		return self.m_raw_list[idx]
 	end
-	
+
 	return nil
 end
 
 --------------------------------------------------------------------------------
 function filterlist.get_raw_index(self,listindex)
 	assert(self.m_processed_list ~= nil)
-	
+
 	if listindex ~= nil and listindex > 0 and
 		listindex <= #self.m_processed_list then
 		local entry = self.m_processed_list[listindex]
-		
+
 		for i,v in ipairs(self.m_raw_list) do
-		
+
 			if self.m_compare_fct(v,entry) then
 				return i
 			end
 		end
 	end
-	
+
 	return 0
 end
 
 --------------------------------------------------------------------------------
 function filterlist.get_current_index(self,listindex)
 	assert(self.m_processed_list ~= nil)
-	
+
 	if listindex ~= nil and listindex > 0 and
 		listindex <= #self.m_raw_list then
 		local entry = self.m_raw_list[listindex]
-		
+
 		for i,v in ipairs(self.m_processed_list) do
-		
+
 			if self.m_compare_fct(v,entry) then
 				return i
 			end
 		end
 	end
-	
+
 	return 0
 end
 
@@ -183,23 +183,23 @@ function filterlist.process(self)
 		self.m_processed_list = self.m_raw_list
 		return
 	end
-	
+
 	self.m_processed_list = {}
-	
+
 	for k,v in pairs(self.m_raw_list) do
 		if self.m_filtercriteria == nil or
 			self.m_filter_fct(v,self.m_filtercriteria) then
 			self.m_processed_list[#self.m_processed_list + 1] = v
 		end
 	end
-	
+
 	if self.m_sortmode == "none" then
 		return
 	end
-	
+
 	if self.m_sort_list[self.m_sortmode] ~= nil and
 		type(self.m_sort_list[self.m_sortmode]) == "function" then
-		
+
 		self.m_sort_list[self.m_sortmode](self)
 	end
 end
@@ -209,7 +209,7 @@ function filterlist.size(self)
 	if self.m_processed_list == nil then
 		return 0
 	end
-	
+
 	return #self.m_processed_list
 end
 
@@ -233,8 +233,8 @@ function filterlist.raw_index_by_uid(self, uid)
 			elementidx = i
 		end
 	end
-	
-	
+
+
 	-- If there are more elements than one with same name uid can't decide which
 	-- one is meant. self shouldn't be possible but just for sure.
 	if elementcount > 1 then
@@ -254,11 +254,11 @@ function compare_worlds(world1,world2)
 	if world1.path ~= world2.path then
 		return false
 	end
-	
+
 	if world1.name ~= world2.name then
 		return false
 	end
-	
+
 	if world1.gameid ~= world2.gameid then
 		return false
 	end
@@ -288,11 +288,11 @@ function sort_mod_list(self)
 
 	table.sort(self.m_processed_list, function(a, b)
 		-- Show game mods at bottom
-		if a.typ ~= b.typ then
-			if b.typ == "game" then	
-				return a.typ ~= "game_mod"
+		if a.type ~= b.type or a.loc ~= b.loc then
+			if b.type == "game" then
+				return a.loc ~= "game"
 			end
-			return b.typ == "game_mod"
+			return b.loc == "game"
 		end
 		-- If in same or no modpack, sort by name
 		if a.modpack == b.modpack then
@@ -308,7 +308,7 @@ function sort_mod_list(self)
 			elseif b.name == a.modpack then
 				return false
 			end
-			
+
 			local name_a = a.modpack or a.name
 			local name_b = b.modpack or b.name
 			if name_a:lower() == name_b:lower() then
diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index aa118b443..43a6dda48 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -551,6 +551,16 @@ function table.copy(t, seen)
 	end
 	return n
 end
+
+
+function table.insert_all(t, other)
+	for i=1, #other do
+		t[#t + 1] = other[i]
+	end
+	return t
+end
+
+
 --------------------------------------------------------------------------------
 -- mainmenu only functions
 --------------------------------------------------------------------------------
-- 
cgit v1.2.3