Conan Exiles Wiki
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
local util_args = require("Module:ArgsUtil")
local util_cache = require("Module:CacheUtil")
local util_vars = require("Module:VarsUtil")
local cache = require('mw.ext.LuaCache')
local PREFIX = 'ITEMLINK_04'
local lang = mw.getLanguage('en')

local p = {}
local h = {}
local cargo = mw.ext.cargo

function p.Main(frame)
	local args = util_args.merge()
	local text = ""
	local inpLemma = args[1]
	local inpText  = args[2]
	local key = h.getKey(inpLemma)
	local result
	if util_args.castAsBool(args.force) then
		result = h.getFromCargoAndUpdateCache(inpLemma, key)
	else
		result = h.getFromVariablesOrCache(inpLemma, key)
	end
	if not result then
		return '[[' .. h.switchString(inpLemma, inpText) .. ']]'
	end
	
	if result['dlcPackage'] ~= "" then
		text = '<span style="position: relative; display: inline-block;"><span style="display: block;">[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]</span><span style="position: absolute; display: block; top: 0; bottom: 0; left: 0; right: 0;">[[File:T DLC icon.png|32px|link=' .. result['_pageName'] .. ']]</span></span>'
	else
		text = '[[File:' .. result['image'] .. '|32px|link=' .. result['_pageName'] .. '|frameless]]'
	end
	text = text .. '&nbsp;[['.. result['_pageName'] .. '|' .. h.switchString(result['_pageName'], inpText) ..']]'
	return text
end

function p.updateCache(frame)
	-- this method returns nothing & just exists to query & update the LuaCache object
	-- it's called from the infobox so that when the page is saved, the cache will be updated
	local args = util_args.merge()
	local str = args[1]
	if not str then return end
	local key = h.getKey(str)
	h.getFromCargoAndUpdateCache(str, key)
end

-- the following code extracts the result from either:
-- (a) a LuaVariables result stored earlier on the page; or
-- (b) a LuaCache object of the lowercase name; or finally
-- (c) an actual Cargo query to retrieve the information from the page
-- we avoid doing a Cargo query at all costs because Cargo queries are extremely expensive

-- this was not premature optimization; the wiki was actually experiencing errors
-- prior to this optimization being added
-- this code was adapted from Module:Team on Leaguepedia
-- contact River for questions

function h.getKey(str)
	return PREFIX .. lang:lc(str)
end

function h.getFromVariablesOrCache(str, key)
	return util_vars.getObject(key) or h.getFromCacheOrCargo(str, key)
end

function h.getFromCacheOrCargo(str, key)
	local result = cache.get(key) or h.getFromCargoAndUpdateCache(str, key)
	util_vars.setObject(key, result)
	return result
end

function h.getFromCargoAndUpdateCache(str, key)
	local tables = 'Item'
	local fields = '_pageName,image,dlcPackage'
	local query = {
		where = 'uniqueName = "' .. str .. '" ',
		groupBy = '_pageName',
		limit = 1
	}
	local result = cargo.query( tables, fields, query )[1]
	cache.set(key, result)
	return result
end

-- end luacache wrapper

function h.switchString(str1, str2)
	if str2 == nil then return str1 end
	if str2 == '' then return str1 end
	return str2
end

return p
Advertisement