vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[--------------------------------------------------------------------------------
  ItemSync Invalid Cleaner Framework

  Author:  Derkyle
  Website: http://www.manaflux.com
-----------------------------------------------------------------------------------]]

local ISync_InvC_Count = 0;
local ISync_InvC_Count_Current = 0;
local ISync_InvClean_List = { };

---------------------------------------------------
-- ISync:InvCleaner_Load
---------------------------------------------------
function ISync:InvCleaner_Load()

        --initiate the timer variables
        ISync_InvCleaner_Timer.Todo = {};
        ISync_InvCleaner_Timer.Todo.n = 0;
  
end


---------------------------------------------------
-- ISync:InvCleaner_Update()
---------------------------------------------------
function ISync:InvCleaner_Update()

        while(ISync_InvCleaner_Timer.Todo[1] and 
        
                ISync_InvCleaner_Timer.Todo[1].time <= GetTime()) do
                
                --load the todo variable
                local todo = table.remove(ISync_InvCleaner_Timer.Todo,1);
                
                --check if there are arguments if so then load them
                if(todo.args) then
                        todo.handler(unpack(todo.args));
                --otherwise run the function
                else
                        todo.handler();
                end--if(todo.args) then
                
        end--end while
        
end


---------------------------------------------------
-- ISync:InvCleaner_Add()
---------------------------------------------------
function ISync:InvCleaner_Add(when,handler,...)

        --load the todo variable
        local todo = {};
        local i = 1;

        --set the time so that we can determine time passed later
        todo.time = when + GetTime();
        --save the handler for processing later
        todo.handler = handler;
        --save the arguements if there are any
        todo.args = arg;
        
        --start the while loop
        while(ISync_InvCleaner_Timer.Todo[i] and
        
                --syncronize the time
                ISync_InvCleaner_Timer.Todo[i].time < todo.time) do
                i = i + 1;
        end
        
        --insert the finished product into the frame's todo array
        table.insert(ISync_InvCleaner_Timer.Todo,i,todo);

end


--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------



---------------------------------------------------
-- ISync:InvCleaner
---------------------------------------------------
function ISync:InvCleaner(sNum)
local upNum = 0;
local sParseLink;
local storeProcessedLink;

        if(sNum == 0) then
                ISync_InvCleaner_Timer.Todo = {};
                ISync_InvCleaner_Timer.Todo.n = 0;
                ISync_InvC_Count = 0;
                ISync_InvC_Count_Current = 0;
                ISync_InvClean_List = nil;
                ISync_InvClean_List = { };
                sNum = 1; --MAKE SURE TO SET THIS TO 1
        end


        --check on database
        if(not ISyncDB) then return nil; end --the database should have been created
        if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end --don't even bother
        if(not sNum and ISync_InvC_Count_Current) then sNum = ISync_InvC_Count_Current; end
        if(not sNum and ISync_InvC_Count_Current == 0) then return nil; end
        if(not ISync_InvClean_List) then ISync_InvClean_List = { }; end
        
        --disable the button
        ISYNC_Options_CleanerButton:Disable();
        
        --get the itemcount only if it hasn't been done already
        if(ISync_InvC_Count == 0) then
        
                ISync_InvC_Count = ISync:InvClean_Randomize(); --randomize the information

                --check for errors
                if(not ISync_InvC_Count) then

                        if( DEFAULT_CHAT_FRAME ) then
                                DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: There were no items to process.");
                        end
                        
                        --Enable the button
                        ISYNC_Options_CleanerButton:Enable();

                        return nil;

                elseif(ISync_InvC_Count == 0) then

                        if( DEFAULT_CHAT_FRAME ) then
                                DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: There were no items to process.");
                        end

                        --Enable the button
                        ISYNC_Options_CleanerButton:Enable();
                        
                        return nil;

                else
                        --set the status bar
                        ISync_InvCleaner_Bar:SetAlpha(1);
                        ISync_InvCleaner_BarFrameStatusBar:SetStatusBarColor(1, 0, 0);
                        ISync_InvCleaner_BarFrameStatusBar:SetMinMaxValues(0, ISync_InvC_Count);
                        ISync_InvCleaner_Bar:Show();
                end
                
                
        
        end

        --CHECK AGAIN
        --You cannot have an element of zero
        if(sNum == 0) then sNum = 1; end


        --check count
        if(ISync_InvClean_List[sNum]) then
        
                --lets do 30 of them
                for iCount=sNum , (sNum + 30) , 1 do
                
                        --increment
                        ISync_InvC_Count_Current = ISync_InvC_Count_Current + 1;
                
                
                        --do a check
                        if(ISync_InvClean_List[iCount]) then
                                
                                --check the data
                                ISync:InvCleaner_ChkData(ISync_InvClean_List[iCount]);
                        
                        --it doesn't exist so lets break
                        elseif(not ISync_InvClean_List[iCount]) then

                                break; --break the for loop and end at the bottom
                        
                        end
                
                
                        --check to repeat
                        if(ISync_InvClean_List[iCount] and iCount >= (sNum + 30)) then
                        
                                --fix the count
                                if(ISync_InvC_Count_Current > ISync_InvC_Count) then 
                                        ISync_InvCleaner_BarText:SetText( ISync_InvC_Count.."/"..ISync_InvC_Count );
                                else
                                        ISync_InvCleaner_BarText:SetText( ISync_InvC_Count_Current.."/"..ISync_InvC_Count );
                                end
                        
                                --do the value
                                ISync_InvCleaner_BarFrameStatusBar:SetValue(ISync_InvC_Count_Current);
                        
                                ISync:InvCleaner_Add(7, ISync.InvCleaner, ISync_InvC_Count_Current);

                                return nil;
                                
                        end
                
                
                
                
                end--for iCount=sNum , (sNum + 30) , 1 do
        
        end--if(ISync_InvClean_List[sNum]) then


        --clear out
        ISync_InvClean_List = nil;

        ISync_InvCleaner_BarText:SetText( ISync_InvC_Count_Current.."/"..ISync_InvC_Count );
        ISync_InvCleaner_BarFrameStatusBar:SetValue(ISync_InvC_Count_Current);
        ISync_InvCleaner_Bar:Hide(); --hide it

        DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: "..ISYNC_CLEANER_COMPLETE);

        --Enable the button
        ISYNC_Options_CleanerButton:Enable();

