Quantcast
--[[

 Copyright (c) 2009, Adrian L Lange
 All rights reserved.

 You're allowed to use this addon, free of monetary charge,
 but you are not allowed to modify, alter, or redistribute
 this addon without express, written permission of the author.

--]]

local next = next
local find = string.find
local lower = string.lower

local orig = UIErrorsFrame:GetScript('OnEvent')

local function msg(...)
	print(format('|cffff8080pError:|r %s', ...))
end

local function slashCommand(str)
	str = lower(str)

	if(str == 'reset') then
		pErrorDB = {all = false, blacklist = {}}
		msg('Savedvariables are now reset to default')
	elseif(str == 'all') then
		pErrorDB.all = not pErrorDB.all
		msg(format('Filtering all events turned %s', pErrorDB.all and 'on' or 'off'))
	elseif(str == 'list') then
		if(pErrorDB.all) then
			msg('Filtering all events!')
		elseif(not pErrorDB.blacklist[1]) then
			msg('Database is empty')
		else
			msg('Listing database of events:')

			for k, v in next, pErrorDB.blacklist do
				msg(format('|cff95ff95 \'%s\'|r', v))
			end
		end
	elseif(#str > 0) then
		if(pErrorDB.all) then
			msg('Can\'t add to database, pError is filtering all events')
		else
			for k, v in next, pErrorDB.blacklist do
				if(find(str, v)) then
					tremove(pErrorDB.blacklist, k)
					return msg(format('Removed |cff95ff95\'%s\'|r from the database', v))
				end
			end

			tinsert(pErrorDB.blacklist, str)
			msg(format('Added |cff95ff95\'%s\'|r to the database', str))
		end
	else
		msg('Please provide an error string')
	end
end

local function onEvent(self, event, str, ...)
	if(event == 'UI_ERROR_MESSAGE') then
		if(pErrorDB.all) then
			return
		elseif(pErrorDB.blacklist[1]) then
			for k, v in next, pErrorDB.blacklist do
				if(find(lower(str), v)) then return end
			end
		end
	end

	return orig(self, event, str, ...)
end

local function onLoad(self, event, addon)
	if(addon ~= 'pError') then return end
	self:UnregisterEvent(event)

	pErrorDB = pErrorDB or {all = false, blacklist = {}}

	SLASH_pError1 = '/perror'
	SlashCmdList.pError = slashCommand

	UIErrorsFrame:SetScript('OnEvent', onEvent)
end

local addon = CreateFrame('Frame')
addon:RegisterEvent('ADDON_LOADED')
addon:SetScript('OnEvent', onLoad)