vanilla-wow-addons – Rev 1

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

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

local ISync_OptCount = 0;
local ISync_OptCount_Current = 0;
local ISync_Opt_List = { };

---------------------------------------------------
-- ISync:Optimize_Load
---------------------------------------------------
function ISync:Optimize_Load()

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


---------------------------------------------------
-- ISync:Optimize_Update()
---------------------------------------------------
function ISync:Optimize_Update()

        while(ISync_Optimize_Timer.Todo[1] and 
        
                ISync_Optimize_Timer.Todo[1].time <= GetTime()) do
                
                --load the todo variable
                local todo = table.remove(ISync_Optimize_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:Optimize_Add()
---------------------------------------------------
function ISync:Optimize_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_Optimize_Timer.Todo[i] and
        
                --syncronize the time
                ISync_Optimize_Timer.Todo[i].time < todo.time) do
                i = i + 1;
        end
        
        --insert the finished product into the frame's todo array
        table.insert(ISync_Optimize_Timer.Todo,i,todo);

end


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



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

        if(sNum == 0) then
                ISync_Optimize_Timer.Todo = {};
                ISync_Optimize_Timer.Todo.n = 0;
                ISync_OptCount = 0;
                ISync_OptCount_Current = 0;
                ISync_Opt_List = nil;
                ISync_Opt_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_OptCount_Current) then sNum = ISync_OptCount_Current; end
        if(not sNum and ISync_OptCount_Current == 0) then return nil; end
        if(not ISync_Opt_List) then ISync_Opt_List = { }; end
        
        --disable the button
        ISync_OptionsOptimizeButton:Disable();
        
        --get the itemcount only if it hasn't been done already
        if(ISync_OptCount == 0) then
        
                --loop through items
                for index, value in ISyncDB[ISYNC_REALM_NUM] do
                
                        --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
                        
                                table.insert(ISync_Opt_List, index..":0:0:0");
                                
                                ISync_OptCount = ISync_OptCount + 1;
                                
                        end--if(not sParseLink) then
                        
                end
        
                --check for errors
                if(not ISync_OptCount) then

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

                        return nil;

                elseif(ISync_OptCount == 0) then

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

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

                else
                        --set the status bar
                        ISync_Optimize_Bar:SetAlpha(1);
                        ISync_Optimize_BarFrameStatusBar:SetStatusBarColor(1, 1, 0);
                        ISync_Optimize_BarFrameStatusBar:SetMinMaxValues(0, ISync_OptCount);
                        ISync_Optimize_Bar:Show();
                end
                
                
        
        end

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


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

                                break; --break the for loop and end at the bottom
                        
                        end
                
                
                        --check to repeat
                        if(ISync_Opt_List[iCount] and iCount >= (sNum + 500)) then
                        
                                --fix the count
                                if(ISync_OptCount_Current > ISync_OptCount) then 
                                        ISync_Optimize_BarText:SetText( ISync_OptCount.."/"..ISync_OptCount );
                                else
                                        ISync_Optimize_BarText:SetText( ISync_OptCount_Current.."/"..ISync_OptCount );
                                end
                        
                                --do the value
                                ISync_Optimize_BarFrameStatusBar:SetValue(ISync_OptCount_Current);
                        
                                ISync:Optimize_Add(7, ISync.Optimize, ISync_OptCount_Current);

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


        --clear out
        ISync_Opt_List = nil;

        ISync_Optimize_BarText:SetText( ISync_OptCount_Current.."/"..ISync_OptCount );
        ISync_Optimize_BarFrameStatusBar:SetValue(ISync_OptCount_Current);
        ISync_Optimize_Bar:Hide(); --hide it

        DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: "..ISYNC_OPTIMIZE_COMPLETE.."!");

        --Enable the button
        ISync_OptionsOptimizeButton:Enable();

end



---------------------------------------------------
-- ISync:Optimize_ChkData()
---------------------------------------------------
function ISync:Optimize_ChkData(sName)

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

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

                if(sName and link_X) then

                        ISync:Do_Parse(UIParent, ISyncTooltip, ISync:GetCoreID(index), link_X);

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


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


end