50 lines
1.2 KiB
Lua
50 lines
1.2 KiB
Lua
--[[
|
|
CLILUACORE-311: We need to find a proper way to encapsulate this;
|
|
conditionally depending on PlatformService is bad!
|
|
]]
|
|
local PlatformService = nil
|
|
pcall(function()
|
|
PlatformService = game:GetService("PlatformService")
|
|
end)
|
|
|
|
local Promise = require(script.Parent.Parent.Promise)
|
|
|
|
local function parseRobuxValue(productInfo)
|
|
local rawText = productInfo and productInfo.Name
|
|
local noJunk = string.gsub(rawText, ",", "")
|
|
noJunk = noJunk and string.match(noJunk, "[0-9]+") or nil
|
|
return noJunk and tonumber(noJunk) or 1000
|
|
end
|
|
|
|
local XboxCatalogData = {}
|
|
|
|
function XboxCatalogData.GetCatalogInfoAsync()
|
|
if PlatformService == nil then
|
|
error("PlatformService unavailable; are you on XboxOne?")
|
|
end
|
|
|
|
local promisified = Promise.promisify(function()
|
|
return PlatformService:BeginGetCatalogInfo()
|
|
end)
|
|
|
|
return promisified()
|
|
:andThen(function(catalogInfo)
|
|
local availableProducts = {}
|
|
|
|
for _, productInfo in pairs(catalogInfo) do
|
|
local product = {
|
|
robuxValue = parseRobuxValue(productInfo),
|
|
productId = productInfo.ProductId
|
|
}
|
|
table.insert(availableProducts, product)
|
|
end
|
|
|
|
return Promise.resolve(availableProducts)
|
|
end)
|
|
:catch(function(errorReason)
|
|
return Promise.reject(errorReason)
|
|
end)
|
|
end
|
|
|
|
return XboxCatalogData
|