mirror of
https://github.com/brues-code/pfUI.git
synced 2026-09-22 15:46:56 +00:00
4eab494a01
"cannot run on this ClassicAPI" named no version, so the player had nothing to compare against the requirement, and it overstated the failure: pfUI does load on an old DLL, it just throws wherever it reaches for an API that isn't there. Put the installed version in the headline and soften it to "will not work correctly"; the detail line then only has to state the requirement.
79 lines
3.3 KiB
Lua
79 lines
3.3 KiB
Lua
do
|
|
-- ClassicAPI dependency gate.
|
|
--
|
|
-- Which TOC the client opened already answers "is ClassicAPI here?". Whenever
|
|
-- the DLL is loaded it redirects the read of `pfUI\pfUI.toc` to
|
|
-- `pfUI_Turtle.toc` (Turtle clients) or `pfUI_ClassicAPI.toc` (everything
|
|
-- else). Reaching this file from the plain `pfUI.toc` therefore means
|
|
-- ClassicAPI is absent -- and that TOC deliberately loads nothing but this
|
|
-- file, so there is nothing to disable, only a notice to show.
|
|
--
|
|
-- The flavor TOCs still need a version gate of their own: the redirect has
|
|
-- existed since ClassicAPI v1.11.0, well below the API surface pfUI relies
|
|
-- on. There pfUI does load, and will throw wherever it reaches for something
|
|
-- the installed DLL doesn't have yet -- the popup names the cause so those
|
|
-- errors aren't a mystery.
|
|
local PFUI_CLASSIC_API_MIN = 11304 -- (X*10000 + Y*100 + Z)
|
|
local PFUI_CLASSIC_API_LATEST = PFUI_CLASSIC_API_MIN
|
|
local PFUI_CLASSIC_API_WEBSITE = "https://github.com/brues-code/ClassicAPI"
|
|
local PFUI_CLASSIC_API_LATEST_URL = PFUI_CLASSIC_API_WEBSITE .. "/releases/latest"
|
|
local function FormatVersion(packed)
|
|
local x = math.floor(packed / 10000)
|
|
local y = math.floor(math.mod(packed, 10000) / 100)
|
|
local z = math.mod(packed, 100)
|
|
return string.format("v%d.%d.%d", x, y, z)
|
|
end
|
|
|
|
local headline, detail
|
|
if not CLASSIC_API_VERSION then
|
|
headline = "|cff33ffccpf|cffffffffUI|r has been disabled."
|
|
detail = "The ClassicAPI DLL isn't loaded. Download the latest release from:"
|
|
elseif CLASSIC_API_VERSION < PFUI_CLASSIC_API_MIN then
|
|
headline = "|cff33ffccpf|cffffffffUI|r will not work correctly on ClassicAPI " .. FormatVersion(CLASSIC_API_VERSION) .. "."
|
|
detail = FormatVersion(PFUI_CLASSIC_API_MIN) .. " or newer is required -- any errors alongside this one are the APIs it is missing. Download the latest release from:"
|
|
end
|
|
|
|
if detail then
|
|
local function ShowRequiredPopup()
|
|
StaticPopupDialogs["PFUI_CLASSICAPI_REQUIRED"] = {
|
|
text = headline .. "\n\n" .. detail,
|
|
button1 = OKAY,
|
|
hasEditBox = 1,
|
|
editBoxWidth = 280,
|
|
timeout = 0,
|
|
whileDead = 1,
|
|
hideOnEscape = 1,
|
|
preferredIndex = 3,
|
|
OnShow = function()
|
|
local editBox = getglobal(this:GetName().."EditBox")
|
|
if editBox then
|
|
editBox:SetText(PFUI_CLASSIC_API_LATEST_URL)
|
|
editBox:HighlightText()
|
|
editBox:SetFocus()
|
|
end
|
|
end,
|
|
}
|
|
StaticPopup_Show("PFUI_CLASSICAPI_REQUIRED")
|
|
DEFAULT_CHAT_FRAME:AddMessage(
|
|
headline .. " " .. detail .. " " .. PFUI_CLASSIC_API_LATEST_URL,
|
|
1, 0.3, 0.3
|
|
)
|
|
end
|
|
local loginFrame = CreateFrame("Frame")
|
|
loginFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
|
|
loginFrame:SetScript("OnEvent", function()
|
|
loginFrame:UnregisterEvent("PLAYER_ENTERING_WORLD")
|
|
ShowRequiredPopup()
|
|
end)
|
|
elseif CLASSIC_API_VERSION < PFUI_CLASSIC_API_LATEST then
|
|
EventUtil.ContinueOnPlayerLogin(function()
|
|
C_Timer.After(8, function()
|
|
DEFAULT_CHAT_FRAME:AddMessage(
|
|
"|cff33ffccpf|rUI: ClassicAPI " .. FormatVersion(PFUI_CLASSIC_API_LATEST) .. " is available — " .. PFUI_CLASSIC_API_LATEST_URL,
|
|
1, 0.85, 0.3
|
|
)
|
|
end)
|
|
end)
|
|
end
|
|
end
|