73 lines
2.2 KiB
Lua
73 lines
2.2 KiB
Lua
local CorePackages = game:GetService("CorePackages")
|
|
local Cryo = require(CorePackages.Cryo)
|
|
local ArgCheck = require(CorePackages.ArgCheck)
|
|
local PromiseUtilities = require(CorePackages.AppTempCommon.LuaApp.PromiseUtilities)
|
|
local FetchSubdividedThumbnails = require(script.Parent.FetchSubdividedThumbnails)
|
|
|
|
local PerformFetch = require(CorePackages.AppTempCommon.LuaApp.Thunks.Networking.Util.PerformFetch)
|
|
|
|
local ICON_PAGE_COUNT = 100
|
|
local ICON_SIZE = "150x150"
|
|
|
|
local function convertToId(value)
|
|
return tostring(value)
|
|
end
|
|
|
|
local ApiFetchThumbnails = {}
|
|
|
|
local keyMapper = function (request)
|
|
local targetId = request.targetId
|
|
local size = request.iconSize and "."..request.iconSize or ""
|
|
local requestName = request.requestName and "."..request.requestName or ""
|
|
return "luaapp.thumbnails." .. convertToId(targetId)..size..requestName
|
|
end
|
|
|
|
ApiFetchThumbnails.KeyMapper = keyMapper
|
|
|
|
local function subdivideIdsArray(requests, limit)
|
|
local someTokens = {}
|
|
for i = 1, #requests, limit do
|
|
local subArray = Cryo.List.getRange(requests, i, i + limit - 1)
|
|
table.insert(someTokens, subArray)
|
|
end
|
|
return someTokens
|
|
end
|
|
|
|
function ApiFetchThumbnails.Fetch(networkImpl, targetIds, imageSize, requestName, fetchFunction, storeDispatch, store)
|
|
local size = imageSize or ICON_SIZE
|
|
ArgCheck.isType(targetIds, "table", "targetIds")
|
|
ArgCheck.isType(requestName, "string", "requestName")
|
|
ArgCheck.isNonNegativeNumber(#targetIds, "targetIds count")
|
|
|
|
local requests = {}
|
|
local promises = {}
|
|
-- Filter out the icons that are already in the store.
|
|
for _, targetId in pairs(targetIds) do
|
|
table.insert(requests, {
|
|
targetId = targetId,
|
|
iconSize = size,
|
|
})
|
|
end
|
|
local subdividedRequestsArray = subdivideIdsArray(requests, ICON_PAGE_COUNT)
|
|
for _, subdividedRequests in ipairs(subdividedRequestsArray) do
|
|
table.insert(
|
|
promises,
|
|
store:dispatch(FetchSubdividedThumbnails.Fetch(
|
|
networkImpl,
|
|
subdividedRequests,
|
|
keyMapper,
|
|
requestName,
|
|
fetchFunction,
|
|
storeDispatch
|
|
))
|
|
)
|
|
end
|
|
|
|
return PromiseUtilities.Batch(promises)
|
|
end
|
|
|
|
function ApiFetchThumbnails.GetFetchingStatus(state, targetId, iconSize, requestName)
|
|
return PerformFetch.GetStatus(state, keyMapper({targetId = targetId, requestName = requestName, iconSize = iconSize}))
|
|
end
|
|
|
|
return ApiFetchThumbnails |