Zerotorescue@96: local MailOpener = LibStub("AceAddon-3.0"):GetAddon("MailOpener"); Zerotorescue@96: local mod = MailOpener:NewModule("Indicator", "AceEvent-3.0", "AceHook-3.0"); Zerotorescue@96: local L = LibStub("AceLocale-3.0"):GetLocale("MailOpener"); Zerotorescue@96: Zerotorescue@96: mod.moduleDescription = L["Uses the minimap mail icon to indicate when there is still unread mail waiting for you at the mailbox."]; Zerotorescue@96: mod.moduleRequired = false; Zerotorescue@96: Zerotorescue@96: function mod:OnInitialize() Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: function mod:OnEnable() Zerotorescue@96: self:Debug("OnEnable"); Zerotorescue@96: Zerotorescue@96: MinimapMailFrameUpdate = NewMinimapMailFrameUpdate; Zerotorescue@96: Zerotorescue@96: self:RegisterEvent("MAIL_SHOW"); Zerotorescue@96: Zerotorescue@96: -- If we were toggling this module on while the mailbox is opened we must register all events again Zerotorescue@96: if MailFrame:IsVisible() then Zerotorescue@96: self:MAIL_SHOW(); Zerotorescue@96: end Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: -- Even though Ace can unregister our events it's neater to do it manually too Zerotorescue@96: function mod:OnDisable() Zerotorescue@96: self:Debug("OnDisable"); Zerotorescue@96: Zerotorescue@96: MinimapMailFrameUpdate = originalMinimapMailFrameUpdate; Zerotorescue@96: Zerotorescue@96: self:UnregisterEvent("MAIL_SHOW"); Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: function mod:MAIL_SHOW() Zerotorescue@96: self:Debug("MAIL_SHOW"); Zerotorescue@96: Zerotorescue@96: self:RegisterEvent("MAIL_CLOSED"); Zerotorescue@96: Zerotorescue@96: self:RegisterMessage("MO_SERVER_SYNCED"); Zerotorescue@96: self:RegisterMessage("MO_OPEN_COMPLETE"); Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: local lastKnownTotalItems; Zerotorescue@96: Zerotorescue@96: function mod:MAIL_CLOSED() Zerotorescue@96: self:Debug("MAIL_CLOSED"); Zerotorescue@96: Zerotorescue@96: self:UnregisterEvent("MAIL_CLOSED"); Zerotorescue@96: Zerotorescue@96: self:UnregisterMessage("MO_SERVER_SYNCED"); Zerotorescue@96: self:UnregisterMessage("MO_OPEN_COMPLETE"); Zerotorescue@96: Zerotorescue@96: self:UpdateIcon(); Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: -- We received new mail, update icon status Zerotorescue@96: function mod:MO_SERVER_SYNCED() Zerotorescue@96: self:UpdateIcon(); Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: -- We processed current mail, update icon status Zerotorescue@96: function mod:MO_OPEN_COMPLETE() Zerotorescue@96: self:UpdateIcon(); Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: function mod:UpdateIcon() Zerotorescue@96: local numItems, totalItems = GetInboxNumItems(); Zerotorescue@96: lastKnownTotalItems = totalItems; Zerotorescue@96: Zerotorescue@96: if totalItems > numItems then Zerotorescue@96: -- Unread items not currently visible remaining Zerotorescue@96: MiniMapMailFrame:Show(); Zerotorescue@96: else Zerotorescue@96: -- Current mail is everything there is Zerotorescue@96: MiniMapMailFrame:Hide(); Zerotorescue@96: end Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: -- Copy the old updater Zerotorescue@96: local originalMinimapMailFrameUpdate = MinimapMailFrameUpdate; Zerotorescue@96: -- Prepare a function to overwrite the default WoW function updating the tooltip for the mail icon Zerotorescue@96: -- Only apply this function when this module is enabled Zerotorescue@96: function NewMinimapMailFrameUpdate() Zerotorescue@96: -- A small part of this code was copied from the FrameXML Zerotorescue@96: Zerotorescue@96: local toolText; Zerotorescue@96: if lastKnownTotalItems then Zerotorescue@96: toolText = L["You have %d unread mail remaining in your mailbox."]:format(lastKnownTotalItems); Zerotorescue@96: else Zerotorescue@96: toolText = L["You have unread mail remaining in your mailbox."]; Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: local sender1, sender2, sender3 = GetLatestThreeSenders(); Zerotorescue@96: Zerotorescue@96: if sender1 or sender2 or sender3 then Zerotorescue@96: toolText = toolText .. " " .. L["This mail includes mail sent by:"] .. "\n"; Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: if sender1 then Zerotorescue@96: toolText = toolText .. "\n" .. sender1; Zerotorescue@96: end Zerotorescue@96: if sender2 then Zerotorescue@96: toolText = toolText .. "\n" .. sender2; Zerotorescue@96: end Zerotorescue@96: if sender3 then Zerotorescue@96: toolText = toolText .. "\n" .. sender3; Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: GameTooltip:SetText(toolText); Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: function mod:GetOptionsGroup() Zerotorescue@96: local configGroup = { Zerotorescue@96: order = 0, Zerotorescue@96: type = "modulesSubGroup", Zerotorescue@96: name = L["Indicator"], Zerotorescue@96: desc = L["Change settings for the Indicator module."], Zerotorescue@96: args = { Zerotorescue@96: General = { Zerotorescue@96: order = 10, Zerotorescue@96: type = "group", Zerotorescue@96: inline = true, Zerotorescue@96: name = L["General"], Zerotorescue@96: args = { Zerotorescue@96: description = { Zerotorescue@96: order = 10, Zerotorescue@96: type = "description", Zerotorescue@96: name = function() Zerotorescue@96: local descText = L["With this button you can completely toggle this module |cff00ff00on|r or |cffff0000off|r. This setting will be remembered and the module will be automatically toggled |cff00ff00on|r or |cffff0000off|r upon logon as it was last set."] .. "\n\n"; Zerotorescue@96: Zerotorescue@96: if self:IsEnabled() then Zerotorescue@96: descText = descText .. L["Status: %s"]:format(L["|cff00ff00Enabled|r"]); Zerotorescue@96: else Zerotorescue@96: descText = descText .. L["Status: %s"]:format(L["|cffff0000Disabled|r"]); Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: return descText; Zerotorescue@96: end, Zerotorescue@96: }, Zerotorescue@96: disable = { Zerotorescue@96: order = 20, Zerotorescue@96: type = "execute", Zerotorescue@96: name = function() Zerotorescue@96: if self:IsEnabled() then Zerotorescue@96: return L["Disable Module"]; Zerotorescue@96: else Zerotorescue@96: return L["Enable Module"]; Zerotorescue@96: end Zerotorescue@96: end, Zerotorescue@96: desc = L["Click here to completely toggle this module on or off."], Zerotorescue@96: width = "double", Zerotorescue@96: func = function() Zerotorescue@96: if self:IsEnabled() then Zerotorescue@96: self:Disable(); Zerotorescue@96: Zerotorescue@96: MailOpener.db.profile.modules[self:GetName()] = false; Zerotorescue@96: else Zerotorescue@96: self:Enable(); Zerotorescue@96: Zerotorescue@96: MailOpener.db.profile.modules[self:GetName()] = true; Zerotorescue@96: end Zerotorescue@96: end, Zerotorescue@96: }, Zerotorescue@96: }, Zerotorescue@96: }, Zerotorescue@96: }, Zerotorescue@96: }; Zerotorescue@96: Zerotorescue@96: return configGroup; Zerotorescue@96: end Zerotorescue@96: Zerotorescue@96: function mod:Debug(t) Zerotorescue@96: return MailOpener:Debug("|cff993300Indicator|r:" .. t); Zerotorescue@96: end