vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

-- Class Setup
AceCommands = AceChatCmd:new(ACE_COMMANDS, ACE_CMD_OPTIONS)


--[[--------------------------------------------------------------------------
  Ace Information
-----------------------------------------------------------------------------]]

function AceCommands:DisplayInfo()
        local mem = gcinfo()

        self:report(ACE_INFO_HEADER, {
                {text=ACE_INFO_PROFILE_LOADED, val=ace.db.profileName},
                {text=ACE_TEXT_MEM_USAGE, val=format("%.3f", mem/1024)},
                {text=ACE_TEXT_TOTAL_ADDONS, val=GetNumAddOns()},
                {text=ACE_TEXT_TOTAL_LOADED, val=ace.addons.numLoaded, indent=1},
                {text=ACE_TEXT_ACE_ADDONS_LOADED, val=ace.addons.numAceAddons, indent=1},
                {text=ACE_TEXT_ACE_REGISTERED, val=ace.addons.numAceApps, indent=2},
                {text=ACE_TEXT_OTHERS_LOADED, val=ace.addons.numLoaded-ace.addons.numAceAddons, indent=1},
                {text=ACE_TEXT_NOT_LOADED, val=GetNumAddOns()-ace.addons.numLoaded, indent=1}
        })
end


--[[--------------------------------------------------------------------------
  Enable/Disable Addons
-----------------------------------------------------------------------------]]

function AceCommands:EnableAddon(addon)
        if( strlower(addon) == ACE_TEXT_ALL ) then
                EnableAllAddOns()
                self:msg(ACE_CMD_ADDON_ENABLED_ALL)
        elseif( ace.addons.list[strlower(addon)] ) then
                EnableAddOn(addon)
                self:msg(ACE_CMD_ADDON_ENABLED, addon)
        else
                self:msg(ACE_CMD_ADDON_NOTFOUND, addon)
        end
end

function AceCommands:DisableAddon(addon)
        if( strlower(addon) == ACE_TEXT_ALL ) then
                DisableAllAddOns()
                EnableAddOn("ace") -- Ace should be disabled separately
                self:msg(ACE_CMD_ADDON_DISABLED_ALL)
        elseif( ace.addons.list[strlower(addon)] ) then
                DisableAddOn(addon)
                self:msg(ACE_CMD_ADDON_DISABLED, ace.addons.list[strlower(addon)].name)
        else
                self:msg(ACE_CMD_ADDON_NOTFOUND, addon)
        end
end


--[[--------------------------------------------------------------------------
  Addon Lists
-----------------------------------------------------------------------------]]

function AceCommands:ListAddons(opt)
        ace:print(format(ACE_CMD_RESULT, ACE_CMD_OPT_LIST_ADDONS, ""))
        if( (opt or "") == "" ) then
                for _, addon in ace.sort(ace.GetTableKeys(ace.addons.list)) do
                        self:DisplayAddon(ace.addons.list[addon], addon == "ace")
                end
        else
                local _, addon = ace.TableFindKeyCaseless(ace.addons.list, opt)
                if( addon ) then
                        self:DisplayAddon(addon, strlower(opt) == "ace", TRUE)
                else
                        ace:print(format(ACE_CMD_ADDON_NOTFOUND, opt))
                end
        end
end

function AceCommands:DisplayAddon(addon, isAce, showNotLoaded)
        if( isAce ) then
                self:DisplayAceAddon(addon, Ace)
        elseif( addon.apps and addon.ace ) then
                if( getn(addon.apps) > 1 ) then
                        ace:print(" - "..addon.title)
                        for _, app in addon.apps do
                                self:DisplayAceAddon(addon, app, "      "..app.name)
                        end
                else
                        self:DisplayAceAddon(addon, addon.apps[1])
                end
        elseif( addon.loaded or showNotLoaded ) then
                ace:print(" - ", addon.title)
        end
end

function AceCommands:DisplayAceAddon(addon, app, prefix)
        ace:print(prefix or " - "..addon.title,
                          ((app.cmd and app.cmd.commands)
                                and " "..format(ACE_ADDON_CHAT_COMMAND, app.cmd.commands[1])
                                or  "") or "",
                          (app.disabled and " "..ACE_ADDON_STANDBY) or "",
                          app.aceMismatch and " "..ACE_VERSION_MISMATCH
                         )
end

function AceCommands:ListAddonsAce()
        ace:print(format(ACE_CMD_RESULT, ACE_CMD_OPT_LIST_ADDONS, ""))
        for _, addon in ace.sort(ace.GetTableKeys(ace.addons.list)) do
                if( ace.addons.list[addon].ace or (addon == "ace") ) then
                        self:DisplayAddon(ace.addons.list[addon], addon == "ace")
                end
        end
end

