add gs
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
--[[
|
||||
// FileName: SocialUtil.lua
|
||||
// Written by: TheGamer101
|
||||
// Description: Utility code related to social features.
|
||||
]]
|
||||
local SocialUtil = {}
|
||||
|
||||
--[[ Services ]]--
|
||||
local Players = game:GetService("Players")
|
||||
local CoreGui = game:GetService("CoreGui")
|
||||
|
||||
--[[ Constants ]]--
|
||||
--todo: remove map when GetFFlagUseThumbnailUrl is removed
|
||||
local THUMBNAIL_SIZE_MAP = {
|
||||
[Enum.ThumbnailSize.Size48x48] = 48,
|
||||
[Enum.ThumbnailSize.Size180x180] = 180,
|
||||
[Enum.ThumbnailSize.Size420x420] = 420,
|
||||
[Enum.ThumbnailSize.Size60x60] = 60,
|
||||
[Enum.ThumbnailSize.Size100x100] = 100,
|
||||
[Enum.ThumbnailSize.Size150x150] = 150,
|
||||
[Enum.ThumbnailSize.Size352x352] = 352
|
||||
}
|
||||
|
||||
|
||||
local RobloxGui = CoreGui:WaitForChild("RobloxGui")
|
||||
local CoreGuiModules = RobloxGui:WaitForChild("Modules")
|
||||
|
||||
--[[ Flags ]]--
|
||||
local GetFFlagUseThumbnailUrl = require(CoreGuiModules.Common.Flags.GetFFlagUseThumbnailUrl)
|
||||
|
||||
--todo: remove these when GetFFlagUseThumbnailUrl is removed
|
||||
local LegacyThumbnailUrls = require(CoreGuiModules.Common.LegacyThumbnailUrls)
|
||||
|
||||
local THUMBNAIL_FALLBACK_URLS = {
|
||||
[Enum.ThumbnailType.HeadShot] = LegacyThumbnailUrls.Headshot,
|
||||
[Enum.ThumbnailType.AvatarBust] = LegacyThumbnailUrls.Bust,
|
||||
[Enum.ThumbnailType.AvatarThumbnail] = LegacyThumbnailUrls.Thumbnail,
|
||||
}
|
||||
-- end remove block
|
||||
|
||||
local DEFAULT_THUMBNAIL_SIZE = Enum.ThumbnailSize.Size100x100
|
||||
local DEFAULT_THUMBNAIL_TYPE = Enum.ThumbnailType.AvatarThumbnail
|
||||
--todo: remove these when GetFFlagUseThumbnailUrl is removed
|
||||
local GET_PLAYER_IMAGE_DEFAULT_TIMEOUT = 5
|
||||
local GET_USER_THUMBNAIL_ASYNC_RETRY_TIME = 1
|
||||
-- end remove block
|
||||
|
||||
local gutartSuccess,gutart = pcall(function()
|
||||
return tonumber(settings():GetFVariable("GetUserThumbnailAsyncRetryTime"))
|
||||
end)
|
||||
local gpidtSuccess,gpidt = pcall(function()
|
||||
return tonumber(settings():GetFVariable("GetPlayerImageDefaultTimeout"))
|
||||
end)
|
||||
|
||||
if gutartSuccess then
|
||||
GET_USER_THUMBNAIL_ASYNC_RETRY_TIME = gutart
|
||||
end
|
||||
|
||||
if gpidtSuccess then
|
||||
GET_PLAYER_IMAGE_DEFAULT_TIMEOUT = gpidt
|
||||
end
|
||||
|
||||
--[[ Functions ]]--
|
||||
|
||||
--todo: remove this function when GetFFlagUseThumbnailUrl is removed
|
||||
-- The thumbanil isn't guaranteed to be generated, this will just create the url using string.format and immediately return it.
|
||||
function SocialUtil.GetFallbackPlayerImageUrl(userId, thumbnailSize, thumbnailType)
|
||||
local sizeNumber = THUMBNAIL_SIZE_MAP[thumbnailSize]
|
||||
if not sizeNumber then
|
||||
if thumbnailSize then
|
||||
warn("SocialUtil.GetPlayerImage: No thumbnail size in map for " ..tostring(thumbnailSize))
|
||||
end
|
||||
|
||||
sizeNumber = THUMBNAIL_SIZE_MAP[DEFAULT_THUMBNAIL_SIZE]
|
||||
end
|
||||
|
||||
local thumbnailFallbackUrl = THUMBNAIL_FALLBACK_URLS[thumbnailType]
|
||||
if not thumbnailFallbackUrl then
|
||||
if thumbnailType then
|
||||
warn("SocialUtil.GetPlayerImage: No thumbnail fallback url in map for " ..tostring(thumbnailType))
|
||||
end
|
||||
|
||||
thumbnailFallbackUrl = THUMBNAIL_FALLBACK_URLS[DEFAULT_THUMBNAIL_TYPE]
|
||||
end
|
||||
|
||||
return thumbnailFallbackUrl:format(sizeNumber, sizeNumber, userId)
|
||||
end
|
||||
|
||||
-- This function will wait for up to timeOut seconds for the thumbnail to be generated.
|
||||
-- It will just return a fallback (probably N/A) url if it's not generated in time.
|
||||
function SocialUtil.GetPlayerImage(userId, thumbnailSize, thumbnailType, timeOut)
|
||||
if not thumbnailSize then thumbnailSize = DEFAULT_THUMBNAIL_SIZE end
|
||||
if not thumbnailType then thumbnailType = DEFAULT_THUMBNAIL_TYPE end
|
||||
if not timeOut then timeOut = GET_PLAYER_IMAGE_DEFAULT_TIMEOUT end
|
||||
|
||||
if GetFFlagUseThumbnailUrl() then
|
||||
local size = 0
|
||||
--Valid sizes for type AvatarHeadShot are 150x150, 48x48, 60x60
|
||||
if thumbnailType == Enum.ThumbnailType.HeadShot or thumbnailType == Enum.ThumbnailType.AvatarBust then
|
||||
if thumbnailSize == Enum.ThumbnailSize.Size48x48 then
|
||||
size = 48
|
||||
elseif thumbnailSize == Enum.ThumbnailSize.Size60x60 then
|
||||
size = 60
|
||||
else
|
||||
size = 150
|
||||
end
|
||||
return "rbxthumb://type=AvatarHeadShot&id=" .. userId .."&w=" .. size .. "&h=" .. size
|
||||
--Valid sizes for type Avatar are 100x100, 352x352, 720x720
|
||||
elseif thumbnailType == Enum.ThumbnailType.AvatarThumbnail then
|
||||
if thumbnailSize == Enum.ThumbnailSize.Size48x48 or
|
||||
thumbnailSize == Enum.ThumbnailSize.Size60x60 or
|
||||
thumbnailSize == Enum.ThumbnailSize.Size100x100 then
|
||||
size = 100
|
||||
elseif thumbnailSize == Enum.ThumbnailSize.Size150x150 or
|
||||
thumbnailSize == Enum.ThumbnailSize.Size180x180 or
|
||||
thumbnailSize == Enum.ThumbnailSize.Size352x352 then
|
||||
size = 352
|
||||
elseif thumbnailSize == Enum.ThumbnailSize.Size420x420 then
|
||||
size = 720
|
||||
end
|
||||
return "rbxthumb://type=Avatar&id=" .. userId .."&w=" .. size .. "&h=" .. size
|
||||
end
|
||||
|
||||
return "ThumbnailErrorForSocialUtil.GetPlayerImage"
|
||||
else
|
||||
|
||||
local finished = false
|
||||
local finishedBindable = Instance.new("BindableEvent") -- fired with one parameter: imageUrl
|
||||
|
||||
delay(timeOut, function()
|
||||
if not finished then
|
||||
finished = true
|
||||
finishedBindable:Fire(SocialUtil.GetFallbackPlayerImageUrl(userId, thumbnailSize, thumbnailType))
|
||||
end
|
||||
end)
|
||||
|
||||
spawn(function()
|
||||
while true do
|
||||
if finished then
|
||||
break
|
||||
end
|
||||
|
||||
local thumbnailUrl, isFinal = Players:GetUserThumbnailAsync(userId, thumbnailType, thumbnailSize)
|
||||
|
||||
if finished then
|
||||
break
|
||||
end
|
||||
|
||||
if isFinal then
|
||||
finished = true
|
||||
finishedBindable:Fire(thumbnailUrl)
|
||||
break
|
||||
end
|
||||
|
||||
wait(GET_USER_THUMBNAIL_ASYNC_RETRY_TIME)
|
||||
end
|
||||
end)
|
||||
|
||||
local imageUrl = finishedBindable.Event:Wait()
|
||||
return imageUrl
|
||||
end
|
||||
end
|
||||
|
||||
return SocialUtil
|
||||
Reference in New Issue
Block a user