end



---------------------------------------------------
-- ISync:InvCleaner_ChkData()
---------------------------------------------------
function ISync:InvCleaner_ChkData(sIndex)


        if(not sIndex) then return nil; end
        
        --attach variable
        local sParseLink;
        local storeProcessedLink;
        local storeLink;
        
        ---------------------------------------------------------------------------
        if(sIndex) then

                --check link
                local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..sIndex);

                if(not name_X or not link_X) then

                        UIParent.TooltipButton = this:GetID();
                        ISyncTooltip:SetOwner(this, "ANCHOR_RIGHT");
                        ISyncTooltip:SetHyperlink("item:"..sIndex);
                        ISyncTooltip:Show();

                end--if(name_X and link_X and ISYNC_REALM_NUM) then


        end
        ------------------------------------------------------------------------------


end




--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------



---------------------------------------------------
-- ISync:InvClean_Randomize()
---------------------------------------------------
function ISync:InvClean_Randomize()

        ISync_InvClean_List = { }; --reset
        ISync_InvC_Count = 0;
        
        for index, value in ISyncDB[ISYNC_REALM_NUM] do

                --check for number
                if(tonumber(index)) then
                
                        --it's pointless to do subitems since they share the same basic stats
                        local sParseLink = ISync:FetchDB(index, "subitem");

                        if(not sParseLink) then --this item has no subitems, cause it's subitem value = 0

                                local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:0:0");

                                if(not name_X or not link_X) then
                                        table.insert(ISync_InvClean_List, link_X);
                                        ISync_InvC_Count = ISync_InvC_Count + 1;
                                end

                        else

                                ---------------------------------------
                                --make sure it's a table
                                if(type(sParseLink) == "table") then

                                        for qindex, qvalue in sParseLink do

                                                --check
                                                local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:"..qvalue..":0");

                                                --do we have a valid item?
                                                if(not name_X or not link_X) then

                                                        table.insert(ISync_InvClean_List, link_X);
                                                        ISync_InvC_Count = ISync_InvC_Count + 1;
                                                end

                                        end--for qindex, qvalue in sParseLink do

                                end--if(type(sParseLink) == "table") then
                                ---------------------------------------

                        end--if(not sParseLink) then

                end

        end
        
        --check
        if(getn(ISync_InvClean_List) <= 0) then return nil; end
        
        
        --Now randomize the next table using the gathered one. This will prevent disconnections on the same item over and over.
        local iChk = 1;
        local sTempDB = { };
        local sNumRand = 0;
        
        --loop
        while iChk>0 do
                
                if(not ISync_InvClean_List or getn(ISync_InvClean_List) <= 0) then iChk = 0; end --reset
                
                --check
                if(iChk == 1) then
                
                        sNumRand = math.random(1, getn(ISync_InvClean_List));

                        --add it to the temp list
                        table.insert(sTempDB, ISync_InvClean_List[sNumRand]);

                        --remove it from old list
                        table.remove(ISync_InvClean_List,sNumRand);
                
                end
        end

        
        --now replace the old with new
        ISync_InvClean_List = nil;
        ISync_InvClean_List = sTempDB;
        sTempDB = nil;
        
        
        return ISync_InvC_Count;
        
end

Generated by GNU Enscript 1.6.5.90.