function AceCommands:ListAddonsOther()
        ace:print(format(ACE_CMD_RESULT, ACE_CMD_OPT_LIST_ADDONS, ""))
        for _, addon in ace.sort(ace.GetTableKeys(ace.addons.list)) do
                if( (not ace.addons.list[addon].ace) and (addon ~= "ace") ) then
                        self:DisplayAddon(ace.addons.list[addon])
                end
        end
end

function AceCommands:ListAddonsLoadable()
        ace:print(format(ACE_CMD_RESULT, ACE_CMD_OPT_LIST_ADDONS, ""))
        for i = 1, GetNumAddOns() do
                local name, _, _, _, loadable = GetAddOnInfo(i)
                if( loadable and (not IsAddOnLoaded(i)) ) then
                        ace:print(" - ", name)
                end
        end
end


--[[--------------------------------------------------------------------------
  Addon Loading
-----------------------------------------------------------------------------]]

function AceCommands:LoadAddon(addon)
        if( IsAddOnLoaded(addon) ) then
                self:result(format(ACE_CMD_OPT_LOAD_IS_LOADED, addon))
                return
        end

        local loaded, reason = LoadAddOn(addon)
        if( loaded ) then
                self:result(format(ACE_CMD_OPT_LOAD_LOADED, GetAddOnInfo(addon)))
        else
                self:result(format(ACE_CMD_OPT_LOAD_ERROR, addon, strlower(reason)))
        end
end

function AceCommands:LoadAddonAuto(addon)
        ace.db:SetLoadOnStart(addon, TRUE)
        self:LoadAddon(addon)
end

function AceCommands:LoadAddonOff(addon)
        if( ace.db:GetLoadOnStart(addon) ) then
                ace.db:SetLoadOnStart(addon, FALSE)
                self:result(format(ACE_CMD_OPT_AUTO_OFF_MSG, addon))
        end
end


--[[--------------------------------------------------------------------------
  Configurations
-----------------------------------------------------------------------------]]

function AceCommands:ChangeLoadMsgAddon()
        ace.db:SetOpt("loadMsg", "addon")
        self:status(ACE_TEXT_LOADMSG, "addon", ACE_MAP_LOADMSG)
end

function AceCommands:ChangeLoadMsgNone()
        ace.db:SetOpt("loadMsg", "none")
        self:status(ACE_TEXT_LOADMSG, "none", ACE_MAP_LOADMSG)
end

function AceCommands:ChangeLoadMsgSum()
        ace.db:SetOpt("loadMsg")
        self:status(ACE_TEXT_LOADMSG, 0, ACE_MAP_LOADMSG)
end


--[[--------------------------------------------------------------------------
  Profile Options
-----------------------------------------------------------------------------]]

function AceCommands:ProfileInfo()
        local profile = ace.db:GetProfile(ace.db.profileName)


end

function AceCommands:SetProfile(profile, key, msg)
        if( (key or "") ~= "" ) then
                if( strlower(key) == ACE_CMD_PROFILE_ALL ) then
                        for _, addon in ace.registry:get() do
                                if( addon.db and (not ace.db:GetAddonProfile(profile, addon, profile)) ) then
                                        ace.db:SetAddonProfile(profile, addon, profile)
                                end
                        end
                        self:result(format(ACE_CMD_PROFILE_ALL_ADDED, profile))
                        msg = nil
                else
                        local _, addon = ace.TableFindKeyCaseless(ace.registry:get(), key)
                        if( not addon ) then
                                self:result(format(ACE_CMD_ADDON_NOTFOUND, key))
                                return
                        end
                        if( not addon.db ) then
                                self:result(format(ACE_CMD_PROFILE_NO_PROFILE, addon.name))
                                return
                        end
                        ace.db:SetAddonProfile(profile, addon, profile)
                        self:result(format(ACE_CMD_PROFILE_ADDON_ADDED, addon.name, profile))
                        msg = nil
                end
        end

        -- Load the profile last so that any individual addons added to it will be set to
        -- the correct path.
        self:LoadProfile(profile, msg)
end

function AceCommands:LoadProfile(profile, msg)
        if( ace.db:GetProfile(profile) ) then
                ace.db:LoadProfile(profile)
        else
                ace.db:SaveProfile(profile, ace.db:NewProfile())
                ace.db:LoadProfile(profile)
        end
        if( msg ) then self:result(msg) end
end

function AceCommands:UseProfileChar(opt)
        local _, _, addon, import = strfind(opt, "(%S*)%s?(.*)")
        self:SetProfile(ace.char.id, addon, format(ACE_PROFILE_LOADED_CHAR, ace.char.id))
end

function AceCommands:UseProfileClass(addon)
        self:SetProfile(ace.char.class, addon,
                                        format(ACE_PROFILE_LOADED_CLASS, ace.char.class, ace.char.id)
                                   )
end

function AceCommands:UseProfileDefault()
        ace.db:LoadProfile(ACE_PROFILE_DEFAULT)
        self:result(format(ACE_PROFILE_LOADED_DEFAULT, ace.char.id))
end


ace.cmd = AceCommands
ace.cmd.app = ace