local p = {}
local CACHE_EXPIRATION = 86400 -- Cache for 24 hours (in seconds)
-- Function to cache the result for the current page view
local function setCache(category, pages)
local cache = mw.ext.LuaCache
if cache then
local key = "NumberOfWorks_" .. category
cache:set(key, pages, CACHE_EXPIRATION)
end
end
-- Function to get the cached result for the current page view
local function getCache(category)
local cache = mw.ext.LuaCache
if cache then
local key = "NumberOfWorks_" .. category
return cache:get(key)
end
return nil
end
-- Main function to get the number of works
function p.getWorkCount(frame)
local category = frame.args.category or ''
if category == '' then return "0 works" end
-- Check the cache first
local cachedPages = getCache(category)
if cachedPages then
if tonumber(cachedPages) == 1 then
return "1 work"
else
return cachedPages .. " works"
end
end
-- No cached result, perform expensive call
local pages = mw.site.stats.pagesInCategory(category)
-- Cache the result
setCache(category, pages)
-- Return the result
if tonumber(pages) == 1 then
return "1 work"
else
return pages .. " works"
end
end
function p.main(frame)
return p.getWorkCount(frame)
end
return p