WoWInterface SVN zz_itemsdb

[/] [trunk/] [zz_itemsdb/] [guildbank.lua] - Rev 62

Compare with Previous | Blame | View Log

local name, addon = ...
local modulname = 'guildbank'
local events = {}
local modul = {
        ['name'] = modulname,
        ['typ'] = 'guild'
}
local GuildBankIsOpen = false
local failCount = 0
local lgbc
local function gbagLoop(id)
        local res = {}
        local dName = modulname.."Count"
        for k,v in pairs(modul['db']) do
                local guilds = addon:getGuilds()
                if(guilds[k]) then
                        local guildID = addon.getGID()
                        if(guildID and guilds[k]['faction']==guilds[guildID]['faction'] or not guildID) then
                                local guildname = guilds[k]['name']
                                for bag,list in pairs(v) do
                                        for a,b in pairs(list) do
                                                if(a == id) then
                                                        res[guildname] = res[guildname] or {
                                                                [dName] = 0
                                                        }
                                                        res[guildname][dName] = res[guildname][dName] or 0
                                                        res[guildname][dName] = res[guildname][dName] + b['count']
                                                end
                                        end
                                end
                        end
                end
        end
        return res
end
function modul.Search2(id,res,mode)
        local guildID = addon.getGID()
        if(guildID) then
                modul['db'][guildID] = modul['db'][guildID] or {}
        end
        res = res or {}
        for guildname, b in pairs(gbagLoop(id)) do
                if(mode) then
                        res[#res+1] = format(" %s: %s",addon:colorize(guildname,"00ffff"),addon:colorize(b[modulname..'Count'],"ffffff"))
                else
                        res[#res+1] = format("%s %s: %s",addon:getIcon(id),guildname,addon:colorize(b[modulname..'Count'],"ffffff"))
                end
        end
        return res
end
local function scanGuildBank(tab)
        local itemlist = {}
        for slot = 1,98 do
                local texturePath, itemCount, locked, isFiltered = GetGuildBankItemInfo(tab,slot)
                if(itemCount>0) then
                        local itemLink = GetGuildBankItemLink(tab,slot)
                        if(itemLink) then
                                local id = addon:getItemId(itemLink)
                                if(id) then
                                        itemlist[id] = itemlist[id] or {}
                                        itemlist[id]['count'] = itemlist[id]['count'] or 0
                                        itemlist[id]['count'] = itemlist[id]['count'] + itemCount
                                        addon:getName(id)
                                end
                        end
                end
        end
        local count = 0
        for k,v in pairs(itemlist) do
                count = count + 1
        end
        if(count==0 and failCount<3) then
                C_Timer.After(.2, function(tab) scanGuildBank(tab) end)
                failCount = failCount + 1
                return
        end
        failCount = 0
        return count==0 and nil or itemlist
end
function events:GUILDBANKBAGSLOTS_CHANGED(event,...)
        if(not addon.checkGID() or not GuildBankIsOpen) then return end
        local tab = GetCurrentGuildBankTab()
        if(tab>0) then
                local guildID = addon.getGID()
                if(guildID) then
                        local list = scanGuildBank(tab)
                        if(list) then
                                modul['db'][guildID][tab] = list
                        end
                end
        end
end
function events:GUILDBANKFRAME_CLOSED(event,...)
        GuildBankIsOpen = false
end
function events:GUILDBANKFRAME_OPENED(event,...)
        GuildBankIsOpen = true
end
local function OnEvent(self,event,...)
        local guildID = addon.getGID()
        if(guildID and type(events[event])=='function') then
                modul['db'] = addon:GetNamespace(modul.name)
                modul['db'][guildID] = modul['db'][guildID] or {}
                events[event](self, event, ...)
        end
end
local function lgbc_scan(page)
        local guildID = addon.getGID()
        if(guildID and page) then
                local itemlist = {}
                for slot, link, stack in lgbc:IteratePage(page) do
                        local id = addon:getItemId(link)
                        if(id) then
                                empty = false
                                itemlist[id] = itemlist[id] or {}
                                itemlist[id]['count'] = itemlist[id]['count'] or 0
                                itemlist[id]['count'] = itemlist[id]['count'] + stack
                                addon:getName(id)
                        end
                end
                modul['db'][guildID][page] = itemlist
        end
end
local function lgbc_scanAll()
        for page = 1, lgbc:GetNumBankTabs() do
                lgbc_scan(page)
        end
end
function modul:OnPageSync(event, sender, page, guildName)
        print(event, sender, page, guildName)
        local guildID = addon.getGID()
        lgbc_scan(page)
end
function modul:Delete(id, typ)
        self['db'] = addon:GetNamespace(modul.name)
        if(typ == self['typ'] and id and id>0) then
                self['db'][id] = nil
        end
end
function modul:Enable()
        self.status = true
        local list = {}
        for event,func in pairs(events) do
                list[#list+1] = event
        end
        lgbc = LibStub("LibGuildBankComm-1.0")
        if(lgbc) then
                lgbc.RegisterCallback(self,"GuildBankComm_PageUpdate", "OnPageSync")
        end
        self.frame = addon:RegisterFunc(list,"OnEvent",OnEvent)
end
function modul:Disable()
        self.status = false
        for event,func in pairs(events) do
                self.frame:UnregisterEvent(event)
        end
        if(lgbc) then
                lgbc.UnregisterCallback(self, "GuildBankComm_PageUpdate")
        end
end
addon['inits'][#addon['inits']+1] = function()
        modul.db,modul.status = addon:RegisterModul(modul, modulname)
        if(modul.status) then
                modul:Enable()
        end
end

Compare with Previous | Blame