You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

81 lines
2.5 KiB

local _, MDT = ...
local AceGUI = LibStub("AceGUI-3.0")
local conflictFrame
local L = MDT.L
-- In DungeonTools case the AddOn has not been updated in over a year and has caused many users to be
-- confused about MDT not working. This will prompt users to remove the abandoned AddOn and prevent them
-- from opening up a broken instance.
local candidates = {
["DungeonTools"] = {
name = "Dungeon Tools";
detected = false;
onDetect = function()
SLASH_DUNGEONTOOLS1 = "/mplus"
SLASH_DUNGEONTOOLS2 = "/mdt"
SLASH_DUNGEONTOOLS3 = "/dungeontools"
function SlashCmdList.DUNGEONTOOLS(cmd, editbox)
MDT:ShowInterface()
end
local ldb = LibStub("LibDBIcon-1.0")
ldb.objects["DungeonTools"]:SetScript("OnClick", function() MDT:ShowInterface() end)
end
}
}
local conflictCheckFrame = CreateFrame("Frame")
conflictCheckFrame:RegisterEvent("ADDON_LOADED")
conflictCheckFrame:RegisterEvent("PLAYER_ENTERING_WORLD")
conflictCheckFrame:SetScript("OnEvent", function(self, event, ...)
if event == "ADDON_LOADED" then
local addonName = ...
if candidates[addonName] then
candidates[addonName].detected = true
end
end
if event == "PLAYER_ENTERING_WORLD" then
-- fire onDetect for all candidates that have been detected
for _, candidate in pairs(candidates) do
if candidate.detected then
candidate.onDetect()
end
end
conflictCheckFrame:UnregisterEvent("ADDON_LOADED")
conflictCheckFrame:UnregisterEvent("PLAYER_ENTERING_WORLD")
end
end)
function MDT:CheckAddonConflicts()
for _, candidate in pairs(candidates) do
if candidate.detected then
return true
end
end
return false
end
function MDT:ShowConflictFrame()
if not conflictFrame then
conflictFrame = AceGUI:Create("Frame")
conflictFrame:EnableResize(false)
conflictFrame:SetLayout("Flow")
conflictFrame:SetCallback("OnClose", function(widget) end)
conflictFrame:SetTitle(L["Addon Conflict"])
conflictFrame.label = AceGUI:Create("Label")
conflictFrame.label:SetWidth(390)
local labelText = L["conflictPrompt"]
-- add all conflicting addons to the text in red color
for _, candidate in pairs(candidates) do
if candidate.detected then
labelText = labelText .. "\n|cFFFF0000" .. candidate.name .. "|r"
end
end
conflictFrame.label:SetText(labelText)
conflictFrame:AddChild(conflictFrame.label)
end
conflictFrame:Show()
end