vanilla-wow-addons – Rev 1
?pathlinks?
-- Titan Panel [Mail]
-- tekkub is the original creator of this mod
-- Bugfixes and updates by Larholm
-- Version information
local TITAN_MAIL_VERSION = 1.15;
-- Constants
TITAN_MAIL_ID = "Mail";
TITAN_MAIL_ID_RIGHT = "MailRight";
TITAN_MAIL_ICON_NOMAIL = "Interface\\Cursor\\UnableMail";
TITAN_MAIL_ICON_NEW = "Interface\\Cursor\\Mail";
TITAN_MAIL_ICON_AH = "Interface\\Cursor\\LootAll";
TITAN_MAIL_ICON_AH_ALT = "Interface\\Icons\\Spell_Holy_RighteousFury";
TITAN_MAIL_SOUND = "Interface\\AddOns\\TitanMail\\mail.wav";
--/script TitanMail_TestIcon("Interface\\Icons\\Spell_Nature_ThunderClap");
--/script TitanMail_TestIcon("Interface\\Icons\\Spell_Holy_RighteousFury");
--/script TitanMail_TestIcon("Interface\\HelpFrame\\OpenTicketIcon");
--/script TitanMail_TestIcon("Interface\\Icons\\INV_Letter_16");
--/script TitanMail_TestIcon("Interface\\Cursor\\Inspect");
TITAN_FORMAT_COUNT_MAIL = "%u/%u";
TITAN_FORMAT_COUNT_NOMAIL = "0";
TITAN_FORMAT_TEXTCOUNT_MAIL = "%s (%u/%u)";
-- Local variables
local TPM_numNew = 0;
local TPM_numTotal = 0;
local TPM_ignorenext = false;
local TPM_lastclose = 0;
local TPM_closedelay = 5;
local TPM_checkedmail = false;
local TPM_player = GetCVar("RealmName").. UnitName("player");
local TPM_debug = false;
-- Events that don't fire UPDATE_PENDING_MAIL like they should
local TPM_brokenEvents = {
[ERR_AUCTION_WON_S] = false,
[ERR_AUCTION_SOLD_S] = false,
[ERR_AUCTION_OUTBID_S] = true,
[ERR_AUCTION_EXPIRED_S] = false,
[ERR_AUCTION_REMOVED_S] = false,
};
----------------------------------------------------------------------------------
function TPM_Debug(str)
if (TPM_debug) then
DEFAULT_CHAT_FRAME:AddMessage("|cffff00ff<Mail> ".. str);
end
end
function TitanPanelMailButton_OnLoad()
this.registry = {
id = TITAN_MAIL_ID,
menuText = TITAN_MAIL_MENU_TEXT,
buttonTextFunction = "TitanPanelMailButton_GetButtonText",
tooltipTitle = TITAN_MAIL_TOOLTIP,
tooltipTextFunction = "TitanPanelMailButton_GetTooltipText",
icon = TITAN_MAIL_ICON_NEW,
category = "Information",
version = TITAN_MAIL_VERSION,
iconWidth = 16,
savedVariables = {
ShowIcon = 1,
ShowIconAlt = 0,
ShowCount = 1,
NoIconNoMail = 0,
ShowText = 1,
compact = 1,
hidemm = 1,
new = 0,
total = 0,
sound = 1,
chat = 1,
}
};
this:RegisterEvent("VARIABLES_LOADED");
this:RegisterEvent("CHAT_MSG_SYSTEM");
this:RegisterEvent("MAIL_SHOW");
this:RegisterEvent("MAIL_CLOSED");
this:RegisterEvent("MAIL_INBOX_UPDATE");
this:RegisterEvent("UPDATE_PENDING_MAIL");
this:RegisterEvent("PLAYER_ENTERING_WORLD");
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage("Titan Panel [Mail] v"..TITAN_MAIL_VERSION.." loaded");
end
end
function TitanPanelMailRightButton_OnLoad()
this.registry = {
id = TITAN_MAIL_ID_RIGHT,
menuText = TITAN_MAILRIGHT_MENU_TEXT,
buttonTextFunction = "TitanPanelMailButton_GetButtonText",
tooltipTitle = TITAN_MAIL_TOOLTIP,
tooltipTextFunction = "TitanPanelMailButton_GetTooltipText",
icon = TITAN_MAIL_ICON_NEW,
version = TITAN_MAIL_VERSION,
iconWidth = 16,
category = "Information",
};
end
function TitanPanelMailButton_UpdateIcon(forceAH)
local hidemm = TitanGetVar(TITAN_MAIL_ID, "hidemm");
local total = TitanGetVar(TITAN_MAIL_ID, "total");
local iconshown = TitanGetVar(TITAN_MAIL_ID, "ShowIcon");
local alticon = TitanGetVar(TITAN_MAIL_ID, "ShowIconAlt");
local noiconnomail = TitanGetVar(TITAN_MAIL_ID, "NoIconNoMail");
MiniMapMailFrame:Show();
if (hidemm and MiniMapMailFrame:IsVisible()) then
MiniMapMailFrame:Hide();
end
local button = TitanUtils_GetButton(TITAN_MAIL_ID, true);
local buttonR = TitanUtils_GetButton(TITAN_MAIL_ID_RIGHT, true);
if (iconshown) then
-- TPM_Debug("Icon is shown");
else
-- TPM_Debug("Icon is hidden");
end
if TITAN_MAIL_SETTINGS[TPM_player].ahalerts then
if (alticon) then
button.registry.icon = TITAN_MAIL_ICON_AH_ALT;
buttonR.registry.icon = TITAN_MAIL_ICON_AH_ALT;
else
button.registry.icon = TITAN_MAIL_ICON_AH;
buttonR.registry.icon = TITAN_MAIL_ICON_AH;
end
elseif ((total and (total > 0)) or (HasNewMail() and (not TPM_checkedmail))) then
button.registry.icon = TITAN_MAIL_ICON_NEW;
buttonR.registry.icon = TITAN_MAIL_ICON_NEW;
elseif (noiconnomail) then
button.registry.icon = "";
buttonR.registry.icon = "";
else
button.registry.icon = TITAN_MAIL_ICON_NOMAIL;
buttonR.registry.icon = TITAN_MAIL_ICON_NOMAIL;
end
if (forceAH) then
if (alticon) then
button.registry.icon = TITAN_MAIL_ICON_AH_ALT;
buttonR.registry.icon = TITAN_MAIL_ICON_AH_ALT;
else
button.registry.icon = TITAN_MAIL_ICON_AH;
buttonR.registry.icon = TITAN_MAIL_ICON_AH;
end
end
TitanPanelButton_UpdateButton(TITAN_MAIL_ID);
TitanPanelButton_UpdateButton(TITAN_MAIL_ID_RIGHT);
end
function TitanPanelMailButton_GetButtonText(id)
local showt = TitanGetVar(TITAN_MAIL_ID, "ShowText");
local showc = TitanGetVar(TITAN_MAIL_ID, "ShowCount");
local new = TitanGetVar(TITAN_MAIL_ID, "new");
local total = TitanGetVar(TITAN_MAIL_ID, "total");
if (not total) then return; end
local buttonRichText = "";
if (showt and (not showc)) then
if TITAN_MAIL_SETTINGS[TPM_player].ahalerts then
buttonRichText = TitanUtils_GetRedText(TITAN_MAIL_BUTTON_TEXT_ALERT);
elseif ((total > 0) or (HasNewMail() and (not TPM_checkedmail))) then
buttonRichText = TitanUtils_GetGreenText(TITAN_MAIL_BUTTON_TEXT_MAIL);
else
buttonRichText = TitanUtils_GetNormalText(TITAN_MAIL_BUTTON_TEXT_NOMAIL);
end
elseif (showc and showt) then
if TITAN_MAIL_SETTINGS[TPM_player].ahalerts then
buttonRichText = TitanUtils_GetRedText(string.format(TITAN_FORMAT_TEXTCOUNT_MAIL, TITAN_MAIL_BUTTON_TEXT_ALERT, new, total));
elseif ((total > 0) or (HasNewMail() and (not TPM_checkedmail))) then
buttonRichText = TitanUtils_GetGreenText(string.format(TITAN_FORMAT_TEXTCOUNT_MAIL, TITAN_MAIL_BUTTON_TEXT_MAIL, new, total));
else
buttonRichText = TitanUtils_GetNormalText(TITAN_MAIL_BUTTON_TEXT_NOMAIL);
end
else
if TITAN_MAIL_SETTINGS[TPM_player].ahalerts then
buttonRichText = TitanUtils_GetRedText(string.format(TITAN_FORMAT_COUNT_MAIL, new, total));
elseif ((total > 0) or (HasNewMail() and (not TPM_checkedmail))) then
buttonRichText = TitanUtils_GetGreenText(string.format(TITAN_FORMAT_COUNT_MAIL, new, total));
else
buttonRichText = TitanUtils_GetNormalText(TITAN_FORMAT_COUNT_NOMAIL);
end
end
return buttonRichText;
end
function TitanPanelMailButton_GetTooltipText()
local retstr = "";
local new = TitanGetVar(TITAN_MAIL_ID, "new");
local total = TitanGetVar(TITAN_MAIL_ID, "total");
if (total > 0) or (HasNewMail()) then
retstr = retstr.. TITAN_MAIL_BUTTON_TEXT_MAIL.. "\n\n";
retstr = retstr.. TitanUtils_GetGreenText(new.. TITAN_MAIL_TOOLTIP_NEW);
retstr = retstr.. TitanUtils_GetNormalText(total.. TITAN_MAIL_TOOLTIP_TOTAL)
else
retstr = TITAN_MAIL_BUTTON_TEXT_NOMAIL;
end
if TITAN_MAIL_SETTINGS[TPM_player].ahalerts then
retstr = retstr.. "\n";
for i=1,table.getn(TITAN_MAIL_SETTINGS[TPM_player].ahalerts) do
retstr = retstr.. "\n".. TITAN_MAIL_SETTINGS[TPM_player].ahalerts[i];
end
end
return retstr;
end
function TitanPanelMailButton_OnEvent()
TPM_Debug(time().. " ".. event);
if (event == "VARIABLES_LOADED") then
if (not TITAN_MAIL_SETTINGS) then TITAN_MAIL_SETTINGS = {}; end
if (not TITAN_MAIL_SETTINGS[TPM_player]) then TITAN_MAIL_SETTINGS[TPM_player] = {}; end
TitanPanelMailButton_UpdateIcon(false);
end
if (event == "PLAYER_ENTERING_WORLD") then
TPM_Debug("Ignoring next pending");
TPM_ignorenext = true;
end
if (event == "CHAT_MSG_SYSTEM") then
TitanMail_ReadAHMsg(arg1);
TitanPanelMailButton_UpdateIcon(false);
end
if (event == "MAIL_SHOW") then
TPM_checkedmail = true;
TITAN_MAIL_SETTINGS[TPM_player].ahalerts = nil;
TitanPanelMailButton_UpdateIcon(false);
end
if (event == "MAIL_CLOSED") then
TPM_lastclose = time()
end
if ( event == "MAIL_INBOX_UPDATE" ) then
TPM_Debug("Inbox: ".. GetInboxNumItems());
TitanSetVar(TITAN_MAIL_ID, "new", 0);
TitanSetVar(TITAN_MAIL_ID, "total", GetInboxNumItems());
TitanPanelMailButton_UpdateIcon(false);
end
if ( event == "UPDATE_PENDING_MAIL" ) then
if ((TPM_lastclose + TPM_closedelay) > time()) then
TPM_Debug("Ignoring this pending");
TPM_ignorenext = true
end
if (HasNewMail()) then TPM_Debug("Has mail"); end
TitanMail_IncNew()
TitanPanelMailButton_UpdateIcon(false);
end
end
function TitanMail_Debug(state)
TPM_debug = state
end
function TitanMail_TestIcon(icon)
local button = TitanUtils_GetButton(TITAN_MAIL_ID, true);
button.registry.icon = icon;
TitanPanelButton_UpdateButton(TITAN_MAIL_ID);
end
function TitanMail_TestInc(isAH)
TitanMail_IncNew()
if (isAH) then
TitanPanelMailButton_UpdateIcon(true);
PlaySound("AuctionWindowOpen");
else
TitanPanelMailButton_UpdateIcon(false);
PlaySoundFile(TITAN_MAIL_SOUND);
end
end
function TitanMail_IncNew()
if (TPM_ignorenext) then
TPM_Debug("Ignoring that one");
TPM_ignorenext = false;
else
local new = TitanGetVar(TITAN_MAIL_ID, "new") + 1;
local total = TitanGetVar(TITAN_MAIL_ID, "total") + 1;
if (TPM_checkedmail) then
total = GetInboxNumItems() + new;
end
TitanSetVar(TITAN_MAIL_ID, "new", new)
TitanSetVar(TITAN_MAIL_ID, "total", total)
if (TitanGetVar(TITAN_MAIL_ID, "chat")) then
DEFAULT_CHAT_FRAME:AddMessage(TITAN_MAIL_CHAT_NEW.."("..new.."/"..total..")");
end
if (TitanGetVar(TITAN_MAIL_ID, "sound")) then
PlaySoundFile(TITAN_MAIL_SOUND);
TPM_Debug("Play Sound");
end
end
end
function TitanMail_ReadAHMsg(msg)
local foundAH = false;
local strset = {
{ERR_AUCTION_WON_S, TITAN_MAIL_TOOLTIP_WON},
{ERR_AUCTION_SOLD_S, TITAN_MAIL_TOOLTIP_SOLD},
{ERR_AUCTION_OUTBID_S, TITAN_MAIL_TOOLTIP_OUTBID},
{ERR_AUCTION_EXPIRED_S, TITAN_MAIL_TOOLTIP_EXPIRED},
{ERR_AUCTION_REMOVED_S, TITAN_MAIL_TOOLTIP_CANCELLED},
};
for i,arr in strset do
local searchstr = string.gsub(arr[1], "%%[^%s]+", "(.+)")
local _, _, item = string.find(msg, searchstr)
if (item) then
if (not TITAN_MAIL_SETTINGS[TPM_player].ahalerts) then
TITAN_MAIL_SETTINGS[TPM_player].ahalerts = {};
end
tinsert(TITAN_MAIL_SETTINGS[TPM_player].ahalerts, arr[2].. item);
-- Increment our count if this is a bugged event
if (TPM_brokenEvents[arr[1]]) then
TitanMail_IncNew();
brokenevent = true;
end
foundAH = true;
end
end
if (foundAH) then
TPM_Debug("AH Mail");
if (TitanGetVar(TITAN_MAIL_ID, "sound")) then
--PlaySound("AuctionWindowOpen");
--TPM_Debug("Play Sound AH");
end
else
TPM_Debug("Not an AH message.");
end
end
function TitanPanelRightClickMenu_PrepareMailRightMenu()
TitanMail_PrepareMenu(true)
end
function TitanPanelRightClickMenu_PrepareMailMenu()
TitanMail_PrepareMenu()
end
function TitanMail_PrepareMenu(isright)
local info;
TitanPanelRightClickMenu_AddTitle(TitanPlugins[TITAN_MAIL_ID].menuText);
TitanPanelRightClickMenu_AddSpacer();
info = {};
info.text = TITAN_MAIL_MENU_HIDEMM;
info.value = "hidemm";
info.keepShownOnClick = 1;
info.func = TitanMail_Toggle;
info.checked = TitanGetVar(TITAN_MAIL_ID, "hidemm");
UIDropDownMenu_AddButton(info);
info = {};
info.text = TITAN_MAIL_MENU_SOUND;
info.value = "sound";
info.func = TitanMail_Toggle;
info.keepShownOnClick = 1;
info.checked = TitanGetVar(TITAN_MAIL_ID, "sound");
UIDropDownMenu_AddButton(info);
info = {};
info.text = TITAN_MAIL_MENU_CHAT;
info.value = "chat";
info.func = TitanMail_Toggle;
info.keepShownOnClick = 1;
info.checked = TitanGetVar(TITAN_MAIL_ID, "chat");
UIDropDownMenu_AddButton(info);
if (not isright) then
TitanPanelRightClickMenu_AddSpacer();
local info = {};
info.text = TITAN_PANEL_MENU_SHOW_ICON;
info.value = "ShowIcon";
info.func = TitanMail_Toggle;
info.checked = TitanGetVar(TITAN_MAIL_ID, "ShowIcon");
info.keepShownOnClick = 1;
UIDropDownMenu_AddButton(info);
info = {};
info.text = TITAN_MAIL_MENU_STEXT;
info.value = "ShowText";
info.func = TitanMail_Toggle;
info.checked = TitanGetVar(TITAN_MAIL_ID, "ShowText");
info.keepShownOnClick = 1;
UIDropDownMenu_AddButton(info);
info = {};
info.text = TITAN_MAIL_MENU_COUNT;
info.value = "ShowCount";
info.func = TitanMail_Toggle;
info.keepShownOnClick = 1;
info.checked = TitanGetVar(TITAN_MAIL_ID, "ShowCount");
UIDropDownMenu_AddButton(info);
end
TitanPanelRightClickMenu_AddSpacer();
info = {};
info.text = TITAN_MAIL_MENU_ALTICON;
info.value = "ShowIconAlt";
info.func = TitanMail_Toggle;
info.keepShownOnClick = 1;
info.checked = TitanGetVar(TITAN_MAIL_ID, "ShowIconAlt");
UIDropDownMenu_AddButton(info);
info = {};
info.text = TITAN_MAIL_MENU_NOICONNOMAIL;
info.value = "NoIconNoMail";
info.func = TitanMail_Toggle;
info.keepShownOnClick = 1;
info.checked = TitanGetVar(TITAN_MAIL_ID, "NoIconNoMail");
UIDropDownMenu_AddButton(info);
TitanPanelRightClickMenu_AddSpacer();
if (isright) then
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_MAIL_ID_RIGHT, TITAN_PANEL_MENU_FUNC_HIDE);
else
TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, TITAN_MAIL_ID, TITAN_PANEL_MENU_FUNC_HIDE);
end
end
function TitanMail_Toggle()
TitanToggleVar(TITAN_MAIL_ID, this.value);
TitanPanelMailButton_UpdateIcon(false);
end
local function sorted_index(table)
local index = {}
for key in table do tinsert(index,key); end
sort(index)
return index
end